diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 4578c6b09b8..4809d566709 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -17,6 +17,7 @@ A clear and concise description of what you want to happen. A clear and concise description of any alternative solutions or features you've considered. **Acceptance Criteria** + 1. GIVEN [a precondition] AND [another precondition] diff --git a/.github/workflows/reindex.yml b/.github/workflows/reindex.yml new file mode 100644 index 00000000000..96cfe74d954 --- /dev/null +++ b/.github/workflows/reindex.yml @@ -0,0 +1,47 @@ +name: Reindex - Integration Tests + +on: + pull_request: + paths-ignore: + - 'docs/**' + - 'demo/**' + - '.github/workflows/site.yml' + - '.github/workflows/release.yml' + +jobs: + reindex: + runs-on: ubuntu-latest + if: "!contains(github.event.pull_request.labels.*.name, 'ci-skip')" + strategy: + matrix: + datastore: [ 'db2', 'derby', 'postgres' ] + fail-fast: false + steps: + - name: Checkout source code + uses: actions/checkout@v2.3.4 + - name: Set up java + uses: joschi/setup-jdk@v2.3.0 + with: + java-version: 11 + - name: Setup prerequisites + env: + WORKSPACE: ${{ github.workspace }} + run: bash build/reindex/bin/setup-prerequisites.sh ${{matrix.datastore}} + - name: Integration Tests + env: + WORKSPACE: ${{ github.workspace }} + run: | + bash build/reindex/bin/pre-integration-test.sh ${{matrix.datastore}} + bash build/reindex/bin/integration-test.sh ${{matrix.datastore}} + bash build/reindex/bin/post-integration-test.sh ${{matrix.datastore}} + - name: Gather error logs + if: failure() + env: + WORKSPACE: ${{ github.workspace }} + run: bash build/common/gather-logs.sh reindex ${{matrix.datastore}} + - name: Upload logs + if: always() + uses: actions/upload-artifact@v2.2.0 + with: + name: integration-test-results-${{ matrix.datastore }} + path: build/reindex/integration-test-results diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cc361367bb1..7f8f0bbc565 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,9 +26,9 @@ pull request so it can be tracked. ### Merge approval -The project maintainers use LGTM (Looks Good To Me) in comments on the code -review to indicate acceptance. A change requires LGTMs from two of the -maintainers of each component affected. +The project maintainers use [GitHub reviews](https://github.com/features/code-review) to indicate acceptance. +A change requires approval from two of the maintainers of each component affected. +Sometimes, reviewers will leave a comment "LGTM" to indicate that the change "looks good to me". For a list of the maintainers, see the [MAINTAINERS.md](MAINTAINERS.md) page. @@ -86,7 +86,7 @@ The IBM FHIR Server has been written by many individuals over many years. Format 2. Use comments. Preferably javadoc. -3. Keep the documentation up-to-date. Project documentation exists under the docs directory. We have a CHANGELOG for tracking user-visible changes, a Conformance page for documenting conformance to the specification, and a User Guide for FHIR Server administrators. +3. Keep the documentation up-to-date. Project documentation exists under the docs directory. We have a Conformance page for documenting conformance to the specification, a User Guide for FHIR Server administrators, and other guides for select topics of interest. In addition to the project site, we also have README.md files for many of the modules. 4. Use spaces (not tabs) in java source. For this we have a checkstyle rule which will fail the build if you're using tabs. We also prefer spaces over tabs in JSON and XML, but its not strictly enforced. diff --git a/README.md b/README.md index 8d1bbd1747c..3ba8687cdf1 100644 --- a/README.md +++ b/README.md @@ -102,14 +102,15 @@ The IBM FHIR Server is modular and extensible. The following tables provide an o |fhir-operation-document|Basic support for the Composition `$document` operation defined at https://www.hl7.org/fhir/operation-composition-document.html |false| |fhir-operation-healthcheck|The `$healthcheck` operation checks for a valid connection to the database and returns the server status|false| |fhir-operation-term|[Terminology service](https://www.hl7.org/fhir/terminology-service.html) operations which use the default fhir-term TerminologyServiceProvider to implement $expand, $lookup, $subsumes, $closure, $validate and $translate|false| +|fhir-operation-term-cache|Add-on module that provides operations for clearing the terminology subsystem caches for non-production scenarios|false| |fhir-operation-validate|An implementation of the FHIR resource [$validate operation](https://www.hl7.org/fhir/R4/operation-resource-validate.html)|false| |fhir-operation-everything|An implementation of the FHIR patient [`$everything`](https://www.hl7.org/fhir/operation-patient-everything.html) operation|false| +|fhir-operation-erase|A hard delete operation for resource instances referred to as the `$erase` operation. See the [README.md](operation/fhir-operation-erase/README.md)|false| #### Client |Module|Description|Java API-stable| |------|-----------|----------| |fhir-client|A FHIR Client that re-uses the IBM FHIR Server model and its JAX-RS Providers|false| -|fhir-cli|Experimental command line interface utility for working with the IBM FHIR Server client from the command line|false| #### Tools and Utilities |Module|Description|Java API-stable| diff --git a/build/audit/kafka/pre-integration-test.sh b/build/audit/kafka/pre-integration-test.sh index 7ecea87111d..fe57602e6cc 100644 --- a/build/audit/kafka/pre-integration-test.sh +++ b/build/audit/kafka/pre-integration-test.sh @@ -39,6 +39,7 @@ config(){ mkdir -p $USERLIB find ${WORKSPACE}/conformance -iname 'fhir-ig*.jar' -not -iname 'fhir*-tests.jar' -not -iname 'fhir*-test-*.jar' -exec cp -f {} ${USERLIB} \; cp -pr ${WORKSPACE}/operation/fhir-operation-test/target/fhir-operation-*-tests.jar ${USERLIB} + cp -pr ${WORKSPACE}/operation/fhir-operation-term-cache/target/fhir-operation-*.jar ${USERLIB} echo "Finished copying fhir-server dependencies..." # Move over the test configurations diff --git a/build/common/gather-logs.sh b/build/common/gather-logs.sh new file mode 100644 index 00000000000..a6ab5e53e5d --- /dev/null +++ b/build/common/gather-logs.sh @@ -0,0 +1,74 @@ +#!/usr/bin/env bash + +############################################################################### +# (C) Copyright IBM Corp. 2021 +# +# SPDX-License-Identifier: Apache-2.0 +############################################################################### + +set -ex + +# Gathers the logs +package_logs(){ + workflow="${1}" + job="${2}" + echo "Gathering logs for [${workflow}/${job}]" + + it_results=${WORKSPACE}/build/${workflow}/integration-test-results + if [ ! -d ${it_results} ] + then + rm -fr ${it_results} 2>/dev/null + fi + + mkdir -p ${it_results} + mkdir -p ${it_results}/server-logs + mkdir -p ${it_results}/fhir-server-test + + # Runtime Date + echo $(date) > ${it_results}/runtime.txt + + # Look for the FHIR Server Container + containerId=$(docker ps -a | grep ibm-fhir-server | cut -d ' ' -f 1) + if [ -z "${containerId}" ] + then + echo "Warning: Could not find fhir container!!!" + else + echo "fhir container id: $containerId" + # Grab the container's console log + docker logs $containerId >& ${it_results}/docker-console.txt + + echo "Gathering post-test server logs from docker container: $containerId" + docker cp -L $containerId:/logs ${it_results}/server-logs + fi + + echo "Gathering integration test output" + if [ -d ${WORKSPACE}/fhir-server-test/target/surefire-reports ] + then + cp -pr ${WORKSPACE}/fhir-server-test/target/surefire-reports/* ${it_results}/fhir-server-test + fi + + if [ -f ${WORKSPACE}/build/${workflow}/${job}/workarea/${job}-test1.log ] + then + echo "Move the '${job}' Elements to the output area'" + cp -pr build/${workflow}/${job}/workarea/${job}-test*.log ${it_results} + fi +} + +############################################################################### +# Check if the workspace is set. +if [ -z "${WORKSPACE}" ] +then + echo "The WORKSPACE value is unset" + exit -1 +fi + +# Store the current directory to reset to +pushd $(pwd) > /dev/null + +package_logs "${1}" "${2}" + +# Reset to Original Directory +popd > /dev/null + +# EOF +############################################################################### \ No newline at end of file diff --git a/build/docker/copy-test-operations.sh b/build/docker/copy-test-operations.sh index 24bfb1fcce7..c8fdcfc548a 100755 --- a/build/docker/copy-test-operations.sh +++ b/build/docker/copy-test-operations.sh @@ -19,5 +19,6 @@ mkdir -p $USERLIB echo "Copying test artifacts to install location..." find ${WORKSPACE}/conformance -iname 'fhir-ig*.jar' -not -iname 'fhir*-tests.jar' -not -iname 'fhir*-test-*.jar' -exec cp -f {} ${USERLIB} \; cp -pr ${WORKSPACE}/operation/fhir-operation-test/target/fhir-operation-*-tests.jar ${USERLIB} +cp -pr ${WORKSPACE}/operation/fhir-operation-term-cache/target/fhir-operation-*.jar ${USERLIB} echo "Finished copying test operations." diff --git a/build/notifications/kafka/pre-integration-test.sh b/build/notifications/kafka/pre-integration-test.sh index 0799a1468a4..8687fbec4d7 100644 --- a/build/notifications/kafka/pre-integration-test.sh +++ b/build/notifications/kafka/pre-integration-test.sh @@ -38,6 +38,7 @@ config(){ mkdir -p $USERLIB find ${WORKSPACE}/conformance -iname 'fhir-ig*.jar' -not -iname 'fhir*-tests.jar' -not -iname 'fhir*-test-*.jar' -exec cp -f {} ${USERLIB} \; cp -pr ${WORKSPACE}/operation/fhir-operation-test/target/fhir-operation-*-tests.jar ${USERLIB} + cp -pr ${WORKSPACE}/operation/fhir-operation-term-cache/target/fhir-operation-*.jar ${USERLIB} echo "Finished copying fhir-server dependencies..." # Move over the test configurations diff --git a/build/persistence/postgres/pre-integration-test.sh b/build/persistence/postgres/pre-integration-test.sh index b6fb9e3abcb..81d7a2b5222 100644 --- a/build/persistence/postgres/pre-integration-test.sh +++ b/build/persistence/postgres/pre-integration-test.sh @@ -64,6 +64,7 @@ copy_server_config(){ echo "Copying test artifacts to install location..." find ${WORKSPACE}/conformance -iname 'fhir-ig*.jar' -not -iname 'fhir*-tests.jar' -not -iname 'fhir*-test-*.jar' -exec cp -f {} ${USERLIB} \; cp -pr ${WORKSPACE}/operation/fhir-operation-test/target/fhir-operation-*-tests.jar ${USERLIB} + cp -pr ${WORKSPACE}/operation/fhir-operation-term-cache/target/fhir-operation-*.jar ${USERLIB} echo "Finished copying fhir-server dependencies..." } diff --git a/build/pre-integration-test.ps1 b/build/pre-integration-test.ps1 index 6a57310b951..2550bf8282d 100644 --- a/build/pre-integration-test.ps1 +++ b/build/pre-integration-test.ps1 @@ -118,6 +118,9 @@ If (!(Test-Path -Path $USERLIB_DIR) ) { } Copy-Item $CP_ITEM -Destination $USERLIB_DST +$CP_ITEM=[string]$DIR_WORKSPACE + '\operation\fhir-operation-term-cache\target\fhir-operation-term-cache-*.jar' +Copy-Item $CP_ITEM -Destination $USERLIB_DST + # Start up the fhir server $DATE_PS=[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Greenwich Standard Time').ToString('t') Write-Host '>>> Current time: ' $DATE_PS diff --git a/build/pre-integration-test.sh b/build/pre-integration-test.sh index 3619aea566b..fe1f809620c 100755 --- a/build/pre-integration-test.sh +++ b/build/pre-integration-test.sh @@ -74,6 +74,7 @@ cp -p ${WORKSPACE}/fhir-server/liberty-config/configDropins/disabled/datasource- echo "Copying test artifacts to install location..." rm -rf ${SIT}/wlp/usr/servers/fhir-server/userlib/fhir-operation-*-tests.jar cp -pr ${WORKSPACE}/operation/fhir-operation-test/target/fhir-operation-*-tests.jar ${SIT}/wlp/usr/servers/fhir-server/userlib/ +cp -pr ${WORKSPACE}/operation/fhir-operation-term-cache/target/fhir-operation-*.jar ${SIT}/wlp/usr/servers/fhir-server/userlib/ find ${WORKSPACE}/conformance -iname 'fhir-ig*.jar' -not -iname 'fhir*-tests.jar' -not -iname 'fhir*-test-*.jar' -exec cp -f {} ${SIT}/wlp/usr/servers/fhir-server/userlib/ \; # Start up the fhir server diff --git a/build/reindex/.gitignore b/build/reindex/.gitignore new file mode 100644 index 00000000000..2af40aabb04 --- /dev/null +++ b/build/reindex/.gitignore @@ -0,0 +1,2 @@ +**/integration-test-results +**/workarea \ No newline at end of file diff --git a/build/reindex/README.md b/build/reindex/README.md new file mode 100644 index 00000000000..4b25fa3841a --- /dev/null +++ b/build/reindex/README.md @@ -0,0 +1,48 @@ +# Integration Test Framework for the $reindex Operation + +This document outlines the end-to-end reindex automation framework. + +The automation runs with these steps: + +- **Checkout source code** - Checks out the git code and populates the `github` environment variables. +- **Set up java** - Downloads and setup for Java 11 +- **Setup prerequisites** - This step builds the required artifacts necessary to test the build with the reindex. +- **Integration Tests** - The step executes the pre-integration-docker, then integration-test-docker and runs the post-integration-docker scripts. +- **Gather error logs** - This step only runs upon a failure condition. +- **Upload logs** - The step uploads the results of the integration tests and the operational logs are posted to the job. + +The GitHub Action is parameterized with a matrix for each new `$reindex` tests. Each additional entry in the array ends up creating multiple automation steps which must complete successfully for the workflow. + +``` yaml +strategy: + matrix: + datastore: [ 'db2', 'derby', 'postgres' ] +``` + +Each datastore layer that is tested as part of the framework uses the default build files and the files that match the `matrix.datastore` name added to the `reindex.yml`. + +|Filename|Purpose| +|----------|----------------| +|bin/gather-logs.sh|Gathers the logs from the build| +|bin/integration-test.sh|Run after the tests complete to release resources and package tests results| +|bin/setup-prerequisites.sh|Builds the fhir-server| +|bin/pre-integration-test.sh|Call the pre-integration-test step for ``| +|bin/post-integration-test.sh|Call the post-integration-test step for ``| +|``/integration-test.sh|if exists, overrides bin/integration-test.sh, replacing the prior test behavior.| +|``/pre-integration-test.sh|Run before integration-test.sh to startup image and services for the integration testing| +|``/post-integration-test.sh|if exists, runs after integration-test.sh to stop image and services from the integration testing| +|``/.gitignore|Ignores files related to the reindex layer's tests| +|`README.md`|This file describing the reindex framework| + +Note, `` is replaced with your reindex layer such as `db2`. + +Transaction Timeout is 300 seconds. + +Consult the reference implementation (`db2`) to start a new reindex tests. The minimum that must be implemented are the `pre-integration-test.sh` and `.gitignore`. + +## Test the Automation + +To test the build, be sure to pre-set the environment variable `WORKSPACE` with `export WORKSPACE=$(pwd)`. +You must also start Docker, so the image is built that supports the IBM FHIR Server. + +If you have any questions, please reach out on Zulip. \ No newline at end of file diff --git a/build/reindex/bin/integration-test.sh b/build/reindex/bin/integration-test.sh new file mode 100644 index 00000000000..4d6d9c95179 --- /dev/null +++ b/build/reindex/bin/integration-test.sh @@ -0,0 +1,120 @@ +#!/usr/bin/env bash + +############################################################################### +# (C) Copyright IBM Corp. 2021 +# +# SPDX-License-Identifier: Apache-2.0 +############################################################################### + +set -ex +set -o pipefail + +# spins for a set time until the server is up +wait_for_it(){ + # Wait until the fhir server is up and running... + echo "Waiting for fhir-server to complete initialization..." + healthcheck_url='https://localhost:9443/fhir-server/api/v4/$healthcheck' + tries=0 + status=0 + while [ $status -ne 200 -a $tries -lt 30 ]; do + tries=$((tries + 1)) + + set +o errexit + cmd="curl -k -o ${WORKSPACE}/health.json --max-time 5 -I -w "%{http_code}" -u fhiruser:change-password $healthcheck_url" + echo "Executing[$tries]: $cmd" + status=$($cmd) + set -o errexit + + echo "Status code: $status" + if [ $status -ne 200 ] + then + echo "Sleeping 30 secs..." + sleep 30 + fi + done + + if [ $status -ne 200 ] + then + echo "Could not establish a connection to the fhir-server within $tries REST API invocations!" + exit 1 + fi + + echo "The fhir-server appears to be running..." +} + +run_tests(){ + # The integration tests may be overriden completely, or fall through to the default. + reindex="${1}" + + if [ ! -z "${reindex}" ] && [ -f "build/reindex/${reindex}/integration-test.sh" ] + then + echo "Running [${reindex}] specific integration tests" + bash build/reindex/${reindex}/integration-test.sh + else + # Go to the Default + echo "Executing the default integration tests" + sed -i -e 's/test.reindex.enabled = false/test.reindex.enabled = true/g' ${WORKSPACE}/fhir-server-test/src/test/resources/test.properties + + # Test 1 - Basic Tests for Reindex + mvn -B test -f fhir-server-test -DskipWebSocketTest=true --no-transfer-progress \ + -DskipTests=false -Dtest="com.ibm.fhir.server.test.operation.ReindexOperationTest" | tee build/reindex/${reindex}/workarea/${reindex}-test1.log + + # Test 2 - Long Run Tests *895 Resources* + mvn -B test -f fhir-server-test -DskipWebSocketTest=true --no-transfer-progress \ + -DskipTests=false -Dtest="com.ibm.fhir.server.test.operation.ReindexOperationLongRunTest" | tee build/reindex/${reindex}/workarea/${reindex}-test2.log + + # Test 3 Phase 1 + mvn -B test -f fhir-server-test -DskipWebSocketTest=true --no-transfer-progress \ + -DskipTests=false -Dtest="com.ibm.fhir.server.test.operation.ReindexOperationPhase1Test" | tee build/reindex/${reindex}/workarea/${reindex}-test3.log + + # Update SPs + cp -pr ${WORKSPACE}/fhir-server-test/src/test/resources/testdata/reindex-operation/extension-search-parameters-test1.json \ + ${WORKSPACE}/build/reindex/${reindex}/workarea/volumes/dist/config/default/extension-search-parameters.json + + # Restart + cd build/reindex/${reindex} + docker-compose restart --timeout 30 fhir + cd - + wait_for_it + + # Test 3 Phase 2 + mvn -B test -f fhir-server-test -DskipWebSocketTest=true --no-transfer-progress \ + -DskipTests=false -Dtest="com.ibm.fhir.server.test.operation.ReindexOperationPhase2Test" | tee build/reindex/${reindex}/workarea/${reindex}-test4.log + + # Update SPs + cp -pr ${WORKSPACE}/fhir-server-test/src/test/resources/testdata/reindex-operation/extension-search-parameters-test2.json \ + ${WORKSPACE}/build/reindex/${reindex}/workarea/volumes/dist/config/default/extension-search-parameters.json + + # Restart + cd build/reindex/${reindex} + docker-compose restart --timeout 30 fhir + cd - + wait_for_it + + # Test 3 Phase 3 + mvn -B test -f fhir-server-test -DskipWebSocketTest=true --no-transfer-progress \ + -DskipTests=false -Dtest="com.ibm.fhir.server.test.operation.ReindexOperationPhase3Test" | tee build/reindex/${reindex}/workarea/${reindex}-test5.log + fi +} + +############################################################################### +# Check if the workspace is set. +if [ -z "${WORKSPACE}" ] +then + echo "The WORKSPACE value is unset" + exit -1 +fi + +# Store the current directory to reset to +pushd $(pwd) > /dev/null + +# Change to the reindex/bin directory +cd "${WORKSPACE}" + +run_tests "${1}" + +# Reset to Original Directory +popd > /dev/null + +# EOF +############################################################################### \ No newline at end of file diff --git a/build/reindex/bin/post-integration-test.sh b/build/reindex/bin/post-integration-test.sh new file mode 100644 index 00000000000..9d102ee6755 --- /dev/null +++ b/build/reindex/bin/post-integration-test.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +############################################################################### +# (C) Copyright IBM Corp. 2021 +# +# SPDX-License-Identifier: Apache-2.0 +############################################################################### + +set -ex + +# reindex_post - executes for each reindex post integration steps +reindex_post(){ + reindex="${1}" + if [ ! -z "${reindex}" ] && [ -f build/reindex/${reindex}/post-integration-test.sh ] + then + echo "Running [${reindex}] post-integration-test" + bash build/reindex/${reindex}/post-integration-test.sh + else + cd build/reindex/${reindex} + docker-compose down --remove-orphans --rmi local -v --timeout 30 + fi +} + +############################################################################### +# Check if the workspace is set. +if [ -z "${WORKSPACE}" ] +then + echo "The WORKSPACE value is unset" + exit -1 +fi + +# Store the current directory to reset to +pushd $(pwd) > /dev/null + +cd "${WORKSPACE}" + +reindex_post ${1} + +# Reset to Original Directory +popd > /dev/null + +# EOF +############################################################################### \ No newline at end of file diff --git a/build/reindex/bin/pre-integration-test.sh b/build/reindex/bin/pre-integration-test.sh new file mode 100755 index 00000000000..b4713d3feda --- /dev/null +++ b/build/reindex/bin/pre-integration-test.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +############################################################################### +# (C) Copyright IBM Corp. 2021 +# +# SPDX-License-Identifier: Apache-2.0 +############################################################################### + +set -ex + +# reindex_pre - executes for each reindex pre integration steps +reindex_pre(){ + reindex="${1}" + if [ ! -z "${reindex}" ] && [ -f build/reindex/${reindex}/pre-integration-test.sh ] + then + echo "Running [${reindex}] pre-integration-test" + bash build/reindex/${reindex}/pre-integration-test.sh + fi +} + +############################################################################### +# Check if the workspace is set. +if [ -z "${WORKSPACE}" ] +then + echo "The WORKSPACE value is unset" + exit -1 +fi + +# Store the current directory to reset to +pushd $(pwd) > /dev/null + +# Change to the reindex_pre +cd "${WORKSPACE}" + +reindex_pre "${1}" + +# Reset to Original Directory +popd > /dev/null + +# EOF +############################################################################### \ No newline at end of file diff --git a/build/reindex/bin/setup-prerequisites.sh b/build/reindex/bin/setup-prerequisites.sh new file mode 100644 index 00000000000..0c87d88ccea --- /dev/null +++ b/build/reindex/bin/setup-prerequisites.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + +############################################################################### +# (C) Copyright IBM Corp. 2021 +# +# SPDX-License-Identifier: Apache-2.0 +############################################################################### + +set -ex + +# required_build - executes for every build +required_build(){ + # Clean up the packages and docker files not on the Mac + if [[ "$OSTYPE" != "darwin"* ]] + then + sudo apt clean + docker rmi $(docker image ls -aq) + df -h + fi + + # build binaries + mvn -T2C -B install --file fhir-examples --no-transfer-progress + mvn -T2C -B install --file fhir-parent -DskipTests -P include-fhir-igs,integration --no-transfer-progress + + # create and remove a 1 GB file to make sure we have the room needed later + df -h + dd if=/dev/urandom oflag=direct of=balloon.dat bs=1024k count=1000 + rm -f balloon.dat + sudo apt clean + docker system prune -f + df -h + + docker version + + # Build dockerfile + cd fhir-install + docker build -t ibmcom/ibm-fhir-server:latest . + cd .. +} + +# reindex_build - executes for each reindex type. +reindex_build(){ + reindex="${1}" + if [ -f "build/reindex/${reindex}/setup-prerequisites.sh" ] + then + echo "Running [${reindex}] setting setup prerequisites" + bash build/reindex/${reindex}/setup-prerequisites.sh + fi +} + +############################################################################### +# Store the current directory to reset to +pushd $(pwd) > /dev/null + +if [ -z "${WORKSPACE}" ] +then + echo "The WORKSPACE value is unset" + exit -1 +fi + +# Change to the release directory +cd "${WORKSPACE}" + +required_build +reindex_build "${1}" + +# Reset to Original Directory +popd > /dev/null + +# EOF +############################################################################### \ No newline at end of file diff --git a/build/reindex/db2/.fhir.env b/build/reindex/db2/.fhir.env new file mode 100644 index 00000000000..6612c66eb1e --- /dev/null +++ b/build/reindex/db2/.fhir.env @@ -0,0 +1,3 @@ +# Environment values for FHIR +BOOTSTRAP_DB=false +FHIR_TRANSACTION_MANAGER_TIMEOUT=240s \ No newline at end of file diff --git a/build/reindex/db2/Dockerfile b/build/reindex/db2/Dockerfile new file mode 100644 index 00000000000..da6e21732fc --- /dev/null +++ b/build/reindex/db2/Dockerfile @@ -0,0 +1,21 @@ +# ---------------------------------------------------------------------------- +# (C) Copyright IBM Corp. 2021 +# +# SPDX-License-Identifier: Apache-2.0 +# ---------------------------------------------------------------------------- + +FROM ibmcom/db2 + +# Create a non-admin user for the FHIR server to use to access db2 +RUN groupadd -g 1002 fhir && \ + useradd -u 1002 -g fhir -M -d /database/config/fhirserver fhirserver && \ + echo "change-password" | passwd --stdin fhirserver + +# Indicate that we expect to connect to the Db2 service on port 50000 +EXPOSE 50000 + +# Set up the database configuration and build to be run by the main Db2 container configuration +# per https://hub.docker.com/r/ibmcom/db2 +RUN mkdir /var/custom +COPY create-database.sh /var/custom +RUN chmod +x /var/custom/create-database.sh diff --git a/build/reindex/db2/create-database.sh b/build/reindex/db2/create-database.sh new file mode 100644 index 00000000000..3ce2b22ed79 --- /dev/null +++ b/build/reindex/db2/create-database.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +############################################################################### +# (C) Copyright IBM Corp. 2021 +# +# SPDX-License-Identifier: Apache-2.0 +############################################################################### + +# Set the instance_memory and enable to trial license to avoid memory allocation failures. +echo "Adding the 90-day trial license..." +/opt/ibm/db2/V11.5/adm/db2licm -a /var/db2/db2trial.lic + +echo "Configuring automatic memory managment..." +su - db2inst1 -c "db2 update dbm cfg using INSTANCE_MEMORY AUTOMATIC" + +# Create the FHIR database and give fhirserver access +# Note Update transaction log file size (logfilsiz) to avoid +# Note 32K pagesize is required + +# Create the database if it doesn't yet exist +echo "Creating FHIRDB..." +if [[ $(su - db2inst1 -c "db2 list db directory" | grep alias | grep FHIRDB | awk '{print $4}') == "FHIRDB" ]]; then + echo "FHIRDB exists - skipping create" +else + su - db2inst1 -c "db2 CREATE DB FHIRDB using codeset UTF-8 territory us PAGESIZE 32768" + # See https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.admin.config.doc/doc/r0000338.html + # Was: CATALOGCACHE_SZ 300 1.2M + # Now: CATALOGCACHE_SZ 3000 12M + su - db2inst1 -c "db2 update db cfg for fhirdb using CATALOGCACHE_SZ 3000" + # Added log size 4K x 50 = 200M and configured logprimary and logsecond which should be sufficient + su - db2inst1 -c "db2 update db cfg for fhirdb using logfilsiz 50000" + su - db2inst1 -c "db2 update db cfg for fhirdb using logprimary 3" + su - db2inst1 -c "db2 update db cfg for fhirdb using logsecond 10" +fi + +# To be properly idempotent, we always want to execute this, just in case it failed the first time +su - db2inst1 -c "db2 \"connect to fhirdb\" && db2 \"grant connect on database TO USER fhirserver\"" + +# EOF \ No newline at end of file diff --git a/build/reindex/db2/docker-compose.yml b/build/reindex/db2/docker-compose.yml new file mode 100644 index 00000000000..12c61f06858 --- /dev/null +++ b/build/reindex/db2/docker-compose.yml @@ -0,0 +1,61 @@ +version: '3.9' +services: + db: + image: test/fhir-db2 + hostname: db2 + privileged: true + tty: true + environment: + - LICENSE=accept + - DB2INST1_PASSWORD=change-password + ports: + - 50000:50000 + volumes: + - type: bind + source: ./workarea/volumes/dist/db + target: /database + read_only: false + healthcheck: + test: id db2inst1 && su - db2inst1 -c 'db2 list db directory && exit 0' || exit -1 + interval: 1m30s + timeout: 10s + retries: 3 + start_period: 120s + networks: + - fhir + fhir: + image: ibmcom/ibm-fhir-server:latest + depends_on: + db: + condition: service_healthy + hostname: fhir + volumes: + - type: bind + source: ./workarea/volumes/dist/config + target: /opt/ol/wlp/usr/servers/defaultServer/config + read_only: true + - type: bind + source: ./workarea/volumes/dist/overrides + target: /opt/ol/wlp/usr/servers/defaultServer/configDropins/overrides + read_only: true + - type: bind + source: ./workarea/volumes/dist/userlib/ + target: /opt/ol/wlp/usr/servers/defaultServer/userlib + read_only: true + - ./resources/startup.sh:/opt/ol/wlp/usr/servers/defaultServer/startup.sh + command: sh -c "chmod +x /opt/ol/wlp/usr/servers/defaultServer/startup.sh && /opt/ol/wlp/usr/servers/defaultServer/startup.sh" + healthcheck: + start_period: 120s + interval: 10s + timeout: 10s + retries: 2 + test: curl --max-time 5 -v -f -k -u 'fhiruser:change-password' 'https://localhost:9443/fhir-server/api/v4/$$healthcheck' + ports: + - 9443:9443 + env_file: + - ./.fhir.env + networks: + - fhir +networks: + fhir: + driver: bridge \ No newline at end of file diff --git a/build/reindex/db2/pre-integration-test.sh b/build/reindex/db2/pre-integration-test.sh new file mode 100644 index 00000000000..efc685e62ce --- /dev/null +++ b/build/reindex/db2/pre-integration-test.sh @@ -0,0 +1,173 @@ +#!/usr/bin/env bash + +############################################################################### +# (C) Copyright IBM Corp. 2021 +# +# SPDX-License-Identifier: Apache-2.0 +############################################################################### + +set -ex + +# pre_integration +pre_integration(){ + cleanup + setup_docker + config + bringup +} + +# setup_docker - setup docker +setup_docker(){ + docker build -t test/fhir-db2 . +} + +# config - update configuration +config(){ + DIST="${WORKSPACE}/build/reindex/db2/workarea/volumes/dist" + + echo "Create the db volume..." + mkdir -p ${DIST}/db + + # Setup the Configurations for Reindex + echo "Copying fhir configuration files..." + mkdir -p ${DIST}/config + cp -pr ${WORKSPACE}/fhir-server/liberty-config/config $DIST + cp -pr ${WORKSPACE}/fhir-server/liberty-config-tenants/config/* $DIST/config + + echo "Copying test artifacts to install location..." + USERLIB="${DIST}/userlib" + mkdir -p "${USERLIB}" + find ${WORKSPACE}/conformance -iname 'fhir-ig*.jar' -not -iname 'fhir*-tests.jar' -not -iname 'fhir*-test-*.jar' -exec cp -f {} ${USERLIB} \; + + echo "Copying over the overrides for the datasource" + mkdir -p ${DIST}/overrides + cp ${WORKSPACE}/fhir-server/liberty-config/configDropins/disabled/datasource-db2.xml ${DIST}/overrides + + # Move over the test configurations + echo "Copying over the fhir-server-config.json and updating publishing" + jq '.fhirServer.notifications.nats.enabled = false' ${DIST}/config/default/fhir-server-config-db2.json > ${DIST}/config/default/fhir-server-config-t.json + jq '.fhirServer.persistence.datasources.default.tenantKey = "change-password"' ${DIST}/config/default/fhir-server-config-t.json > ${DIST}/config/default/fhir-server-config.json + + if [ $(jq -r '.fhirServer.core.serverRegistryResourceProviderEnabled' ${DIST}/config/default/fhir-server-config.json) = 'true' ] + then + echo "serverRegistryResourceProviderEnabled is true" + else + echo "serverRegistryResourceProviderEnabled is false, tests cannot run" + exit 1; + fi +} + +# cleanup - cleanup existing docker +cleanup(){ + # Stand up a docker container running the fhir server configured for integration tests + echo "Bringing down any containers that might already be running as a precaution" + docker-compose kill + docker-compose rm -f +} + +# bringup +bringup(){ + echo "Bringing up containers >>> Current time: " $(date) + # Startup db + docker-compose up --remove-orphans -d db + cx=0 + while [ $(docker container inspect db2_db_1 | jq -r '.[] | select (.Config.Hostname == "db2").State.Status' | wc -l) -gt 0 ] && [ $(docker container inspect db2_db_1 | jq -r '.[] | select (.Config.Hostname == "db2").State.Running' | grep false | wc -l) -eq 1 ] + do + echo "Waiting on startup of db ${cx}" + cx=$((cx + 1)) + if [ ${cx} -ge 300 ] + then + echo "Failed to start" + fi + sleep 1 + done + + # Startup FHIR + docker-compose up --remove-orphans -d fhir + cx=0 + while [ $(docker container inspect db2_fhir_1 | jq -r '.[] | select (.Config.Hostname == "fhir").State.Status' | wc -l) -gt 0 ] && [ $(docker container inspect db2_fhir_1 | jq -r '.[] | select (.Config.Hostname == "fhir").State.Running' | grep false | wc -l) -eq 1 ] + do + echo "Waiting on startup of fhir ${cx}" + cx=$((cx + 1)) + if [ ${cx} -ge 300 ] + then + echo "Failed to start fhir" + fi + sleep 1 + done + + # Gather up all the server logs so we can trouble-shoot any problems during startup + pre_it_logs=${WORKSPACE}/pre-it-logs + rm -rf ${pre_it_logs} 2>/dev/null + mkdir -p ${pre_it_logs} + + zip_file=${WORKSPACE}/pre-it-logs.zip + rm -f ${zip_file} + + echo "" + echo "Docker container status:" + docker ps -a + + containerId=$(docker ps -a | grep db2_fhir_1 | cut -d ' ' -f 1) + if [[ -z "${containerId}" ]] + then + echo "Warning: Could not find the fhir container!!!" + else + echo "fhir container id: ${containerId}" + + # Grab the container's console log + docker logs ${containerId} > ${pre_it_logs}/docker-console.txt + + echo "Gathering pre-test server logs from docker container: ${containerId}" + docker cp -L ${containerId}:/logs ${pre_it_logs} + fi + + # Wait until the fhir server is up and running... + echo "Waiting for fhir-server to complete initialization..." + healthcheck_url='https://localhost:9443/fhir-server/api/v4/$healthcheck' + tries=0 + status=0 + while [ $status -ne 200 -a $tries -lt 30 ]; do + tries=$((tries + 1)) + + set +o errexit + cmd="curl -k -o ${WORKSPACE}/health.json --max-time 5 -I -w "%{http_code}" -u fhiruser:change-password $healthcheck_url" + echo "Executing[$tries]: $cmd" + status=$($cmd) + set -o errexit + + echo "Status code: $status" + if [ $status -ne 200 ] + then + echo "Sleeping 30 secs..." + sleep 30 + fi + done + + if [ $status -ne 200 ] + then + echo "Could not establish a connection to the fhir-server within $tries REST API invocations!" + exit 1 + fi + + echo "The fhir-server appears to be running..." +} + +# is_ready_to_run - is this ready to run? +is_ready_to_run(){ + echo "Preparing environment for fhir-server integration tests..." + if [ -z "${WORKSPACE}" ] + then + echo "ERROR: WORKSPACE environment variable not set!" + exit 1 + fi +} + +############################################################################### +is_ready_to_run + +cd build/reindex/db2 +pre_integration + +# EOF +############################################################################### diff --git a/build/reindex/db2/resources/startup.sh b/build/reindex/db2/resources/startup.sh new file mode 100755 index 00000000000..2170f335958 --- /dev/null +++ b/build/reindex/db2/resources/startup.sh @@ -0,0 +1,27 @@ + +############################################################################### +# (C) Copyright IBM Corp. 2021 +# +# SPDX-License-Identifier: Apache-2.0 +############################################################################### + +set -ex +set -o pipefail + +if [ ! -f /opt/ibm-fhir-server/tools/tenant.key ] +then + echo 'change-password' > /opt/ibm-fhir-server/tools/tenant.key + java -jar /opt/ibm-fhir-server/tools/fhir-persistence-schema-*-cli.jar \ + --db-type db2 --prop db.host=db2 --prop db.port=50000 --prop db.database=fhirdb --prop user=db2inst1 --prop password=change-password \ + --create-schemas + java -jar /opt/ibm-fhir-server/tools/fhir-persistence-schema-*-cli.jar \ + --db-type db2 --prop db.host=db2 --prop db.port=50000 --prop db.database=fhirdb --prop user=db2inst1 --prop password=change-password \ + --update-schema + java -jar /opt/ibm-fhir-server/tools/fhir-persistence-schema-*-cli.jar \ + --db-type db2 --prop db.host=db2 --prop db.port=50000 --prop db.database=fhirdb --prop user=db2inst1 --prop password=change-password \ + --allocate-tenant default --tenant-key-file /opt/ibm-fhir-server/tools/tenant.key --grant-to fhirserver +fi + +/opt/ol/wlp/bin/server run + +# EOF \ No newline at end of file diff --git a/build/reindex/derby/.fhir.env b/build/reindex/derby/.fhir.env new file mode 100644 index 00000000000..146d3a83ca8 --- /dev/null +++ b/build/reindex/derby/.fhir.env @@ -0,0 +1,3 @@ +# Environment values for FHIR +BOOTSTRAP_DB=true +FHIR_TRANSACTION_MANAGER_TIMEOUT=240s \ No newline at end of file diff --git a/build/reindex/derby/docker-compose.yml b/build/reindex/derby/docker-compose.yml new file mode 100644 index 00000000000..b4d5c4363ae --- /dev/null +++ b/build/reindex/derby/docker-compose.yml @@ -0,0 +1,25 @@ +version: '3.9' +services: + fhir: + image: ibmcom/ibm-fhir-server:latest + hostname: fhir + volumes: + - type: bind + source: ./workarea/volumes/dist/config + target: /opt/ol/wlp/usr/servers/defaultServer/config + read_only: true + - type: bind + source: ./workarea/volumes/dist/userlib/ + target: /opt/ol/wlp/usr/servers/defaultServer/userlib + read_only: true + command: bash -c "/opt/ol/wlp/bin/server run" + healthcheck: + start_period: 120s + interval: 10s + timeout: 10s + retries: 2 + test: curl --max-time 5 -v -f -k -u 'fhiruser:change-password' 'https://localhost:9443/fhir-server/api/v4/$$healthcheck' + ports: + - 9443:9443 + env_file: + - ./.fhir.env \ No newline at end of file diff --git a/build/reindex/derby/pre-integration-test.sh b/build/reindex/derby/pre-integration-test.sh new file mode 100644 index 00000000000..231d37e8e30 --- /dev/null +++ b/build/reindex/derby/pre-integration-test.sh @@ -0,0 +1,148 @@ +#!/usr/bin/env bash + +############################################################################### +# (C) Copyright IBM Corp. 2021 +# +# SPDX-License-Identifier: Apache-2.0 +############################################################################### + +set -ex + +# pre_integration +pre_integration() { + cleanup + config + bringup +} + +# config - update configuration +config() { + DIST="${WORKSPACE}/build/reindex/derby/workarea/volumes/dist" + echo "Create the db volume..." + mkdir -p "${DIST}/db" + + # Setup the Configurations for Reindex + echo "Copying fhir configuration files..." + mkdir -p "${DIST}/config" + cp -pr "${WORKSPACE}/fhir-server/liberty-config/config" "$DIST" + cp -pr ${WORKSPACE}/fhir-server/liberty-config-tenants/config/* "$DIST/config" + + echo "Copying test artifacts to install location..." + USERLIB="${DIST}/userlib" + mkdir -p "${USERLIB}" + find "${WORKSPACE}/conformance" -iname 'fhir-ig*.jar' -not -iname 'fhir*-tests.jar' -not -iname 'fhir*-test-*.jar' -exec cp -f {} "${USERLIB}" \; + + # Move over the test configurations + echo "Checking dynamic resource provider" + if [ "$(jq -r '.fhirServer.core.serverRegistryResourceProviderEnabled' ${DIST}/config/default/fhir-server-config.json)" = "true" ] + then + echo "serverRegistryResourceProviderEnabled is true" + else + echo "serverRegistryResourceProviderEnabled is false, tests cannot run" + exit 1; + fi + +} + +# cleanup - cleanup existing docker +cleanup() { + # Stand up a docker container running the fhir server configured for integration tests + echo "Bringing down any containers that might already be running as a precaution" + docker-compose kill + docker-compose rm -f +} + +# bringup +bringup() { + echo "Bringing up containers" + docker-compose up --remove-orphans -d + echo ">>> Current time: $(date)" + + # Startup FHIR + cx=0 + while [ $(docker container inspect derby_fhir_1 | jq -r '.[] | select (.Config.Hostname == "fhir").State.Status' | wc -l) -gt 0 ] && [ $(docker container inspect derby_fhir_1 | jq -r '.[] | select (.Config.Hostname == "fhir").State.Running' | grep false | wc -l) -eq 1 ] + do + echo "Waiting on startup of fhir ${cx}" + cx=$((cx + 1)) + if [ ${cx} -ge 300 ] + then + echo "Failed to start fhir" + fi + sleep 1 + done + + # Gather up all the server logs so we can trouble-shoot any problems during startup + pre_it_logs=${WORKSPACE}/pre-it-logs + zip_file=${WORKSPACE}/pre-it-logs.zip + rm -rf "${pre_it_logs}" 2>/dev/null + mkdir -p "${pre_it_logs}" + rm -f "${zip_file}" + + echo "Docker container status:" + docker ps -a + + containerId=$(docker ps -a | grep derby_fhir_1 | cut -d ' ' -f 1) + if [ -z "${containerId}" ] + then + echo "Warning: Could not find the fhir container!!!" + else + echo "fhir container id: ${containerId}" + + # Grab the container's console log + docker logs ${containerId} > ${pre_it_logs}/docker-console.txt + + echo "Gathering pre-test server logs from docker container: ${containerId}" + docker cp -L ${containerId}:/logs ${pre_it_logs} + fi + + # Wait until the fhir server is up and running... + echo "Waiting for fhir-server to complete initialization..." + healthcheck_url='https://localhost:9443/fhir-server/api/v4/$healthcheck' + tries=0 + status=0 + while [ $status -ne 200 ] && [ $tries -lt 30 ] + do + tries=$((tries + 1)) + + set +o errexit + cmd="curl -k -o ${WORKSPACE}/health.json --max-time 5 -I -w "%{http_code}" -u fhiruser:change-password $healthcheck_url" + echo "Executing[$tries]: $cmd" + status=$($cmd) + set -o errexit + + echo "Status code: $status" + if [ $status -ne 200 ] + then + echo "Sleeping 30 secs..." + sleep 30 + fi + done + + if [ $status -ne 200 ] + then + echo "Could not establish a connection to the fhir-server within $tries REST API invocations!" + exit 1 + fi + + echo "The fhir-server appears to be running..." + exit 0 +} + +# is_ready_to_run - is this ready to run? +is_ready_to_run() { + echo "Preparing environment for fhir-server integration tests..." + if [ -z "${WORKSPACE}" ] + then + echo "ERROR: WORKSPACE environment variable not set!" + exit 1 + fi +} + +############################################################################### +is_ready_to_run + +cd build/reindex/derby +pre_integration + +# EOF +############################################################################### diff --git a/build/reindex/postgres/.fhir.env b/build/reindex/postgres/.fhir.env new file mode 100644 index 00000000000..6612c66eb1e --- /dev/null +++ b/build/reindex/postgres/.fhir.env @@ -0,0 +1,3 @@ +# Environment values for FHIR +BOOTSTRAP_DB=false +FHIR_TRANSACTION_MANAGER_TIMEOUT=240s \ No newline at end of file diff --git a/build/reindex/postgres/Dockerfile b/build/reindex/postgres/Dockerfile new file mode 100644 index 00000000000..445c84109d5 --- /dev/null +++ b/build/reindex/postgres/Dockerfile @@ -0,0 +1,31 @@ +############################################################################### +# (C) Copyright IBM Corp. 2021 +# +# SPDX-License-Identifier: Apache-2.0 +############################################################################### + +FROM postgres:12.6-alpine + +# Hard Coded environment values +ENV POSTGRES_DB fhirdb +ENV POSTGRES_USER postgres +ENV PGDATA /db/data +ENV LANG en_US.utf8 + +# Create a working data directory +VOLUME /db +WORKDIR /db + +# Open up the port +EXPOSE 5432 + +# Load db resources +COPY --chown=postgres:postgres resources/db.sql /docker-entrypoint-initdb.d/db.sql +COPY --chown=postgres:postgres resources/docker-entrypoint.sh /docker-entrypoint.sh +RUN chmod 755 /docker-entrypoint.sh + +# Add the fhiradmin user +RUN addgroup -S fhir && adduser -S fhiradmin -G fhir +RUN echo "fhiradmin:change-password" | chpasswd + +ENTRYPOINT ["/docker-entrypoint.sh"] \ No newline at end of file diff --git a/build/reindex/postgres/docker-compose.yml b/build/reindex/postgres/docker-compose.yml new file mode 100644 index 00000000000..c88022621b7 --- /dev/null +++ b/build/reindex/postgres/docker-compose.yml @@ -0,0 +1,70 @@ +version: '3.9' +services: + db: + image: test/fhir-pg + shm_size: 256MB + tty: true + stdin_open: true + hostname: postgres_postgres_1 + volumes: + - type: bind + source: ./workarea/volumes/dist/db + target: /db + # Stop Grace Period - 30 seconds + stop_grace_period: 30s + sysctls: + net.core.somaxconn: 256 + net.ipv4.tcp_syncookies: 0 + # To use all of 2 gigabytes + kernel.shmmax: 1055092736 + kernel.shmall: 257591 + privileged: true + command: tail -f /dev/null + environment: + PG_TRUST_LOCALNET: 'true' + healthcheck: + start_period: 21s + test: ["CMD-SHELL", "pg_isready -d fhirdb -U fhiradmin"] + interval: 10s + timeout: 5s + retries: 3 + networks: + - fhir + ports: + - 5432:5432 + fhir: + image: ibmcom/ibm-fhir-server:latest + hostname: fhir + volumes: + - type: bind + source: ./workarea/volumes/dist/config + target: /opt/ol/wlp/usr/servers/defaultServer/config + read_only: true + - type: bind + source: ./workarea/volumes/dist/overrides + target: /opt/ol/wlp/usr/servers/defaultServer/configDropins/overrides + read_only: true + - type: bind + source: ./workarea/volumes/dist/userlib/ + target: /opt/ol/wlp/usr/servers/defaultServer/userlib + read_only: true + command: bash -c " + java -jar /opt/ibm-fhir-server/tools/fhir-persistence-schema-*-cli.jar --db-type postgresql --prop db.host=postgres_postgres_1 --prop db.port=5432 --prop db.database=fhirdb --prop user=fhiradmin --prop password=change-password --update-schema --grant-to fhirserver && + /opt/ol/wlp/bin/server run" + healthcheck: + start_period: 32s + interval: 30s + timeout: 5s + retries: 3 + test: curl -k -u 'fhiruser:change-password' 'https://localhost:9443/fhir-server/api/v4/$$healthcheck' + ports: + - 9080:9080 + - 9443:9443 + depends_on: + db: + condition: service_healthy + networks: + - fhir +networks: + fhir: + driver: bridge \ No newline at end of file diff --git a/build/reindex/postgres/pre-integration-test.sh b/build/reindex/postgres/pre-integration-test.sh new file mode 100644 index 00000000000..2822a700fb9 --- /dev/null +++ b/build/reindex/postgres/pre-integration-test.sh @@ -0,0 +1,175 @@ +#!/usr/bin/env bash + +############################################################################### +# (C) Copyright IBM Corp. 2021 +# +# SPDX-License-Identifier: Apache-2.0 +############################################################################### + +set -ex + +DIST="${WORKSPACE}/build/reindex/postgres/workarea/volumes/dist" + +# pre_integration +pre_integration(){ + cleanup + setup_docker + config + bringup +} + +# setup_docker - setup docker +setup_docker(){ + docker build -t test/fhir-pg . +} + +# config - update configuration +config(){ + DIST="${WORKSPACE}/build/reindex/postgres/workarea/volumes/dist" + + echo "Create the db volume..." + mkdir -p ${DIST}/db + + # Setup the Configurations for Reindex + echo "Copying fhir configuration files..." + mkdir -p ${DIST}/config + cp -pr ${WORKSPACE}/fhir-server/liberty-config/config $DIST + cp -pr ${WORKSPACE}/fhir-server/liberty-config-tenants/config/* $DIST/config + + echo "Copying test artifacts to install location..." + USERLIB="${DIST}/userlib" + mkdir -p "${USERLIB}" + find ${WORKSPACE}/conformance -iname 'fhir-ig*.jar' -not -iname 'fhir*-tests.jar' -not -iname 'fhir*-test-*.jar' -exec cp -f {} ${USERLIB} \; + + echo "Copying over the overrides for the datasource" + mkdir -p ${DIST}/overrides + cp ${WORKSPACE}/fhir-server/liberty-config/configDropins/disabled/datasource-postgresql.xml ${DIST}/overrides + + # Move over the test configurations + echo "Copying over the fhir-server-config.json and updating" + mv ${DIST}/config/default/fhir-server-config-postgresql.json \ + ${DIST}/config/default/fhir-server-config.json + + if [ $(jq -r '.fhirServer.core.serverRegistryResourceProviderEnabled' ${DIST}/config/default/fhir-server-config.json) = 'true' ] + then + echo "serverRegistryResourceProviderEnabled is true" + else + echo "serverRegistryResourceProviderEnabled is false, tests cannot run" + exit 1; + fi +} + +# cleanup - cleanup existing docker +cleanup(){ + # Stand up a docker container running the fhir server configured for integration tests + echo "Bringing down any containers that might already be running as a precaution" + docker-compose kill + docker-compose rm -f +} + +# bringup +bringup(){ + echo "Bringing up containers >>> Current time: " $(date) + # Startup db + docker-compose up --remove-orphans -d db + cx=0 + while [ $(docker container inspect postgres_db_1 | jq -r '.[] | select (.Config.Hostname == "postgres_postgres_1").State.Status' | wc -l) -gt 0 ] && [ $(docker container inspect postgres_db_1 | jq -r '.[] | select (.Config.Hostname == "postgres_postgres_1").State.Running' | grep false | wc -l) -eq 1 ] + do + echo "Waiting on startup of db ${cx}" + cx=$((cx + 1)) + if [ ${cx} -ge 300 ] + then + echo "Failed to start" + fi + sleep 1 + done + + # Startup FHIR + docker-compose up --remove-orphans -d fhir + cx=0 + while [ $(docker container inspect postgres_fhir_1 | jq -r '.[] | select (.Config.Hostname == "fhir").State.Status' | wc -l) -gt 0 ] && [ $(docker container inspect postgres_fhir_1 | jq -r '.[] | select (.Config.Hostname == "fhir").State.Running' | grep false | wc -l) -eq 1 ] + do + echo "Waiting on startup of fhir ${cx}" + cx=$((cx + 1)) + if [ ${cx} -ge 300 ] + then + echo "Failed to start fhir" + fi + sleep 1 + done + + # Gather up all the server logs so we can trouble-shoot any problems during startup + cd - + pre_it_logs=${WORKSPACE}/pre-it-logs + zip_file=${WORKSPACE}/pre-it-logs.zip + rm -rf "${pre_it_logs}" 2>/dev/null + mkdir -p "${pre_it_logs}" + rm -f "${zip_file}" + + echo " + Docker container status:" + docker ps -a + + containerId=$(docker ps -a | grep postgres_fhir-server_1 | cut -d ' ' -f 1) + if [[ -z "${containerId}" ]] + then + echo "Warning: Could not find the fhir container!!!" + else + echo "fhir container id: ${containerId}" + + # Grab the container's console log + docker logs ${containerId} > ${pre_it_logs}/docker-console.txt + + echo "Gathering pre-test server logs from docker container: ${containerId}" + docker cp -L ${containerId}:/logs ${pre_it_logs} + fi + + # Wait until the fhir server is up and running... + echo "Waiting for fhir-server to complete initialization..." + healthcheck_url='https://localhost:9443/fhir-server/api/v4/$healthcheck' + tries=0 + status=0 + while [ $status -ne 200 -a $tries -lt 30 ]; do + tries=$((tries + 1)) + + set +o errexit + cmd="curl -k -o ${WORKSPACE}/health.json --max-time 5 -I -w "%{http_code}" -u fhiruser:change-password $healthcheck_url" + echo "Executing[$tries]: $cmd" + status=$($cmd) + set -o errexit + + echo "Status code: $status" + if [ $status -ne 200 ] + then + echo "Sleeping 30 secs..." + sleep 30 + fi + done + + if [ $status -ne 200 ] + then + echo "Could not establish a connection to the fhir-server within $tries REST API invocations!" + exit 1 + fi + + echo "The fhir-server appears to be running..." +} + +# is_ready_to_run - is this ready to run? +is_ready_to_run(){ + echo "Preparing environment for fhir-server integration tests..." + if [ -z "${WORKSPACE}" ] + then + echo "ERROR: WORKSPACE environment variable not set!" + exit 1 + fi +} + +############################################################################### +is_ready_to_run + +cd build/reindex/postgres +pre_integration + +# EOF +############################################################################### diff --git a/build/reindex/postgres/resources/db.sql b/build/reindex/postgres/resources/db.sql new file mode 100644 index 00000000000..ec0c39a3114 --- /dev/null +++ b/build/reindex/postgres/resources/db.sql @@ -0,0 +1,36 @@ +-- ############################################################################## +-- (C) Copyright IBM Corp. 2021 +-- +-- SPDX-License-Identifier: Apache-2.0 +-- ############################################################################### + +-- Create the users +CREATE USER fhirbatch WITH LOGIN encrypted password 'change-password'; +CREATE USER fhirserver WITH LOGIN encrypted password 'change-password'; + +GRANT CONNECT ON DATABASE fhirdb TO fhirserver; +GRANT CONNECT ON DATABASE fhirdb TO fhirbatch; + +CREATE SCHEMA IF NOT EXISTS fhirdata; +CREATE SCHEMA IF NOT EXISTS fhir_admin; +CREATE SCHEMA IF NOT EXISTS fhir_oauth; +CREATE SCHEMA IF NOT EXISTS fhir_jbatch; + +-- only for the fhiradmin user +GRANT ALL ON schema fhirdata TO fhiradmin WITH GRANT OPTION; +GRANT ALL ON schema fhir_admin TO fhiradmin WITH GRANT OPTION; +GRANT ALL ON schema fhir_oauth TO fhiradmin WITH GRANT OPTION; +GRANT ALL ON schema fhir_jbatch TO fhiradmin WITH GRANT OPTION; + +GRANT USAGE ON SCHEMA fhirdata to fhiradmin; +GRANT USAGE ON SCHEMA fhir_oauth to fhiradmin; +GRANT USAGE ON SCHEMA fhir_jbatch to fhiradmin; + +GRANT USAGE ON SCHEMA fhirdata to fhirserver; +GRANT USAGE ON SCHEMA fhir_oauth to fhirserver; +GRANT USAGE ON SCHEMA fhir_jbatch to fhirserver; + +GRANT USAGE ON SCHEMA fhirdata to fhirbatch; +GRANT USAGE ON SCHEMA fhir_oauth to fhirbatch; +GRANT USAGE ON SCHEMA fhir_jbatch to fhirbatch; +-- EOF diff --git a/build/reindex/postgres/resources/docker-entrypoint.sh b/build/reindex/postgres/resources/docker-entrypoint.sh new file mode 100644 index 00000000000..73e0af642a2 --- /dev/null +++ b/build/reindex/postgres/resources/docker-entrypoint.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash + +############################################################################### +# (C) Copyright IBM Corp. 2021 +# +# SPDX-License-Identifier: Apache-2.0 +############################################################################### + +set -o errexit +set -o nounset +set -o pipefail + +if [ ! -f /db/data/pg_hba.conf ] +then + mkdir -p /db/data + chown -R postgres:postgres /db/data + su - postgres -c "/usr/local/bin/initdb -D /db/data" + + # Let it listen on all ports + sed -ri "s!^#?(listen_addresses)\s*=\s*\S+.*!\1 = '*'!" /db/data/postgresql.conf + + # Configuration + sed -i -e "s/^max_connections = .*$/max_connections = 100/" \ + -e "s/^#max_prepared_transactions = .*$/max_prepared_transactions = 100/" \ + -e "s/^#max_locks_per_transaction = .*$/max_locks_per_transaction = 128/" \ + -e "s/^shared_buffers =.*$/shared_buffers = 4GB/" \ + -e "s/^#effective_cache_size = 128MB.*$/effective_cache_size = 2GB/" \ + -e "s/^#work_mem = 1MB.*$/work_mem = 1MB/" \ + -e "s/^#maintenance_work_mem = 16MB.*$/maintenance_work_mem = 512MB/" \ + -e "s/^#checkpoint_segments = .*$/checkpoint_segments = 32/" \ + -e "s/^#checkpoint_completion_target = 0.5.*$/checkpoint_completion_target = 0.7/" \ + -e "s/^#wal_buffers =.*$/wal_buffers = 16MB/" \ + -e "s/^#default_statistics_target = 100.*$/default_statistics_target = 100/" /db/data/postgresql.conf + + cat << EOF >> /db/data/pg_hba.conf + +host all all 0.0.0.0/0 md5 +EOF + + su - postgres -c '/usr/local/bin/pg_ctl -D "/db/data" --wait --timeout=120 start' + # Create the FHIRADMIN user + su - postgres -c "/usr/local/bin/psql -c \"CREATE USER fhiradmin WITH LOGIN encrypted password 'change-password';\"" + # Create the Database + su - postgres -c "/usr/local/bin/psql -c \"CREATE DATABASE fhirdb OWNER 'fhiradmin';\"" + su - postgres -c '/usr/local/bin/psql --dbname=fhirdb -v ON_ERROR_STOP=1 < /docker-entrypoint-initdb.d/db.sql' +else + su - postgres -c '/usr/local/bin/pg_ctl -D "/db/data" --wait --timeout=120 start' +fi + +exec "$@" +# EOF diff --git a/build/release/bin/00_prep/0_install_packages.sh b/build/release/bin/00_prep/0_install_packages.sh index d10e029babd..43a7a67e35b 100644 --- a/build/release/bin/00_prep/0_install_packages.sh +++ b/build/release/bin/00_prep/0_install_packages.sh @@ -11,4 +11,6 @@ # gh (already installed in ubuntu 20.04) # docker tools (already installed in ubuntu 20.04) -# EOF \ No newline at end of file +sudo apt-get install -f libxml-xpath-perl + +# EOF diff --git a/build/release/bin/10_build/2_version.sh b/build/release/bin/10_build/2_version.sh index 107a6667765..0857b5a7ae6 100644 --- a/build/release/bin/10_build/2_version.sh +++ b/build/release/bin/10_build/2_version.sh @@ -19,8 +19,13 @@ mvn versions:set -f "fhir-examples" -DoldVersion="*" -DnewVersion="${BUILD_VERS mvn versions:set -f "fhir-tools" -DoldVersion="*" -DnewVersion="${BUILD_VERSION}" mvn versions:set -f "fhir-parent" -DoldVersion="*" -DnewVersion="${BUILD_VERSION}" -# Reconcile the versions. -mvn org.codehaus.mojo:versions-maven-plugin:2.7:set-property -Dproperty=fhir-examples.version -DnewVersion="${BUILD_VERSION}" -f fhir-parent +# Reconcile the versions. +FHIR_PARENT_VERSION=$(cat fhir-parent/pom.xml | xpath -q -e project/properties/fhir-examples.version/text\(\)) +FHIR_EXAMPLES_VERSION=$(cat fhir-examples/pom.xml | xpath -q -e project/version/text\(\)) +if [[ "${FHIR_PARENT_VERSION}" == "${FHIR_EXAMPLES_VERSION}" ]] +then + mvn org.codehaus.mojo:versions-maven-plugin:2.7:set-property -Dproperty=fhir-examples.version -DnewVersion="${BUILD_VERSION}" -f fhir-parent +fi mvn org.codehaus.mojo:versions-maven-plugin:2.7:set-property -Dproperty=fhir-tools.version -DnewVersion="${BUILD_VERSION}" -f fhir-parent # EOF \ No newline at end of file diff --git a/build/release/bin/30_release/0_sonatype.sh b/build/release/bin/30_release/0_sonatype.sh index 76c183e7b0f..65733e00ee3 100644 --- a/build/release/bin/30_release/0_sonatype.sh +++ b/build/release/bin/30_release/0_sonatype.sh @@ -18,11 +18,19 @@ set -eu -o pipefail # with gpg:sign # fhir-examples -export BUILD_PROFILES=" $(jq -r '.build[] | select(.type == "fhir-examples").profiles | map(.) | join(",")' build/release/config/release.json)" -export BUILD_PROFILES="${BUILD_PROFILES},deploy-to-sonatype" -mvn -T2C source:jar source:test-jar javadoc:jar gpg:sign deploy \ - -DadditionalJOption=-Xdoclint:none \ - -f fhir-examples -P "${BUILD_PROFILES}" -DskipTests +# Reconcile the versions. +FHIR_PARENT_VERSION=$(cat fhir-parent/pom.xml | xpath -q -e project/properties/fhir-examples.version/text\(\)) +FHIR_EXAMPLES_VERSION=$(cat fhir-examples/pom.xml | xpath -q -e project/version/text\(\)) +if [[ "${FHIR_PARENT_VERSION}" == "${FHIR_EXAMPLES_VERSION}" ]] +then + export BUILD_PROFILES=" $(jq -r '.build[] | select(.type == "fhir-examples").profiles | map(.) | join(",")' build/release/config/release.json)" + export BUILD_PROFILES="${BUILD_PROFILES},deploy-to-sonatype" + mvn -T2C source:jar source:test-jar javadoc:jar gpg:sign deploy \ + -DadditionalJOption=-Xdoclint:none \ + -f fhir-examples -P "${BUILD_PROFILES}" -DskipTests +else + echo "Skipping" +fi # fhir-parent # we hit 'gpg: signing failed: Cannot allocate memory' when running -T2C diff --git a/build/release/bin/30_release/1_dockerhub.sh b/build/release/bin/30_release/1_dockerhub.sh index 0f27e5206ae..1ce7a083b21 100644 --- a/build/release/bin/30_release/1_dockerhub.sh +++ b/build/release/bin/30_release/1_dockerhub.sh @@ -14,9 +14,17 @@ docker login -u "${DOCKERHUB_USERNAME}" -p "${DOCKERHUB_TOKEN}" export WORKSPACE=$(pwd) bash ${WORKSPACE}/fhir-install/src/main/docker/ibm-fhir-schematool/build.sh -mvn dockerfile:build -f fhir-install +# create and remove a 1 GB file to make sure we have the room needed later +df -h +dd if=/dev/urandom oflag=direct of=balloon.dat bs=1024k count=1000 +rm -f balloon.dat +sudo apt clean +docker system prune -f +df -h + +mvn -B dockerfile:build -f fhir-install --no-transfer-progress -Dmaven.wagon.http.retryHandler.count=3 mvn dockerfile:tag@tag-version -f fhir-install mvn dockerfile:push@push-version -f fhir-install mvn dockerfile:push@push-latest -f fhir-install -# EOF \ No newline at end of file +# EOF diff --git a/build/release/bin/30_release/2_https.sh b/build/release/bin/30_release/2_https.sh index 712aae291dd..2571b98dd93 100644 --- a/build/release/bin/30_release/2_https.sh +++ b/build/release/bin/30_release/2_https.sh @@ -118,11 +118,6 @@ function deploy_via_curl { # deploy_zip_files - uploads the release specific zip files. # --- don't add files that could be greater than 300M function deploy_zip_files { - FILE=fhir-cli/target/fhir-cli.zip - MODULE=fhir-cli - FILE_TARGET_PATH="/com/ibm/fhir/${MODULE}/${BUILD_VERSION}/fhir-cli.zip" - upload_to_https "${MODULE}" "${FILE}" "${FILE_TARGET_PATH}" - FILE=fhir-validation/target/fhir-validation-distribution.zip MODULE=fhir-validation FILE_TARGET_PATH="/com/ibm/fhir/${MODULE}/${BUILD_VERSION}/fhir-validation-distribution.zip" diff --git a/conformance/fhir-ig-carin-bb/CHANGELOG.md b/conformance/fhir-ig-carin-bb/CHANGELOG.md index 05083238a82..673a64cefa9 100644 --- a/conformance/fhir-ig-carin-bb/CHANGELOG.md +++ b/conformance/fhir-ig-carin-bb/CHANGELOG.md @@ -1,4 +1,25 @@ 30 NOV 2020 - Initial Load - remove invalid
tags from between
  • tags in CapabilityStatement-c4bb.json - move invalid tag into subsequent

    tag in CapabilityStatement-c4bb.json - - removed invalid ImplementationGuide parameters `copyrightyear`, `releaselabel`, and more \ No newline at end of file + - removed invalid ImplementationGuide parameters `copyrightyear`, `releaselabel`, and more + +02 JUN 2021 - service-date fixup +- backport CARIN BB 1.1.0 service-date fix to our packaged 1.0.1 version #2456 + - changed the FHIRPath expression from + "ExplanationOfBenefit.billablePeriod | ExplanationOfBenefit.item.serviced as Date | ExplanationOfBenefit.item.serviced as Period" to + "ExplanationOfBenefit.billablePeriod | ExplanationOfBenefit.item.serviced" + - see https://jira.hl7.org/browse/FHIR-30443 for more detail + + 03 JUN 2021 - updated `adjudication-has-amount-type-slice` constraints per: [https://jira.hl7.org/browse/FHIR-32337](https://jira.hl7.org/browse/FHIR-32337) + +```json +{ + "key": "adjudication-has-amount-type-slice", + "severity": "error", + "human": "If Adjudication is present, it must have at least one adjudicationamounttype slice", + "expression": "adjudication.exists() implies (adjudication.where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional" +} +``` + +Changed the constraint location from: `ExplanationOfBenefit.item` and `ExplanationOfBenefit.item.adjudication` to `ExplanationOfBenefit` and `ExplanationOfBenefit.item` respectively in the `snapshot` and `differential` for the inpatient and outpatient Institutional EOBs. diff --git a/conformance/fhir-ig-carin-bb/pom.xml b/conformance/fhir-ig-carin-bb/pom.xml index 4140f7af953..eca9a059328 100644 --- a/conformance/fhir-ig-carin-bb/pom.xml +++ b/conformance/fhir-ig-carin-bb/pom.xml @@ -5,7 +5,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../../fhir-parent fhir-ig-carin-bb diff --git a/conformance/fhir-ig-carin-bb/src/main/resources/hl7/fhir/us/carin-bb/package/SearchParameter-explanationofbenefit-service-date.json b/conformance/fhir-ig-carin-bb/src/main/resources/hl7/fhir/us/carin-bb/package/SearchParameter-explanationofbenefit-service-date.json index ded4126c4ef..b88ec8f38d7 100644 --- a/conformance/fhir-ig-carin-bb/src/main/resources/hl7/fhir/us/carin-bb/package/SearchParameter-explanationofbenefit-service-date.json +++ b/conformance/fhir-ig-carin-bb/src/main/resources/hl7/fhir/us/carin-bb/package/SearchParameter-explanationofbenefit-service-date.json @@ -1 +1 @@ -{"resourceType":"SearchParameter","id":"explanationofbenefit-service-date","meta":{"versionId":"1","lastUpdated":"2020-03-31T06:41:13.000+00:00"},"text":{"status":"extensions","div":"

    Generated Narrative

    Standards Status: trial-use

    url: http://hl7.org/fhir/us/carin-bb/SearchParameter/explanationofbenefit-service-date

    version: 1.0.0

    name: ExplanationOfBenefit_ServiceDate

    status: active

    experimental: false

    date: Mar 31, 2020, 9:48:45 AM

    publisher: HL7 Financial Management Working Group

    contact: HL7 Financial Management Working Group: http://www.hl7.org/Special/committees/fm/index.cfm,fm@lists.HL7.org

    description: Date of the service for the EOB. The service-date search parameter simplifies search, since a client doesn't need to know that for inpatient and outpatient institutional EOB dates they need to search by billablePeriod.period.start, for a pharmacy EOB by item.servicedDate, and for a professional and non-clinician EOB - by item.servicedPeriod.period.start.

    jurisdiction: United States of America

    code: service-date

    base: ExplanationOfBenefit

    type: date

    expression: ExplanationOfBenefit.billablePeriod | ExplanationOfBenefit.item.serviced as Date | ExplanationOfBenefit.item.serviced as Period

    xpath: f:ExplanationOfBenefit/f:billablePeriod | f:ExplanationOfBenefit/f:item/f:serviced/f:servicedDate | f:ExplanationOfBenefit/f:item/f:serviced/f:servicedPeriod

    xpathUsage: normal

    comparator: eq, ne, gt, ge, lt, le, sa, eb, ap

    "},"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status","valueCode":"trial-use"}],"url":"http://hl7.org/fhir/us/carin-bb/SearchParameter/explanationofbenefit-service-date","version":"1.0.0","name":"ExplanationOfBenefit_ServiceDate","status":"active","experimental":false,"date":"2020-03-31T09:48:45+00:00","publisher":"HL7 Financial Management Working Group","contact":[{"name":"HL7 Financial Management Working Group","telecom":[{"system":"url","value":"http://www.hl7.org/Special/committees/fm/index.cfm"},{"system":"email","value":"fm@lists.HL7.org"}]}],"description":"Date of the service for the EOB. The service-date search parameter simplifies search, since a client doesn't need to know that for inpatient and outpatient institutional EOB dates they need to search by billablePeriod.period.start, for a pharmacy EOB by item.servicedDate, and for a professional and non-clinician EOB - by item.servicedPeriod.period.start.","jurisdiction":[{"coding":[{"system":"urn:iso:std:iso:3166","code":"US"}]}],"code":"service-date","base":["ExplanationOfBenefit"],"type":"date","expression":"ExplanationOfBenefit.billablePeriod | ExplanationOfBenefit.item.serviced as Date | ExplanationOfBenefit.item.serviced as Period","xpath":"f:ExplanationOfBenefit/f:billablePeriod | f:ExplanationOfBenefit/f:item/f:serviced/f:servicedDate | f:ExplanationOfBenefit/f:item/f:serviced/f:servicedPeriod","xpathUsage":"normal","comparator":["eq","ne","gt","ge","lt","le","sa","eb","ap"]} \ No newline at end of file +{"resourceType":"SearchParameter","id":"explanationofbenefit-service-date","meta":{"versionId":"1","lastUpdated":"2020-03-31T06:41:13.000+00:00"},"text":{"status":"extensions","div":"

    Generated Narrative

    Standards Status: trial-use

    url: http://hl7.org/fhir/us/carin-bb/SearchParameter/explanationofbenefit-service-date

    version: 1.0.0

    name: ExplanationOfBenefit_ServiceDate

    status: active

    experimental: false

    date: Mar 31, 2020, 9:48:45 AM

    publisher: HL7 Financial Management Working Group

    contact: HL7 Financial Management Working Group: http://www.hl7.org/Special/committees/fm/index.cfm,fm@lists.HL7.org

    description: Date of the service for the EOB. The service-date search parameter simplifies search, since a client doesn't need to know that for inpatient and outpatient institutional EOB dates they need to search by billablePeriod.period.start, for a pharmacy EOB by item.servicedDate, and for a professional and non-clinician EOB - by item.servicedPeriod.period.start.

    jurisdiction: United States of America

    code: service-date

    base: ExplanationOfBenefit

    type: date

    expression: ExplanationOfBenefit.billablePeriod | ExplanationOfBenefit.item.serviced

    xpath: f:ExplanationOfBenefit/f:billablePeriod | f:ExplanationOfBenefit/f:item/f:serviced/f:servicedDate | f:ExplanationOfBenefit/f:item/f:serviced/f:servicedPeriod

    xpathUsage: normal

    comparator: eq, ne, gt, ge, lt, le, sa, eb, ap

    "},"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status","valueCode":"trial-use"}],"url":"http://hl7.org/fhir/us/carin-bb/SearchParameter/explanationofbenefit-service-date","version":"1.0.0","name":"ExplanationOfBenefit_ServiceDate","status":"active","experimental":false,"date":"2020-03-31T09:48:45+00:00","publisher":"HL7 Financial Management Working Group","contact":[{"name":"HL7 Financial Management Working Group","telecom":[{"system":"url","value":"http://www.hl7.org/Special/committees/fm/index.cfm"},{"system":"email","value":"fm@lists.HL7.org"}]}],"description":"Date of the service for the EOB. The service-date search parameter simplifies search, since a client doesn't need to know that for inpatient and outpatient institutional EOB dates they need to search by billablePeriod.period.start, for a pharmacy EOB by item.servicedDate, and for a professional and non-clinician EOB - by item.servicedPeriod.period.start.","jurisdiction":[{"coding":[{"system":"urn:iso:std:iso:3166","code":"US"}]}],"code":"service-date","base":["ExplanationOfBenefit"],"type":"date","expression":"ExplanationOfBenefit.billablePeriod | ExplanationOfBenefit.item.serviced","xpath":"f:ExplanationOfBenefit/f:billablePeriod | f:ExplanationOfBenefit/f:item/f:serviced/f:servicedDate | f:ExplanationOfBenefit/f:item/f:serviced/f:servicedPeriod","xpathUsage":"normal","comparator":["eq","ne","gt","ge","lt","le","sa","eb","ap"]} \ No newline at end of file diff --git a/conformance/fhir-ig-carin-bb/src/main/resources/hl7/fhir/us/carin-bb/package/StructureDefinition-C4BB-ExplanationOfBenefit-Inpatient-Institutional.json b/conformance/fhir-ig-carin-bb/src/main/resources/hl7/fhir/us/carin-bb/package/StructureDefinition-C4BB-ExplanationOfBenefit-Inpatient-Institutional.json index 802fdc834af..e102a4692ad 100644 --- a/conformance/fhir-ig-carin-bb/src/main/resources/hl7/fhir/us/carin-bb/package/StructureDefinition-C4BB-ExplanationOfBenefit-Inpatient-Institutional.json +++ b/conformance/fhir-ig-carin-bb/src/main/resources/hl7/fhir/us/carin-bb/package/StructureDefinition-C4BB-ExplanationOfBenefit-Inpatient-Institutional.json @@ -1 +1,17800 @@ -{"resourceType":"StructureDefinition","id":"C4BB-ExplanationOfBenefit-Inpatient-Institutional","text":{"status":"extensions","div":"
    \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
    NameFlagsCard.TypeDescription & Constraints\"doco\"
    \".\"\".\" ExplanationOfBenefit I0..*C4BBExplanationOfBenefitExplanation of Benefit resource
    EOB-institutional-item-or-header-adjudication: Institutional EOB: Should have adjudication at the item or header level, but not both
    \".\"\".\"\".\" type 1..1CodeableConceptCategory or discipline
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://terminology.hl7.org/CodeSystem/claim-type
    \".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: institutional
    \".\"\".\"\".\" billablePeriod 1..1PeriodRelevant time frame for the claim
    \".\"\".\"\".\"\".\" start S0..1dateTimeStarting time with inclusive boundary
    \".\"\".\"\".\"\".\" end S0..1dateTimeEnd time with inclusive boundary, if not ongoing
    \".\"\".\"\".\" created S1..1dateTimeResponse creation date
    \".\"\".\"\".\" provider 1..1Reference(C4BB Organization)Party responsible for the claim
    \".\"\".\"\".\" careTeam I0..*BackboneElementCare Team members
    EOB-inst-careTeam-practitioner: Institutional EOB: Careteam roles refer to a practitioner
    EOB-inst-careTeam-organization: Institutional EOB: Careteam roles refer to an organization
    \".\"\".\"\".\"\".\" role 1..1CodeableConceptFunction within the team
    Binding: C4BB Claim Institutional Care Team Role (required)
    \".\"\".\"\".\" supportingInfo 1..*(Slice Definition)Supporting information
    Slice: Unordered, Open by pattern:category
    \".\"\".\"\".\"\".\" supportingInfo:billingnetworkcontractingstatus S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: billingnetworkcontractingstatus
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: C4BB Payer Provider Contracting Status (required)
    \".\"\".\"\".\"\".\" supportingInfo:admissionperiod S1..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: admissionperiod
    \".\"\".\"\".\"\".\"\".\" timing[x] 1..1(Slice Definition)When it occurred
    Slice: Unordered, Open by type:$this
    \".\"\".\"\".\"\".\"\".\" timingPeriod S1..1PeriodWhen it occurred
    \".\"\".\"\".\"\".\" supportingInfo:clmrecvddate S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: clmrecvddate
    \".\"\".\"\".\"\".\"\".\" timing[x] S1..1dateWhen it occurred
    \".\"\".\"\".\"\".\" supportingInfo:typeofbill S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: typeofbill
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Type of Bill Codes (required)
    \".\"\".\"\".\"\".\" supportingInfo:pointoforigin S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: pointoforigin
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Point Of Origin (required)
    \".\"\".\"\".\"\".\" supportingInfo:admtype S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: admtype
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Priority (Type) of Admission or Visit (required)
    \".\"\".\"\".\"\".\" supportingInfo:discharge-status S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: discharge-status
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Patient Discharge Status Codes (required)
    \".\"\".\"\".\"\".\" supportingInfo:drg S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: drg
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: MS-DRGs - AP-DRGs - APR-DRGs (required)
    \".\"\".\"\".\" diagnosis S1..*BackboneElementPertinent diagnosis information
    \".\"\".\"\".\"\".\" sequence 1..1positiveIntDiagnosis instance identifier
    \".\"\".\"\".\"\".\" diagnosis[x] S1..1CodeableConceptNature of illness or problem
    Binding: Diagnosis Codes - International Classification of Diseases, Clinical Modification (ICD-9-CM, ICD-10-CM) (required)
    \".\"\".\"\".\"\".\" type S1..1CodeableConceptTiming or nature of the diagnosis
    Binding: C4BB Claim Inpatient Institutional Diagnosis Type (required)
    \".\"\".\"\".\"\".\" onAdmission S0..1CodeableConceptPresent on admission
    Binding: NUBC Present On Admission Indicator Codes (required)
    \".\"\".\"\".\" procedure S0..*BackboneElementClinical procedures performed
    \".\"\".\"\".\"\".\" sequence 1..1positiveIntProcedure instance identifier
    \".\"\".\"\".\"\".\" type S1..1CodeableConceptCategory of Procedure
    Binding: C4BB Claim Procedure Type (required)
    \".\"\".\"\".\"\".\" date S0..1dateTimeWhen the procedure was performed
    \".\"\".\"\".\"\".\" procedure[x] S1..1CodeableConceptSpecific clinical procedure
    Binding: Procedure Codes - International Classification of Diseases, Ninth Revision, Clinical Modification (ICD-9-CM) - ICD-10 Procedure Coding System (required)
    \".\"\".\"\".\" insurance 1..1BackboneElementPatient insurance information
    \".\"\".\"\".\" item
    \".\"\".\"\".\"\".\" revenue S1..1CodeableConceptRevenue or cost center code
    Binding: NUBC Revenue Codes (required)
    \".\"\".\"\".\"\".\" productOrService S1..1CodeableConceptBilling, service, product, or drug code
    Binding: Current Procedural Terminology (CPT) - Healthcare Common Procedure Coding System (HCPCS) level II alphanumeric codes - Procedure Codes (required)
    \".\"\".\"\".\"\".\" modifier S0..*CodeableConceptProduct or service billing modifiers
    Binding: Current Procedural Terminology (CPT) - Healthcare Common Procedure Coding System (HCPCS) level II alphanumeric codes - Procedure Modifier Codes (required)
    \".\"\".\"\".\"\".\" quantity S0..1SimpleQuantityCount of products or services
    \".\"\".\"\".\"\".\" adjudication SI0..*(Slice Definition)Adjudication details
    Slice: Unordered, Closed by pattern:category
    adjudication-has-amount-type-slice: If Adjudication is present, it must have at least one adjudicationamounttype slice
    \".\"\".\"\".\"\".\"\".\" adjudication:All Slices Content/Rules for all slices
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication Category Discriminator (required)
    \".\"\".\"\".\"\".\"\".\" adjudication:adjudicationamounttype S0..*BackboneElementAdjudication details
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication (required)
    \".\"\".\"\".\"\".\"\".\"\".\" amount S0..1MoneyMonetary amount
    \".\"\".\"\".\"\".\"\".\" adjudication:denialreason S0..*BackboneElementAdjudication details
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: denialreason
    \".\"\".\"\".\"\".\"\".\"\".\" reason S1..1CodeableConceptExplanation of adjudication outcome
    Binding: X12 Claim Adjustment Reason Codes - Remittance Advice Remark Codes (required)
    \".\"\".\"\".\"\".\"\".\" adjudication:allowedunits S0..1BackboneElementAdjudication details
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: allowedunits
    \".\"\".\"\".\"\".\"\".\"\".\" value S0..1decimalNon-monitary value
    \".\"\".\"\".\" adjudication SI0..*(Slice Definition)Header-level adjudication
    Slice: Unordered, Closed by pattern:category
    adjudication-has-amount-type-slice: If Adjudication is present, it must have at least one adjudicationamounttype slice
    \".\"\".\"\".\"\".\" adjudication:All Slices Content/Rules for all slices
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication Category Discriminator (required)
    \".\"\".\"\".\"\".\" adjudication:adjudicationamounttype S0..*BackboneElementHeader-level adjudication
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication (required)
    \".\"\".\"\".\"\".\"\".\" amount 1..1MoneyMonetary amount
    \".\"\".\"\".\"\".\" adjudication:denialreason S0..*BackboneElementHeader-level adjudication
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: denialreason
    \".\"\".\"\".\"\".\"\".\" reason S0..1CodeableConceptExplanation of adjudication outcome
    Binding: X12 Claim Adjustment Reason Codes - Remittance Advice Remark Codes (required)
    \".\"\".\"\".\" total 1..*(Slice Definition)Adjudication totals
    Slice: Unordered, Open by pattern:category
    \".\"\".\"\".\"\".\" total:All Slices Content/Rules for all slices
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptType of adjudication information
    Binding: C4BB Total Category Discriminator (extensible)
    \".\"\".\"\".\"\".\"\".\" amount 1..1MoneyFinancial total for the category
    \".\"\".\"\".\"\".\" total:adjudicationamounttype S1..*BackboneElementAdjudication totals
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication (required)
    \".\"\".\"\".\"\".\"\".\" amount S1..1MoneyFinancial total for the category
    \".\"\".\"\".\"\".\" total:inoutnetwork S0..1BackboneElementAdjudication totals
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Payer Benefit Payment Status (required)
    \".\"\".\"\".\" payment
    \".\"\".\"\".\"\".\" date S0..1dateExpected date of payment
    \".\"\".\"\".\" processNote
    \".\"\".\"\".\"\".\" text S0..1stringNote explanatory text

    \"doco\" Documentation for this format
    "},"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-category","valueString":"Financial.General"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-security-category","valueCode":"patient"}],"url":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional","version":"1.0.0","name":"C4BBExplanationOfBenefitInpatientInstitutional","title":"C4BB ExplanationOfBenefit Inpatient Institutional","status":"active","date":"2020-11-23T16:49:10+00:00","publisher":"HL7 Financial Management Working Group","contact":[{"name":"HL7 Financial Management Working Group","telecom":[{"system":"url","value":"http://www.hl7.org/Special/committees/fm/index.cfm"},{"system":"email","value":"fm@lists.HL7.org"}]}],"description":"The profile is used for Explanation of Benefits (EOBs) based on claims submitted by clinics, hospitals, skilled nursing facilities and other institutions for inpatient services, which may include the use of equipment and supplies, laboratory services, radiology services and other charges. Inpatient claims are submitted for services rendered at an institution as part of an overnight stay. \nThe claims data is based on the institutional claim format UB-04, submission standards adopted by the Department of Health and Human \nServices.","jurisdiction":[{"coding":[{"system":"urn:iso:std:iso:3166","code":"US"}]}],"fhirVersion":"4.0.1","mapping":[{"identity":"workflow","uri":"http://hl7.org/fhir/workflow","name":"Workflow Pattern"},{"identity":"w5","uri":"http://hl7.org/fhir/fivews","name":"FiveWs Pattern Mapping"},{"identity":"v2","uri":"http://hl7.org/v2","name":"HL7 v2 Mapping"},{"identity":"rim","uri":"http://hl7.org/v3","name":"RIM Mapping"}],"kind":"resource","abstract":false,"type":"ExplanationOfBenefit","baseDefinition":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit","derivation":"constraint","snapshot":{"element":[{"id":"ExplanationOfBenefit","path":"ExplanationOfBenefit","short":"Explanation of Benefit resource","definition":"This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.","alias":["EOB"],"min":0,"max":"*","base":{"path":"ExplanationOfBenefit","min":0,"max":"*"},"constraint":[{"key":"dom-2","severity":"error","human":"If the resource is contained in another resource, it SHALL NOT contain nested Resources","expression":"contained.contained.empty()","xpath":"not(parent::f:contained and f:contained)","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"dom-3","severity":"error","human":"If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource","expression":"contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()","xpath":"not(exists(for $id in f:contained/*/f:id/@value return $contained[not(parent::*/descendant::f:reference/@value=concat('#', $contained/*/id/@value) or descendant::f:reference[@value='#'])]))","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"dom-4","severity":"error","human":"If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated","expression":"contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()","xpath":"not(exists(f:contained/*/f:meta/f:versionId)) and not(exists(f:contained/*/f:meta/f:lastUpdated))","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"dom-5","severity":"error","human":"If a resource is contained in another resource, it SHALL NOT have a security label","expression":"contained.meta.security.empty()","xpath":"not(exists(f:contained/*/f:meta/f:security))","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice","valueBoolean":true},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice-explanation","valueMarkdown":"When a resource has no narrative, only systems that fully understand the data can display the resource to a human safely. Including a human readable representation in the resource makes for a much more robust eco-system and cheaper handling of resources by intermediary systems. Some ecosystems restrict distribution of resources to only those systems that do fully understand the resources, and as a consequence implementers may believe that the narrative is superfluous. However experience shows that such eco-systems often open up to new participants over time."}],"key":"dom-6","severity":"warning","human":"A resource should have narrative for robust management","expression":"text.`div`.exists()","xpath":"exists(f:text/h:div)","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"EOB-institutional-item-or-header-adjudication","severity":"error","human":"Institutional EOB: Should have adjudication at the item or header level, but not both","expression":"(adjudication.exists() != item.adjudication.exists())","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"Entity. Role, or Act"},{"identity":"workflow","map":"Event"}]},{"id":"ExplanationOfBenefit.id","path":"ExplanationOfBenefit.id","short":"Logical id of this artifact","definition":"The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.","comment":"The only time that a resource does not have an id is when it is being submitted to the server using a create operation.","min":0,"max":"1","base":{"path":"Resource.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.meta","path":"ExplanationOfBenefit.meta","short":"Metadata about the resource","definition":"The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.","min":1,"max":"1","base":{"path":"Resource.meta","min":0,"max":"1"},"type":[{"code":"Meta"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.meta.id","path":"ExplanationOfBenefit.meta.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.meta.extension","path":"ExplanationOfBenefit.meta.extension","slicing":{"discriminator":[{"type":"value","path":"url"}],"description":"Extensions are always sliced by (at least) url","rules":"open"},"short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.meta.versionId","path":"ExplanationOfBenefit.meta.versionId","short":"Version specific identifier","definition":"The version specific identifier, as it appears in the version portion of the URL. This value changes when the resource is created, updated, or deleted.","comment":"The server assigns this value, and ignores what the client specifies, except in the case that the server is imposing version integrity on updates/deletes.","min":0,"max":"1","base":{"path":"Meta.versionId","min":0,"max":"1"},"type":[{"code":"id"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.meta.lastUpdated","path":"ExplanationOfBenefit.meta.lastUpdated","short":"When the resource version last changed","definition":"When the resource last changed - e.g. when the version changed.","comment":"Defines the date the Resource was created or updated, whichever comes last (163). Payers SHALL provide the last time the data was updated or the date of creation in the payer’s system of record, whichever comes last","min":1,"max":"1","base":{"path":"Meta.lastUpdated","min":0,"max":"1"},"type":[{"code":"instant"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.meta.source","path":"ExplanationOfBenefit.meta.source","short":"Identifies where the resource comes from","definition":"A uri that identifies the source system of the resource. This provides a minimal amount of [Provenance](http://hl7.org/fhir/R4/provenance.html#) information that can be used to track or differentiate the source of information in the resource. The source may identify another FHIR server, document, message, database, etc.","comment":"In the provenance resource, this corresponds to Provenance.entity.what[x]. The exact use of the source (and the implied Provenance.entity.role) is left to implementer discretion. Only one nominated source is allowed; for additional provenance details, a full Provenance resource should be used. \n\nThis element can be used to indicate where the current master source of a resource that has a canonical URL if the resource is no longer hosted at the canonical URL.","min":0,"max":"1","base":{"path":"Meta.source","min":0,"max":"1"},"type":[{"code":"uri"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.meta.profile","path":"ExplanationOfBenefit.meta.profile","short":"Profiles this resource claims to conform to","definition":"A list of profiles (references to [StructureDefinition](http://hl7.org/fhir/R4/structuredefinition.html#) resources) that this resource claims to conform to. The URL is a reference to [StructureDefinition.url](http://hl7.org/fhir/R4/structuredefinition-definitions.html#StructureDefinition.url).","comment":"CPCDS data element (190)","min":1,"max":"*","base":{"path":"Meta.profile","min":0,"max":"*"},"type":[{"code":"canonical","targetProfile":["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.meta.security","path":"ExplanationOfBenefit.meta.security","short":"Security Labels applied to this resource","definition":"Security labels applied to this resource. These tags connect specific resources to the overall security policy and infrastructure.","comment":"The security labels can be updated without changing the stated version of the resource. The list of security labels is a set. Uniqueness is based the system/code, and version and display are ignored.","min":0,"max":"*","base":{"path":"Meta.security","min":0,"max":"*"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"SecurityLabels"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"extensible","description":"Security Labels from the Healthcare Privacy and Security Classification System.","valueSet":"http://hl7.org/fhir/ValueSet/security-labels"}},{"id":"ExplanationOfBenefit.meta.tag","path":"ExplanationOfBenefit.meta.tag","short":"Tags applied to this resource","definition":"Tags applied to this resource. Tags are intended to be used to identify and relate resources to process and workflow, and applications are not required to consider the tags when interpreting the meaning of a resource.","comment":"The tags can be updated without changing the stated version of the resource. The list of tags is a set. Uniqueness is based the system/code, and version and display are ignored.","min":0,"max":"*","base":{"path":"Meta.tag","min":0,"max":"*"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Tags"}],"strength":"example","description":"Codes that represent various types of tags, commonly workflow-related; e.g. \"Needs review by Dr. Jones\".","valueSet":"http://hl7.org/fhir/ValueSet/common-tags"}},{"id":"ExplanationOfBenefit.implicitRules","path":"ExplanationOfBenefit.implicitRules","short":"A set of rules under which this content was created","definition":"A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.","comment":"Asserting this rule set restricts the content to be only understood by a limited set of trading partners. This inherently limits the usefulness of the data in the long term. However, the existing health eco-system is highly fractured, and not yet ready to define, collect, and exchange data in a generally computable sense. Wherever possible, implementers and/or specification writers should avoid using this element. Often, when used, the URL is a reference to an implementation guide that defines these special rules as part of it's narrative along with other profiles, value sets, etc.","min":0,"max":"1","base":{"path":"Resource.implicitRules","min":0,"max":"1"},"type":[{"code":"uri"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":true,"isModifierReason":"This element is labeled as a modifier because the implicit rules may provide additional knowledge about the resource that modifies it's meaning or interpretation","isSummary":true},{"id":"ExplanationOfBenefit.language","path":"ExplanationOfBenefit.language","short":"Language of the resource content","definition":"The base language in which the resource is written.","comment":"Language is provided to support indexing and accessibility (typically, services such as text to speech use the language tag). The html language tag in the narrative applies to the narrative. The language tag on the resource may be used to specify the language of other presentations generated from the data in the resource. Not all the content has to be in the base language. The Resource.language should not be assumed to apply to the narrative automatically. If a language is specified, it should it also be specified on the div element in the html (see rules in HTML5 for information about the relationship between xml:lang and the html lang attribute).","min":0,"max":"1","base":{"path":"Resource.language","min":0,"max":"1"},"type":[{"code":"code"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-maxValueSet","valueCanonical":"http://hl7.org/fhir/ValueSet/all-languages"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Language"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"preferred","description":"A human language.","valueSet":"http://hl7.org/fhir/ValueSet/languages"}},{"id":"ExplanationOfBenefit.text","path":"ExplanationOfBenefit.text","short":"Text summary of the resource, for human interpretation","definition":"A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.","comment":"Contained resources do not have narrative. Resources that are not contained SHOULD have a narrative. In some cases, a resource may only have text with little or no additional discrete data (as long as all minOccurs=1 elements are satisfied). This may be necessary for data from legacy systems where information is captured as a \"text blob\" or where text is additionally entered raw or narrated and encoded information is added later.","alias":["narrative","html","xhtml","display"],"min":0,"max":"1","base":{"path":"DomainResource.text","min":0,"max":"1"},"type":[{"code":"Narrative"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"Act.text?"}]},{"id":"ExplanationOfBenefit.contained","path":"ExplanationOfBenefit.contained","short":"Contained, inline Resources","definition":"These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.","comment":"This should never be done when the content can be identified properly, as once identification is lost, it is extremely difficult (and context dependent) to restore it again. Contained resources may have profiles and tags In their meta elements, but SHALL NOT have security labels.","alias":["inline resources","anonymous resources","contained resources"],"min":0,"max":"*","base":{"path":"DomainResource.contained","min":0,"max":"*"},"type":[{"code":"Resource"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.extension","path":"ExplanationOfBenefit.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"DomainResource.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.modifierExtension","path":"ExplanationOfBenefit.modifierExtension","short":"Extensions that cannot be ignored","definition":"May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"DomainResource.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the resource that contains them","isSummary":false,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.identifier","path":"ExplanationOfBenefit.identifier","short":"Business Identifier for the resource","definition":"A unique identifier assigned to this explanation of benefit.","comment":"Identifier assigned by a payer for a claim received from a provider or subscriber. It is not the same identifier as that assigned by a provider. (35)","requirements":"Allows EOBs to be distinguished and referenced.","min":1,"max":"*","base":{"path":"ExplanationOfBenefit.identifier","min":0,"max":"*"},"type":[{"code":"Identifier"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"mapping":[{"identity":"workflow","map":"Event.identifier"},{"identity":"w5","map":"FiveWs.identifier"}]},{"id":"ExplanationOfBenefit.identifier.id","path":"ExplanationOfBenefit.identifier.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.identifier.extension","path":"ExplanationOfBenefit.identifier.extension","slicing":{"discriminator":[{"type":"value","path":"url"}],"description":"Extensions are always sliced by (at least) url","rules":"open"},"short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.identifier.use","path":"ExplanationOfBenefit.identifier.use","short":"usual | official | temp | secondary | old (If known)","definition":"The purpose of this identifier.","comment":"Applications can assume that an identifier is permanent unless it explicitly says that it is temporary.","requirements":"Allows the appropriate identifier for a particular context of use to be selected from among a set of identifiers.","min":0,"max":"1","base":{"path":"Identifier.use","min":0,"max":"1"},"type":[{"code":"code"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":true,"isModifierReason":"This is labeled as \"Is Modifier\" because applications should not mistake a temporary id for a permanent one.","isSummary":true,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"IdentifierUse"}],"strength":"required","description":"Identifies the purpose for this identifier, if known .","valueSet":"http://hl7.org/fhir/ValueSet/identifier-use|4.0.1"},"mapping":[{"identity":"v2","map":"N/A"},{"identity":"rim","map":"Role.code or implied by context"}]},{"id":"ExplanationOfBenefit.identifier.type","path":"ExplanationOfBenefit.identifier.type","short":"Description of identifier","definition":"A coded type for the identifier that can be used to determine which identifier to use for a specific purpose.","comment":"Indicates that the claim identifier is that assigned by a payer for a claim received from a provider or subscriber. (183)","requirements":"Allows users to make use of identifiers when the identifier system is not known.","min":1,"max":"1","base":{"path":"Identifier.type","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimIdentifierType"},"mapping":[{"identity":"v2","map":"CX.5"},{"identity":"rim","map":"Role.code or implied by context"}]},{"id":"ExplanationOfBenefit.identifier.system","path":"ExplanationOfBenefit.identifier.system","short":"The namespace for the identifier value","definition":"Establishes the namespace for the value - that is, a URL that describes a set values that are unique.","comment":"Identifier.system is always case sensitive.","requirements":"There are many sets of identifiers. To perform matching of two identifiers, we need to know what set we're dealing with. The system identifies a particular set of unique identifiers.","min":0,"max":"1","base":{"path":"Identifier.system","min":0,"max":"1"},"type":[{"code":"uri"}],"example":[{"label":"General","valueUri":"http://www.acme.com/identifiers/patient"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"CX.4 / EI-2-4"},{"identity":"rim","map":"II.root or Role.id.root"},{"identity":"servd","map":"./IdentifierType"}]},{"id":"ExplanationOfBenefit.identifier.value","path":"ExplanationOfBenefit.identifier.value","short":"The value that is unique","definition":"The portion of the identifier typically relevant to the user and which is unique within the context of the system.","comment":"If the value is a full URI, then the system SHALL be urn:ietf:rfc:3986. The value's primary purpose is computational mapping. As a result, it may be normalized for comparison purposes (e.g. removing non-significant whitespace, dashes, etc.) A value formatted for human display can be conveyed using the [Rendered Value extension](http://hl7.org/fhir/R4/extension-rendered-value.html). Identifier.value is to be treated as case sensitive unless knowledge of the Identifier.system allows the processer to be confident that non-case-sensitive processing is safe.","min":0,"max":"1","base":{"path":"Identifier.value","min":0,"max":"1"},"type":[{"code":"string"}],"example":[{"label":"General","valueString":"123456"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"CX.1 / EI.1"},{"identity":"rim","map":"II.extension or II.root if system indicates OID or GUID (Or Role.id.extension or root)"},{"identity":"servd","map":"./Value"}]},{"id":"ExplanationOfBenefit.identifier.period","path":"ExplanationOfBenefit.identifier.period","short":"Time period when id is/was valid for use","definition":"Time period during which identifier is/was valid for use.","min":0,"max":"1","base":{"path":"Identifier.period","min":0,"max":"1"},"type":[{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"CX.7 + CX.8"},{"identity":"rim","map":"Role.effectiveTime or implied by context"},{"identity":"servd","map":"./StartDate and ./EndDate"}]},{"id":"ExplanationOfBenefit.identifier.assigner","path":"ExplanationOfBenefit.identifier.assigner","short":"Organization that issued id (may be just text)","definition":"Organization that issued/manages the identifier.","comment":"The Identifier.assigner may omit the .reference element and only contain a .display element reflecting the name or other textual information about the assigning organization.","min":0,"max":"1","base":{"path":"Identifier.assigner","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Organization"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"CX.4 / (CX.4,CX.9,CX.10)"},{"identity":"rim","map":"II.assigningAuthorityName but note that this is an improper use by the definition of the field. Also Role.scoper"},{"identity":"servd","map":"./IdentifierIssuingAuthority"}]},{"id":"ExplanationOfBenefit.status","path":"ExplanationOfBenefit.status","short":"active | cancelled | draft | entered-in-error","definition":"The status of the resource instance.","comment":"Claim processing status code (140). Expected values are active or cancelled. To comply with the CMS rule, draft EOBs are not required","requirements":"Need to track the status of the resource as 'draft' resources may undergo further edits while 'active' resources are immutable and may only have their status changed to 'cancelled'.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.status","min":1,"max":"1"},"type":[{"code":"code"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":true,"isModifierReason":"This element is labeled as a modifier because it is a status element that contains status entered-in-error which means that the resource should not be treated as valid","isSummary":true,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ExplanationOfBenefitStatus"}],"strength":"required","description":"A code specifying the state of the resource instance.","valueSet":"http://hl7.org/fhir/ValueSet/explanationofbenefit-status|4.0.1"},"mapping":[{"identity":"workflow","map":"Event.status"},{"identity":"w5","map":"FiveWs.status"}]},{"id":"ExplanationOfBenefit.type","path":"ExplanationOfBenefit.type","short":"Category or discipline","definition":"The category of claim, e.g. oral, pharmacy, vision, institutional, professional.","comment":"Specifies the type of claim. (e.g., inpatient insitutional, outpatient institutional, physician, etc.) (16). Defines the Claims profiles. Values from Claim Type Codes are required; a data absent reason is not allowed","requirements":"Claim type determine the general sets of business rules applied for information requirements and adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.type","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/claim-type","code":"institutional"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/ValueSet/claim-type"},"mapping":[{"identity":"workflow","map":"Event.code"},{"identity":"w5","map":"FiveWs.class"}]},{"id":"ExplanationOfBenefit.subType","path":"ExplanationOfBenefit.subType","short":"More granular claim type","definition":"A finer grained suite of claim type codes which may convey additional information such as Inpatient vs Outpatient and/or a specialty service.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Some jurisdictions need a finer grained claim type for routing and adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.subType","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ClaimSubType"}],"strength":"example","description":"A more granular claim typecode.","valueSet":"http://hl7.org/fhir/ValueSet/claim-subtype"},"mapping":[{"identity":"w5","map":"FiveWs.class"}]},{"id":"ExplanationOfBenefit.use","path":"ExplanationOfBenefit.use","short":"claim | preauthorization | predetermination","definition":"A code to indicate whether the nature of the request is: to request adjudication of products and services previously rendered; or requesting authorization and adjudication for provision in the future; or requesting the non-binding adjudication of the listed products and services which could be provided in the future.","comment":"Expected value is claim. The CMS rule applies to adjudicated claims; it does not require preauthorizations or predeterminations","requirements":"This element is required to understand the nature of the request for adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.use","min":1,"max":"1"},"type":[{"code":"code"}],"patternCode":"claim","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Use"}],"strength":"required","description":"Complete, proposed, exploratory, other.","valueSet":"http://hl7.org/fhir/ValueSet/claim-use|4.0.1"},"mapping":[{"identity":"w5","map":"FiveWs.class"}]},{"id":"ExplanationOfBenefit.patient","path":"ExplanationOfBenefit.patient","short":"The recipient of the products and services","definition":"The party to whom the professional services and/or products have been supplied or are being considered and for whom actual for forecast reimbursement is sought.","comment":"Identifier for a member assigned by the Payer. If members receive ID cards, that is the identifier that should be provided. (1). The patient must be supplied to the insurer so that confirmation of coverage and service history may be considered as part of the authorization and/or adjudiction. Additional required path:EOB.insurance.coverage(Coverage).beneficiary(Patient).identifier","requirements":"The patient must be supplied to the insurer so that confirmation of coverage and service history may be considered as part of the authorization and/or adjudiction.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.patient","min":1,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Patient"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"workflow","map":"Event.subject"},{"identity":"w5","map":"FiveWs.subject[x]"},{"identity":"w5","map":"FiveWs.subject"}]},{"id":"ExplanationOfBenefit.billablePeriod","path":"ExplanationOfBenefit.billablePeriod","short":"Relevant time frame for the claim","definition":"The period for which charges are being submitted.","comment":"Typically this would be today or in the past for a claim, and today or in the future for preauthorizations and prodeterminations. Typically line item dates of service should fall within the billing period if one is specified.","requirements":"A number jurisdictions required the submission of the billing period when submitting claims for example for hospital stays or long-term care.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.billablePeriod","min":0,"max":"1"},"type":[{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"w5","map":"FiveWs.done[x]"}]},{"id":"ExplanationOfBenefit.billablePeriod.id","path":"ExplanationOfBenefit.billablePeriod.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.billablePeriod.extension","path":"ExplanationOfBenefit.billablePeriod.extension","slicing":{"discriminator":[{"type":"value","path":"url"}],"description":"Extensions are always sliced by (at least) url","rules":"open"},"short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.billablePeriod.start","path":"ExplanationOfBenefit.billablePeriod.start","short":"Starting time with inclusive boundary","definition":"The start of the period. The boundary is inclusive.","comment":"The first day on the billing statement covering services rendered to the beneficiary (i.e. 'Statement Covers From Date’). (177)","min":0,"max":"1","base":{"path":"Period.start","min":0,"max":"1"},"type":[{"code":"dateTime"}],"condition":["per-1"],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"DR.1"},{"identity":"rim","map":"./low"}]},{"id":"ExplanationOfBenefit.billablePeriod.end","path":"ExplanationOfBenefit.billablePeriod.end","short":"End time with inclusive boundary, if not ongoing","definition":"The end of the period. If the end of the period is missing, it means no end was known or planned at the time the instance was created. The start may be in the past, and the end date in the future, which means that period is expected/planned to end at that time.","comment":"The last day on the billing statement covering services rendered to the beneficiary (i.e. 'Statement Covers Thru Date’). (178)","min":0,"max":"1","base":{"path":"Period.end","min":0,"max":"1"},"type":[{"code":"dateTime"}],"meaningWhenMissing":"If the end of the period is missing, it means that the period is ongoing","condition":["per-1"],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"DR.2"},{"identity":"rim","map":"./high"}]},{"id":"ExplanationOfBenefit.created","path":"ExplanationOfBenefit.created","short":"Response creation date","definition":"The date this resource was created.","comment":"Date the claim was adjudicated (179)","requirements":"Need to record a timestamp for use by both the recipient and the issuer.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.created","min":1,"max":"1"},"type":[{"code":"dateTime"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"workflow","map":"Event.occurrence[x]"},{"identity":"w5","map":"FiveWs.recorded"}]},{"id":"ExplanationOfBenefit.enterer","path":"ExplanationOfBenefit.enterer","short":"Author of the claim","definition":"Individual who created the claim, predetermination or preauthorization.","requirements":"Some jurisdictions require the contact information for personnel completing claims.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.enterer","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"workflow","map":"Event.performer.agent"},{"identity":"w5","map":"FiveWs.author"}]},{"id":"ExplanationOfBenefit.insurer","path":"ExplanationOfBenefit.insurer","short":"Party responsible for reimbursement","definition":"The party responsible for authorization, adjudication and reimbursement.","comment":"Code of the payer responsible for the claim (2, 5). Same as insurance.coverage.organization. Party responsible for reimbursing the provider","requirements":"To be a valid claim, preauthorization or predetermination there must be a party who is responsible for adjudicating the contents against a policy which provides benefits for the patient.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.insurer","min":1,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"workflow","map":"Event.performer.agent"},{"identity":"w5","map":"FiveWs.author"}]},{"id":"ExplanationOfBenefit.provider","path":"ExplanationOfBenefit.provider","short":"Party responsible for the claim","definition":"The provider which is responsible for the claim, predetermination or preauthorization.","comment":"The identifier assigned to the Billing Provider. (94)","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.provider","min":1,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"w5","map":"FiveWs.source"}]},{"id":"ExplanationOfBenefit.priority","path":"ExplanationOfBenefit.priority","short":"Desired processing urgency","definition":"The provider-required urgency of processing the request. Typical values include: stat, routine deferred.","comment":"If a claim processor is unable to complete the processing as per the priority then they should generate and error and not process the request.","requirements":"The provider may need to indicate their processing requirements so that the processor can indicate if they are unable to comply.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.priority","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/ValueSet/process-priority"},"mapping":[{"identity":"v2","map":"Request.priority"}]},{"id":"ExplanationOfBenefit.fundsReserveRequested","path":"ExplanationOfBenefit.fundsReserveRequested","short":"For whom to reserve funds","definition":"A code to indicate whether and for whom funds are to be reserved for future claims.","comment":"This field is only used for preauthorizations.","requirements":"In the case of a Pre-Determination/Pre-Authorization the provider may request that funds in the amount of the expected Benefit be reserved ('Patient' or 'Provider') to pay for the Benefits determined on the subsequent claim(s). 'None' explicitly indicates no funds reserving is requested.","alias":["Fund pre-allocation"],"min":0,"max":"1","base":{"path":"ExplanationOfBenefit.fundsReserveRequested","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"FundsReserve"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"example","description":"For whom funds are to be reserved: (Patient, Provider, None).","valueSet":"http://hl7.org/fhir/ValueSet/fundsreserve"}},{"id":"ExplanationOfBenefit.fundsReserve","path":"ExplanationOfBenefit.fundsReserve","short":"Funds reserved status","definition":"A code, used only on a response to a preauthorization, to indicate whether the benefits payable have been reserved and for whom.","comment":"Fund would be release by a future claim quoting the preAuthRef of this response. Examples of values include: provider, patient, none.","requirements":"Needed to advise the submitting provider on whether the rquest for reservation of funds has been honored.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.fundsReserve","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"FundsReserve"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"example","description":"For whom funds are to be reserved: (Patient, Provider, None).","valueSet":"http://hl7.org/fhir/ValueSet/fundsreserve"}},{"id":"ExplanationOfBenefit.related","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"RelatedClaim"}],"path":"ExplanationOfBenefit.related","short":"Prior or corollary claims","definition":"Other claims which are related to this claim such as prior submissions or claims for related services or for the same event.","comment":"If the current claim represents a claim that has been adjusted and was given a prior claim number, this field represents the prior claim number. If the current claim has been adjusted; i.e., replaced by or merged to another claim number, this data element represents that new number.(111, 112)","requirements":"For workplace or other accidents it is common to relate separate claims arising from the same event.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.related","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.related.id","path":"ExplanationOfBenefit.related.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.related.extension","path":"ExplanationOfBenefit.related.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.related.modifierExtension","path":"ExplanationOfBenefit.related.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.related.claim","path":"ExplanationOfBenefit.related.claim","short":"Reference to the related claim","definition":"Reference to a related claim.","requirements":"For workplace or other accidents it is common to relate separate claims arising from the same event.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.related.claim","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Claim"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.related.relationship","path":"ExplanationOfBenefit.related.relationship","short":"How the reference claim is related","definition":"A code to convey how the claims are related.","comment":"For example, prior claim or umbrella.","requirements":"Some insurers need a declaration of the type of relationship.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.related.relationship","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBRelatedClaimRelationshipCodes"}},{"id":"ExplanationOfBenefit.related.reference","path":"ExplanationOfBenefit.related.reference","short":"File or case reference","definition":"An alternate organizational reference to the case or file to which this particular claim pertains.","comment":"For example, Property/Casualty insurer claim number or Workers Compensation case number.","requirements":"In cases where an event-triggered claim is being submitted to an insurer which requires a reference number to be specified on all exchanges.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.related.reference","min":0,"max":"1"},"type":[{"code":"Identifier"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.prescription","path":"ExplanationOfBenefit.prescription","short":"Prescription authorizing services or products","definition":"Prescription to support the dispensing of pharmacy, device or vision products.","requirements":"Required to authorize the dispensing of controlled substances and devices.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.prescription","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/MedicationRequest","http://hl7.org/fhir/StructureDefinition/VisionPrescription"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.originalPrescription","path":"ExplanationOfBenefit.originalPrescription","short":"Original prescription if superceded by fulfiller","definition":"Original prescription which has been superseded by this prescription to support the dispensing of pharmacy services, medications or products.","comment":"For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new prescription for an alternate medication which has the same therapeutic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.","requirements":"Often required when a fulfiller varies what is fulfilled from that authorized on the original prescription.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.originalPrescription","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/MedicationRequest"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.payee","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Payee"}],"path":"ExplanationOfBenefit.payee","short":"Recipient of benefits payable","definition":"The party to be reimbursed for cost of the products and services according to the terms of the policy.","comment":"Often providers agree to receive the benefits payable to reduce the near-term costs to the patient. The insurer may decline to pay the provider and may choose to pay the subscriber instead.","requirements":"The provider needs to specify who they wish to be reimbursed and the claims processor needs express who they will reimburse.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payee","min":0,"max":"1"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.payee.id","path":"ExplanationOfBenefit.payee.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.payee.extension","path":"ExplanationOfBenefit.payee.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.payee.modifierExtension","path":"ExplanationOfBenefit.payee.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.payee.type","path":"ExplanationOfBenefit.payee.type","short":"Category of recipient","definition":"Type of Party to be reimbursed: Subscriber, provider, other.","comment":"Identifies the type of recipient of the adjudication amount; i.e., provider, subscriber, beneficiary or another recipient. (120)","requirements":"Need to know who should receive payment with the most common situations being the Provider (assignment of benefits) or the Subscriber.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.payee.type","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayeeType"}},{"id":"ExplanationOfBenefit.payee.party","path":"ExplanationOfBenefit.payee.party","short":"Recipient reference","definition":"Reference to the individual or organization to whom any payment will be made.","comment":"Recipient reference (121)","requirements":"Need to provide demographics if the payee is not 'subscriber' nor 'provider'.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.payee.party","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization","http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Patient","http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Practitioner"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.referral","path":"ExplanationOfBenefit.referral","short":"Treatment Referral","definition":"A reference to a referral resource.","comment":"The referral resource which lists the date, practitioner, reason and other supporting information.","requirements":"Some insurers require proof of referral to pay for services or to pay specialist rates for services.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.referral","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/ServiceRequest"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"w5","map":"FiveWs.cause"}]},{"id":"ExplanationOfBenefit.facility","path":"ExplanationOfBenefit.facility","short":"Servicing Facility","definition":"Facility where the services were provided.","requirements":"Insurance adjudication can be dependant on where services were delivered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.facility","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Location"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"workflow","map":"Event.performer.location"},{"identity":"w5","map":"FiveWs.where[x]"}]},{"id":"ExplanationOfBenefit.claim","path":"ExplanationOfBenefit.claim","short":"Claim reference","definition":"The business identifier for the instance of the adjudication request: claim predetermination or preauthorization.","requirements":"To provide a link to the original adjudication request.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.claim","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Claim"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"w5","map":"FiveWs.why[x]"}]},{"id":"ExplanationOfBenefit.claimResponse","path":"ExplanationOfBenefit.claimResponse","short":"Claim response reference","definition":"The business identifier for the instance of the adjudication response: claim, predetermination or preauthorization response.","requirements":"To provide a link to the original adjudication response.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.claimResponse","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/ClaimResponse"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.outcome","path":"ExplanationOfBenefit.outcome","short":"queued | complete | error | partial","definition":"The outcome of the claim, predetermination, or preauthorization processing.","comment":"Expected value is complete","requirements":"To advise the requestor of an overall processing outcome.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.outcome","min":1,"max":"1"},"type":[{"code":"code"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"RemittanceOutcome"}],"strength":"required","description":"The result of the claim processing.","valueSet":"http://hl7.org/fhir/ValueSet/remittance-outcome|4.0.1"}},{"id":"ExplanationOfBenefit.disposition","path":"ExplanationOfBenefit.disposition","short":"Disposition Message","definition":"A human readable description of the status of the adjudication.","requirements":"Provided for user display.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.disposition","min":0,"max":"1"},"type":[{"code":"string"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.preAuthRef","path":"ExplanationOfBenefit.preAuthRef","short":"Preauthorization reference","definition":"Reference from the Insurer which is used in later communications which refers to this adjudication.","comment":"This value is only present on preauthorization adjudications.","requirements":"On subsequent claims, the insurer may require the provider to quote this value.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.preAuthRef","min":0,"max":"*"},"type":[{"code":"string"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.preAuthRefPeriod","path":"ExplanationOfBenefit.preAuthRefPeriod","short":"Preauthorization in-effect period","definition":"The timeframe during which the supplied preauthorization reference may be quoted on claims to obtain the adjudication as provided.","comment":"This value is only present on preauthorization adjudications.","requirements":"On subsequent claims, the insurer may require the provider to quote this value.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.preAuthRefPeriod","min":0,"max":"*"},"type":[{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.careTeam","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"CareTeam"}],"path":"ExplanationOfBenefit.careTeam","short":"Care Team members","definition":"The members of the team who provided the products and services.","requirements":"Common to identify the responsible and supporting practitioners.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.careTeam","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"EOB-inst-careTeam-practitioner","severity":"error","human":"Institutional EOB: Careteam roles refer to a practitioner","expression":"(\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists() implies\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists().provider.all(resolve() is Practitioner)\n)","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional"},{"key":"EOB-inst-careTeam-organization","severity":"error","human":"Institutional EOB: Careteam roles refer to an organization","expression":"(\nrole.where(coding.where(code in ('performing' )).exists()).exists() implies\nrole.where(coding.where(code in ('performing' )).exists()).exists().provider.all(resolve() is Organization)\n)","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.careTeam.id","path":"ExplanationOfBenefit.careTeam.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.careTeam.extension","path":"ExplanationOfBenefit.careTeam.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.careTeam.modifierExtension","path":"ExplanationOfBenefit.careTeam.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.careTeam.sequence","path":"ExplanationOfBenefit.careTeam.sequence","short":"Order of care team","definition":"A number to uniquely identify care team entries.","comment":"careTeam.sequence values uniquely identify careTeam members. They do not necessarily indiate any order in which the patient was seen by the careTeam or identify any level of significance of the careTeam to the patient, etc. Client app implementations should not assign any significance to the sequence values","requirements":"Necessary to maintain the order of the care team and provide a mechanism to link individuals to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.careTeam.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.careTeam.provider","path":"ExplanationOfBenefit.careTeam.provider","short":"Practitioner or organization","definition":"Member of the team who provided the product or service.","comment":"The identifier assigned to the care team. (varies depending on the profile)","requirements":"Often a regulatory requirement to specify the responsible provider.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.careTeam.provider","min":1,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization","http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Practitioner"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"mapping":[{"identity":"w5","map":"FiveWs.actor"}]},{"id":"ExplanationOfBenefit.careTeam.responsible","path":"ExplanationOfBenefit.careTeam.responsible","short":"Indicator of the lead practitioner","definition":"The party who is billing and/or responsible for the claimed products or services.","comment":"Responsible might not be required when there is only a single provider listed.","requirements":"When multiple parties are present it is required to distinguish the lead or responsible individual.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.careTeam.responsible","min":0,"max":"1"},"type":[{"code":"boolean"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.careTeam.role","path":"ExplanationOfBenefit.careTeam.role","short":"Function within the team","definition":"The lead, assisting or supervising practitioner and their discipline if a multidisciplinary team.","comment":"The functional role of a provider on a claim. (165)","requirements":"When multiple parties are present it is required to distinguish the roles performed by each member.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.careTeam.role","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimInstitutionalCareTeamRole"}},{"id":"ExplanationOfBenefit.careTeam.qualification","path":"ExplanationOfBenefit.careTeam.qualification","short":"Practitioner credential or specialization","definition":"The qualification of the practitioner which is applicable for this service.","requirements":"Need to specify which qualification a provider is delivering the product or service under.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.careTeam.qualification","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ProviderQualification"}],"strength":"example","description":"Provider professional qualifications.","valueSet":"http://hl7.org/fhir/ValueSet/provider-qualification"}},{"id":"ExplanationOfBenefit.supportingInfo","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on $this pattern","ordered":false,"rules":"open"},"short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"Defines data elements not available in the base EOB resource","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":1,"max":"*","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"InformationCode"}],"strength":"example","description":"The valuset used for additional information codes.","valueSet":"http://hl7.org/fhir/ValueSet/claim-exception"}},{"id":"ExplanationOfBenefit.supportingInfo.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"billingnetworkcontractingstatus","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"Indicates that the Billing Provider has a contract with the Plan (regardless of the network) as of the effective date of service or admission. (101)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"billingnetworkcontractingstatus"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerProviderContractingStatus"}},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"admissionperiod","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"The Period.start date corresponds with the date the beneficiary was admitted to a facility and the onset of services. May precede the Statement From Date if this claim is for a beneficiary who has been continuously under care. The Period.end date corresponds with the date beneficiary was discharged from the facility, or died. Matches the final Statement Thru Date. When there is a discharge date, the Patient Discharge Status Code indicates the final disposition of the patient after discharge. (18, 19)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"admissionperiod"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"InformationCode"}],"strength":"example","description":"The valuset used for additional information codes.","valueSet":"http://hl7.org/fhir/ValueSet/claim-exception"}},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","slicing":{"discriminator":[{"type":"type","path":"$this"}],"ordered":false,"rules":"closed"},"short":"When it occurred","definition":"The date when or period to which this information refers.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod.timing[x]:timingPeriod","path":"ExplanationOfBenefit.supportingInfo.timing[x]","sliceName":"timingPeriod","short":"When it occurred","definition":"The date when or period to which this information refers.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"clmrecvddate","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"The date the claim was received by the payer (88)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"clmrecvddate"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"InformationCode"}],"strength":"example","description":"The valuset used for additional information codes.","valueSet":"http://hl7.org/fhir/ValueSet/claim-exception"}},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"typeofbill","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"UB04 (Form Locator 4) type of bill code provides specific information for payer purposes. The first digit of the three-digit number denotes the type of institution, the second digit classifies the type of care being billed, and the third digit identifies the frequency of the bill for a specific course of treatment or inpatient confinement. (17)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"typeofbill"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCTypeOfBill"}},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"pointoforigin","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"Identifies the place where the patient was identified as needing admission to an institution. This is a two position code mapped from the standard values for the UB-04 Source of Admission code (FL-15). (13)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"pointoforigin"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPointOfOriginForAdmissionOrVisit"}},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:admtype","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"admtype","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"Priority of the admission. Information located on (UB04 Form Locator 14). For example, an admission type of elective indicates that the patient's condition permitted time for medical services to be scheduled. (14)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:admtype.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:admtype.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:admtype.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:admtype.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:admtype.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"admtype"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:admtype.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPriorityTypeOfAdmissionOrVisit"}},{"id":"ExplanationOfBenefit.supportingInfo:admtype.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:admtype.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:admtype.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"discharge-status","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"Patient’s status as of the discharge date for a facility stay. Information located on UB04. (Form Locator 17). (117)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"discharge-status"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPatientDischargeStatus"}},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:drg","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"drg","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"Claim diagnosis related group (DRG). DRGs require the DRG system; i.e., MS-DRG / AP-DRG / APR-DRG, the DRG version and the code value (32, 33. 113)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:drg.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:drg.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:drg.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:drg.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:drg.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"drg"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:drg.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/CMSMS3MAPAPRDRG"}},{"id":"ExplanationOfBenefit.supportingInfo:drg.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:drg.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:drg.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.diagnosis","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Diagnosis"}],"path":"ExplanationOfBenefit.diagnosis","short":"Pertinent diagnosis information","definition":"Information about diagnoses relevant to the claim items.","comment":"Diagnosis codes describe an individual's disease or medical condition. (6, 7, 8, 21, 22, 23, 30)","requirements":"Required for the adjudication by provided context for the services and product listed.","min":1,"max":"*","base":{"path":"ExplanationOfBenefit.diagnosis","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.diagnosis.id","path":"ExplanationOfBenefit.diagnosis.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.diagnosis.extension","path":"ExplanationOfBenefit.diagnosis.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.diagnosis.modifierExtension","path":"ExplanationOfBenefit.diagnosis.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.diagnosis.sequence","path":"ExplanationOfBenefit.diagnosis.sequence","short":"Diagnosis instance identifier","definition":"A number to uniquely identify diagnosis entries.","comment":"Diagnosis.sequence values do not necessarily indiate any order in which the diagnosis was reported or identified. client app implementations should not assign any significance to the sequence values. client app implementations should use the values of diagnosis.type to identify primary, secondary, etc.","requirements":"Necessary to maintain the order of the diagnosis items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.diagnosis.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.diagnosis.diagnosis[x]","path":"ExplanationOfBenefit.diagnosis.diagnosis[x]","short":"Nature of illness or problem","definition":"The nature of illness or problem in a coded form or as a reference to an external defined Condition.","requirements":"Provides health context for the evaluation of the products and/or services.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.diagnosis.diagnosis[x]","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/CDCICD910CMDiagnosisCodes"}},{"id":"ExplanationOfBenefit.diagnosis.type","path":"ExplanationOfBenefit.diagnosis.type","short":"Timing or nature of the diagnosis","definition":"When the condition was observed or the relative ranking.","comment":"Indicates if the inpatient institutional diagnosis is admitting, principal, other or an external cause of injury. (21, 22, 23)","requirements":"Often required to capture a particular diagnosis, for example: primary or discharge.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.diagnosis.type","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimInpatientInstitutionalDiagnosisType"}},{"id":"ExplanationOfBenefit.diagnosis.onAdmission","path":"ExplanationOfBenefit.diagnosis.onAdmission","short":"Present on admission","definition":"Indication of whether the diagnosis was present on admission to a facility.","comment":"Used to capture whether a diagnosis was present at time of a patient's admission. (28)","requirements":"Many systems need to understand for adjudication if the diagnosis was present a time of admission.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.diagnosis.onAdmission","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPresentOnAdmission"}},{"id":"ExplanationOfBenefit.diagnosis.packageCode","path":"ExplanationOfBenefit.diagnosis.packageCode","short":"Package billing code","definition":"A package billing code or bundle code used to group products and services to a particular health condition (such as heart attack) which is based on a predetermined grouping code system.","comment":"For example, DRG (Diagnosis Related Group) or a bundled billing code. A patient may have a diagnosis of a Myocardio-infarction and a DRG for HeartAttack would assigned. The Claim item (and possible subsequent claims) would refer to the DRG for those line items that were for services related to the heart attack event.","requirements":"Required to relate the current diagnosis to a package billing code that is then referenced on the individual claim items which are specific to the health condition covered by the package code.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.diagnosis.packageCode","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"DiagnosisRelatedGroup"}],"strength":"example","description":"The DRG codes associated with the diagnosis.","valueSet":"http://hl7.org/fhir/ValueSet/ex-diagnosisrelatedgroup"}},{"id":"ExplanationOfBenefit.procedure","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Procedure"}],"path":"ExplanationOfBenefit.procedure","short":"Clinical procedures performed","definition":"Procedures performed on the patient relevant to the billing items with the claim.","comment":"Medical procedure a patient received during inpatient stay. Current coding methods include: International Classification of Diseases Surgical Procedures (ICD-9). Information located on UB04 (Form Locator 74). (25, 27, 10, 12)","requirements":"The specific clinical invention are sometimes required to be provided to justify billing a greater than customary amount for a service.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.procedure","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.procedure.id","path":"ExplanationOfBenefit.procedure.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.procedure.extension","path":"ExplanationOfBenefit.procedure.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.procedure.modifierExtension","path":"ExplanationOfBenefit.procedure.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.procedure.sequence","path":"ExplanationOfBenefit.procedure.sequence","short":"Procedure instance identifier","definition":"A number to uniquely identify procedure entries.","comment":" procedure.sequence values do not necessarily indiate any order in which the procedure occurred. client app implementations should not assign any significance to the sequence values. client app implementations should use the values of procedure.type to identify primary and secondary procedures","requirements":"Necessary to provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.procedure.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.procedure.type","path":"ExplanationOfBenefit.procedure.type","short":"Category of Procedure","definition":"When the condition was observed or the relative ranking.","comment":"Indicates if the inpatient institutional procedure (ICD-PCS) is the principal procedure or another procedure. (186)","requirements":"Often required to capture a particular diagnosis, for example: primary or discharge.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.procedure.type","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimProcedureType"}},{"id":"ExplanationOfBenefit.procedure.date","path":"ExplanationOfBenefit.procedure.date","short":"When the procedure was performed","definition":"Date and optionally time the procedure was performed.","requirements":"Required for auditing purposes.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.procedure.date","min":0,"max":"1"},"type":[{"code":"dateTime"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.procedure.procedure[x]","path":"ExplanationOfBenefit.procedure.procedure[x]","short":"Specific clinical procedure","definition":"The code or reference to a Procedure resource which identifies the clinical intervention performed.","requirements":"This identifies the actual clinical procedure.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.procedure.procedure[x]","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/CMSICD910PCSProcedureCodes"}},{"id":"ExplanationOfBenefit.procedure.udi","path":"ExplanationOfBenefit.procedure.udi","short":"Unique device identifier","definition":"Unique Device Identifiers associated with this line item.","requirements":"The UDI code allows the insurer to obtain device level information on the product supplied.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.procedure.udi","min":0,"max":"*"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Device"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.precedence","path":"ExplanationOfBenefit.precedence","short":"Precedence (primary, secondary, etc.)","definition":"This indicates the relative order of a series of EOBs related to different coverages for the same suite of services.","requirements":"Needed to coordinate between multiple EOBs for the same suite of services.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.precedence","min":0,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.insurance","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Insurance"}],"path":"ExplanationOfBenefit.insurance","short":"Patient insurance information","definition":"Financial instruments for reimbursement for the health care products and services specified on the claim.","comment":"Identity of the payers responsible for the claim. (2, 141). All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. An invariant is defined to enforce the following rule: Will have multiple occurrences on secondary / tertiary, etc. claims. Up to one occurrence, that of the ExplanationOfBenefit.insurer, will have a boolean value = 'True'","requirements":"At least one insurer is required for a claim to be a claim.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.insurance","min":1,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"EOB-insurance-focal","severity":"error","human":"EOB.insurance: at most one with focal = true","expression":"insurance.select (focal = true).count() < 2","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"Coverage"}]},{"id":"ExplanationOfBenefit.insurance.id","path":"ExplanationOfBenefit.insurance.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.insurance.extension","path":"ExplanationOfBenefit.insurance.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.insurance.modifierExtension","path":"ExplanationOfBenefit.insurance.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.insurance.focal","path":"ExplanationOfBenefit.insurance.focal","short":"Coverage to be used for adjudication","definition":"A flag to indicate that this Coverage is to be used for adjudication of this claim when set to true.","comment":"A patient may (will) have multiple insurance policies which provide reimbursement for healthcare services and products. For example, a person may also be covered by their spouse's policy and both appear in the list (and may be from the same insurer). This flag will be set to true for only one of the listed policies and that policy will be used for adjudicating this claim. Other claims would be created to request adjudication against the other listed policies. An invariant is defined to enforce the following rule: Will have multiple occurrences on secondary / tertiary, etc. claims. Up to one occurrence, that of the ExplanationOfBenefit.insurer, will have a boolean value = 'True'","requirements":"To identify which coverage in the list is being used to adjudicate this claim.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.insurance.focal","min":1,"max":"1"},"type":[{"code":"boolean"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.insurance.coverage","path":"ExplanationOfBenefit.insurance.coverage","short":"Insurance information","definition":"Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.","comment":"Same as insurance.coverage.organization. Party responsible for reimbursing the provider. When focal = true, Coverage.payer--> Organization.identifier. When focal = false, EOB.insurance.coverage.display = [name of other carrier]","requirements":"Required to allow the adjudicator to locate the correct policy and history within their information system.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.insurance.coverage","min":1,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Coverage"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.insurance.preAuthRef","path":"ExplanationOfBenefit.insurance.preAuthRef","short":"Prior authorization reference number","definition":"Reference numbers previously provided by the insurer to the provider to be quoted on subsequent claims containing services or products related to the prior authorization.","comment":"This value is an alphanumeric string that may be provided over the phone, via text, via paper, or within a ClaimResponse resource and is not a FHIR Identifier.","requirements":"Providers must quote previously issued authorization reference numbers in order to obtain adjudication as previously advised on the Preauthorization.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.insurance.preAuthRef","min":0,"max":"*"},"type":[{"code":"string"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.accident","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Accident"}],"path":"ExplanationOfBenefit.accident","short":"Details of the event","definition":"Details of a accident which resulted in injuries which required the products and services listed in the claim.","requirements":"When healthcare products and services are accident related, benefits may be payable under accident provisions of policies, such as automotive, etc before they are payable under normal health insurance.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.accident","min":0,"max":"1"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.accident.id","path":"ExplanationOfBenefit.accident.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.accident.extension","path":"ExplanationOfBenefit.accident.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.accident.modifierExtension","path":"ExplanationOfBenefit.accident.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.accident.date","path":"ExplanationOfBenefit.accident.date","short":"When the incident occurred","definition":"Date of an accident event related to the products and services contained in the claim.","comment":"The date of the accident has to precede the dates of the products and services but within a reasonable timeframe.","requirements":"Required for audit purposes and adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.accident.date","min":0,"max":"1"},"type":[{"code":"date"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.accident.type","path":"ExplanationOfBenefit.accident.type","short":"The nature of the accident","definition":"The type or context of the accident event for the purposes of selection of potential insurance coverages and determination of coordination between insurers.","requirements":"Coverage may be dependant on the type of accident.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.accident.type","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"AccidentType"}],"strength":"extensible","description":"Type of accident: work place, auto, etc.","valueSet":"http://terminology.hl7.org/ValueSet/v3-ActIncidentCode"}},{"id":"ExplanationOfBenefit.accident.location[x]","path":"ExplanationOfBenefit.accident.location[x]","short":"Where the event occurred","definition":"The physical location of the accident event.","requirements":"Required for audit purposes and determination of applicable insurance liability.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.accident.location[x]","min":0,"max":"1"},"type":[{"code":"Address"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Location"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Item"}],"path":"ExplanationOfBenefit.item","short":"Product or service provided","definition":"A claim line. Either a simple (a product or service) or a 'group' of details which can also be a simple items or groups of sub-details.","requirements":"The items to be processed for adjudication.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.id","path":"ExplanationOfBenefit.item.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.extension","path":"ExplanationOfBenefit.item.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.modifierExtension","path":"ExplanationOfBenefit.item.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.sequence","path":"ExplanationOfBenefit.item.sequence","short":"Item instance identifier","definition":"A number to uniquely identify item entries.","comment":"Line identification number that represents the number assigned in a source system for identification and processing. (36)","requirements":"Necessary to provide a mechanism to link to items from within the claim and within the adjudication details of the ClaimResponse.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.careTeamSequence","path":"ExplanationOfBenefit.item.careTeamSequence","short":"Applicable care team members","definition":"Care team members related to this service or product.","requirements":"Need to identify the individuals and their roles in the provision of the product or service.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.careTeamSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.diagnosisSequence","path":"ExplanationOfBenefit.item.diagnosisSequence","short":"Applicable diagnoses","definition":"Diagnoses applicable for this service or product.","requirements":"Need to related the product or service to the associated diagnoses.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.diagnosisSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.procedureSequence","path":"ExplanationOfBenefit.item.procedureSequence","short":"Applicable procedures","definition":"Procedures applicable for this service or product.","requirements":"Need to provide any listed specific procedures to support the product or service being claimed.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.procedureSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.informationSequence","path":"ExplanationOfBenefit.item.informationSequence","short":"Applicable exception and supporting information","definition":"Exceptions, special conditions and supporting information applicable for this service or product.","requirements":"Need to reference the supporting information items that relate directly to this product or service.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.informationSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.revenue","path":"ExplanationOfBenefit.item.revenue","short":"Revenue or cost center code","definition":"The type of revenue or cost center providing the product and/or service.","comment":"Code used on the UB-04 (Form Locator 42) to identify a specific accommodation, ancillary service, or billing calculation related to the service being billed (86)","requirements":"Needed in the processing of institutional claims.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.revenue","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCRevenueCodes"}},{"id":"ExplanationOfBenefit.item.category","path":"ExplanationOfBenefit.item.category","short":"Benefit classification","definition":"Code to identify the general type of benefits under which products and services are provided.","comment":"Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.","requirements":"Needed in the processing of institutional claims as this allows the insurer to determine whether a facial X-Ray is for dental, orthopedic, or facial surgery purposes.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.category","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitCategory"}],"strength":"example","description":"Benefit categories such as: oral, medical, vision, oral-basic etc.","valueSet":"http://hl7.org/fhir/ValueSet/ex-benefitcategory"}},{"id":"ExplanationOfBenefit.item.productOrService","path":"ExplanationOfBenefit.item.productOrService","short":"Billing, service, product, or drug code","definition":"When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.","comment":"Medical procedure a patient received from a health care provider. Current coding methods include: CPT-4 and HCFA Common Procedure Coding System Level II - (HCPCSII). (40)","requirements":"Necessary to state what was provided or done.","alias":["Drug Code","Bill Code","Service Code"],"min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.productOrService","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSProcedureCodes"}},{"id":"ExplanationOfBenefit.item.modifier","path":"ExplanationOfBenefit.item.modifier","short":"Product or service billing modifiers","definition":"Item typification or modifiers codes to convey additional context for the product or service.","comment":"Modifier(s) for the procedure represented on this line. Identifies special circumstances related to the performance of the service. (41)","requirements":"To support inclusion of the item for adjudication or to charge an elevated fee.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.modifier","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSModifiers"}},{"id":"ExplanationOfBenefit.item.programCode","path":"ExplanationOfBenefit.item.programCode","short":"Program the product or service is provided under","definition":"Identifies the program under which this may be recovered.","comment":"For example: Neonatal program, child dental program or drug users recovery program.","requirements":"Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.programCode","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ProgramCode"}],"strength":"example","description":"Program specific reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/ex-program-code"}},{"id":"ExplanationOfBenefit.item.serviced[x]","path":"ExplanationOfBenefit.item.serviced[x]","short":"Date or dates of service or product delivery","definition":"The date or dates when the service or product was supplied, performed or completed.","requirements":"Needed to determine whether the service or product was provided during the term of the insurance coverage.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.serviced[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"w5","map":"FiveWs.done[x]"}]},{"id":"ExplanationOfBenefit.item.location[x]","path":"ExplanationOfBenefit.item.location[x]","short":"Place of service or where product was supplied","definition":"Where the product or service was provided.","requirements":"The location can alter whether the item was acceptable for insurance purposes or impact the determination of the benefit amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.location[x]","min":0,"max":"1"},"type":[{"code":"CodeableConcept"},{"code":"Address"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Location"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServicePlace"}],"strength":"example","description":"Place where the service is rendered.","valueSet":"http://hl7.org/fhir/ValueSet/service-place"},"mapping":[{"identity":"w5","map":"FiveWs.where[x]"}]},{"id":"ExplanationOfBenefit.item.quantity","path":"ExplanationOfBenefit.item.quantity","short":"Count of products or services","definition":"The number of repetitions of a service or product.","comment":"The quantity of units, times, days, visits, services, or treatments for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (42)","requirements":"Required when the product or service code does not convey the quantity provided.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.quantity","min":0,"max":"1"},"type":[{"code":"Quantity","profile":["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.unitPrice","path":"ExplanationOfBenefit.item.unitPrice","short":"Fee, charge or cost per item","definition":"If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.","requirements":"The amount charged to the patient by the provider for a single unit.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.unitPrice","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.factor","path":"ExplanationOfBenefit.item.factor","short":"Price scaling factor","definition":"A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.","comment":"To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).","requirements":"When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.factor","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.net","path":"ExplanationOfBenefit.item.net","short":"Total item cost","definition":"The quantity times the unit price for an additional service or product or charge.","comment":"For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.","requirements":"Provides the total amount claimed for the group (if a grouper) or the line item.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.net","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.udi","path":"ExplanationOfBenefit.item.udi","short":"Unique device identifier","definition":"Unique Device Identifiers associated with this line item.","requirements":"The UDI code allows the insurer to obtain device level information on the product supplied.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.udi","min":0,"max":"*"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Device"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.bodySite","path":"ExplanationOfBenefit.item.bodySite","short":"Anatomical location","definition":"Physical service site on the patient (limb, tooth, etc.).","comment":"For example: Providing a tooth code, allows an insurer to identify a provider performing a filling on a tooth that was previously removed.","requirements":"Allows insurer to validate specific procedures.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.bodySite","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"OralSites"}],"strength":"example","description":"The code for the teeth, quadrant, sextant and arch.","valueSet":"http://hl7.org/fhir/ValueSet/tooth"}},{"id":"ExplanationOfBenefit.item.subSite","path":"ExplanationOfBenefit.item.subSite","short":"Anatomical sub-location","definition":"A region or surface of the bodySite, e.g. limb region or tooth surface(s).","requirements":"Allows insurer to validate specific procedures.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.subSite","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Surface"}],"strength":"example","description":"The code for the tooth surface and surface combinations.","valueSet":"http://hl7.org/fhir/ValueSet/surface"}},{"id":"ExplanationOfBenefit.item.encounter","path":"ExplanationOfBenefit.item.encounter","short":"Encounters related to this billed item","definition":"A billed item may include goods or services provided in multiple encounters.","requirements":"Used in some jurisdictions to link clinical events to claim items.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.encounter","min":0,"max":"*"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Encounter"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.noteNumber","path":"ExplanationOfBenefit.item.noteNumber","short":"Applicable note numbers","definition":"The numbers associated with notes below which apply to the adjudication of this item.","comment":"References number of the associated processNote entered","requirements":"Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.noteNumber","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Adjudication"}],"path":"ExplanationOfBenefit.item.adjudication","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on value pattern","ordered":false,"rules":"closed"},"short":"Adjudication details","definition":"If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.","requirements":"The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"adjudication-has-amount-type-slice","severity":"error","human":"If Adjudication is present, it must have at least one adjudicationamounttype slice","expression":"(exists() implies where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication.id","path":"ExplanationOfBenefit.item.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication.extension","path":"ExplanationOfBenefit.item.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication.modifierExtension","path":"ExplanationOfBenefit.item.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.adjudication.category","path":"ExplanationOfBenefit.item.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator"}},{"id":"ExplanationOfBenefit.item.adjudication.reason","path":"ExplanationOfBenefit.item.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"For example, may indicate that the funds for this benefit type have been exhausted.","requirements":"To support understanding of variance from adjudication expectations.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"AdjudicationReason"}],"strength":"example","description":"Adjudication reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication-reason"}},{"id":"ExplanationOfBenefit.item.adjudication.amount","path":"ExplanationOfBenefit.item.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication.value","path":"ExplanationOfBenefit.item.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Adjudication"}],"path":"ExplanationOfBenefit.item.adjudication","sliceName":"adjudicationamounttype","short":"Adjudication details","definition":"If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.","comment":"Describes the various amount fields used when payers receive and adjudicate a claim. (187)","requirements":"The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.id","path":"ExplanationOfBenefit.item.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.extension","path":"ExplanationOfBenefit.item.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.modifierExtension","path":"ExplanationOfBenefit.item.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.category","path":"ExplanationOfBenefit.item.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication"}},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.reason","path":"ExplanationOfBenefit.item.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"For example, may indicate that the funds for this benefit type have been exhausted.","requirements":"To support understanding of variance from adjudication expectations.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"AdjudicationReason"}],"strength":"example","description":"Adjudication reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication-reason"}},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.amount","path":"ExplanationOfBenefit.item.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.value","path":"ExplanationOfBenefit.item.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:denialreason","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Adjudication"}],"path":"ExplanationOfBenefit.item.adjudication","sliceName":"denialreason","short":"Adjudication details","definition":"If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.","comment":"Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)","requirements":"The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.id","path":"ExplanationOfBenefit.item.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.extension","path":"ExplanationOfBenefit.item.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.modifierExtension","path":"ExplanationOfBenefit.item.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.category","path":"ExplanationOfBenefit.item.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator","code":"denialreason"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Adjudication"}],"strength":"example","description":"The adjudication codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication"}},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.reason","path":"ExplanationOfBenefit.item.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"For example, may indicate that the funds for this benefit type have been exhausted.","requirements":"To support understanding of variance from adjudication expectations.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes"}},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.amount","path":"ExplanationOfBenefit.item.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.value","path":"ExplanationOfBenefit.item.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Adjudication"}],"path":"ExplanationOfBenefit.item.adjudication","sliceName":"allowedunits","short":"Adjudication details","definition":"If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.","comment":"The quantity of units, times, days, visits, services, or treatments allowed for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (149)","requirements":"The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.id","path":"ExplanationOfBenefit.item.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.extension","path":"ExplanationOfBenefit.item.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.modifierExtension","path":"ExplanationOfBenefit.item.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.category","path":"ExplanationOfBenefit.item.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator","code":"allowedunits"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Adjudication"}],"strength":"example","description":"The adjudication codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication"}},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.reason","path":"ExplanationOfBenefit.item.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"For example, may indicate that the funds for this benefit type have been exhausted.","requirements":"To support understanding of variance from adjudication expectations.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"AdjudicationReason"}],"strength":"example","description":"Adjudication reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication-reason"}},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.amount","path":"ExplanationOfBenefit.item.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.value","path":"ExplanationOfBenefit.item.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Detail"}],"path":"ExplanationOfBenefit.item.detail","short":"Additional items","definition":"Second-tier of goods and services.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.id","path":"ExplanationOfBenefit.item.detail.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.detail.extension","path":"ExplanationOfBenefit.item.detail.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.detail.modifierExtension","path":"ExplanationOfBenefit.item.detail.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.detail.sequence","path":"ExplanationOfBenefit.item.detail.sequence","short":"Product or service provided","definition":"A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.","requirements":"The items to be processed for adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.revenue","path":"ExplanationOfBenefit.item.detail.revenue","short":"Revenue or cost center code","definition":"The type of revenue or cost center providing the product and/or service.","requirements":"Needed in the processing of institutional claims.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.revenue","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"RevenueCenter"}],"strength":"example","description":"Codes for the revenue or cost centers supplying the service and/or products.","valueSet":"http://hl7.org/fhir/ValueSet/ex-revenue-center"}},{"id":"ExplanationOfBenefit.item.detail.category","path":"ExplanationOfBenefit.item.detail.category","short":"Benefit classification","definition":"Code to identify the general type of benefits under which products and services are provided.","comment":"Examples include: Medical Care, Periodontics, Renal Dialysis, Vision Coverage.","requirements":"Needed in the processing of institutional claims as this allows the insurer to determine whether a facial X-Ray is for dental, orthopedic, or facial surgery purposes.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.category","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitCategory"}],"strength":"example","description":"Benefit categories such as: oral, medical, vision, oral-basic etc.","valueSet":"http://hl7.org/fhir/ValueSet/ex-benefitcategory"}},{"id":"ExplanationOfBenefit.item.detail.productOrService","path":"ExplanationOfBenefit.item.detail.productOrService","short":"Billing, service, product, or drug code","definition":"When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.","comment":"If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.","requirements":"Necessary to state what was provided or done.","alias":["Drug Code","Bill Code","Service Code"],"min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.productOrService","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServiceProduct"}],"strength":"example","description":"Allowable service and product codes.","valueSet":"http://hl7.org/fhir/ValueSet/service-uscls"}},{"id":"ExplanationOfBenefit.item.detail.modifier","path":"ExplanationOfBenefit.item.detail.modifier","short":"Service/Product billing modifiers","definition":"Item typification or modifiers codes to convey additional context for the product or service.","comment":"For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.","requirements":"To support inclusion of the item for adjudication or to charge an elevated fee.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.modifier","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Modifiers"}],"strength":"example","description":"Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.","valueSet":"http://hl7.org/fhir/ValueSet/claim-modifiers"}},{"id":"ExplanationOfBenefit.item.detail.programCode","path":"ExplanationOfBenefit.item.detail.programCode","short":"Program the product or service is provided under","definition":"Identifies the program under which this may be recovered.","comment":"For example: Neonatal program, child dental program or drug users recovery program.","requirements":"Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.programCode","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ProgramCode"}],"strength":"example","description":"Program specific reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/ex-program-code"}},{"id":"ExplanationOfBenefit.item.detail.quantity","path":"ExplanationOfBenefit.item.detail.quantity","short":"Count of products or services","definition":"The number of repetitions of a service or product.","requirements":"Required when the product or service code does not convey the quantity provided.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.quantity","min":0,"max":"1"},"type":[{"code":"Quantity","profile":["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.unitPrice","path":"ExplanationOfBenefit.item.detail.unitPrice","short":"Fee, charge or cost per item","definition":"If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.","requirements":"The amount charged to the patient by the provider for a single unit.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.unitPrice","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.factor","path":"ExplanationOfBenefit.item.detail.factor","short":"Price scaling factor","definition":"A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.","comment":"To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).","requirements":"When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.factor","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.net","path":"ExplanationOfBenefit.item.detail.net","short":"Total item cost","definition":"The quantity times the unit price for an additional service or product or charge.","comment":"For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.","requirements":"Provides the total amount claimed for the group (if a grouper) or the line item.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.net","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.udi","path":"ExplanationOfBenefit.item.detail.udi","short":"Unique device identifier","definition":"Unique Device Identifiers associated with this line item.","requirements":"The UDI code allows the insurer to obtain device level information on the product supplied.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.udi","min":0,"max":"*"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Device"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.noteNumber","path":"ExplanationOfBenefit.item.detail.noteNumber","short":"Applicable note numbers","definition":"The numbers associated with notes below which apply to the adjudication of this item.","requirements":"Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.noteNumber","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.adjudication","path":"ExplanationOfBenefit.item.detail.adjudication","short":"Detail level adjudication details","definition":"The adjudication results.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.adjudication","min":0,"max":"*"},"contentReference":"http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SubDetail"}],"path":"ExplanationOfBenefit.item.detail.subDetail","short":"Additional items","definition":"Third-tier of goods and services.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.subDetail","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.id","path":"ExplanationOfBenefit.item.detail.subDetail.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.detail.subDetail.extension","path":"ExplanationOfBenefit.item.detail.subDetail.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.detail.subDetail.modifierExtension","path":"ExplanationOfBenefit.item.detail.subDetail.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.detail.subDetail.sequence","path":"ExplanationOfBenefit.item.detail.subDetail.sequence","short":"Product or service provided","definition":"A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.","requirements":"The items to be processed for adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.revenue","path":"ExplanationOfBenefit.item.detail.subDetail.revenue","short":"Revenue or cost center code","definition":"The type of revenue or cost center providing the product and/or service.","requirements":"Needed in the processing of institutional claims.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.revenue","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"RevenueCenter"}],"strength":"example","description":"Codes for the revenue or cost centers supplying the service and/or products.","valueSet":"http://hl7.org/fhir/ValueSet/ex-revenue-center"}},{"id":"ExplanationOfBenefit.item.detail.subDetail.category","path":"ExplanationOfBenefit.item.detail.subDetail.category","short":"Benefit classification","definition":"Code to identify the general type of benefits under which products and services are provided.","comment":"Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.","requirements":"Needed in the processing of institutional claims as this allows the insurer to determine whether a facial X-Ray is for dental, orthopedic, or facial surgery purposes.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.category","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitCategory"}],"strength":"example","description":"Benefit categories such as: oral, medical, vision, oral-basic etc.","valueSet":"http://hl7.org/fhir/ValueSet/ex-benefitcategory"}},{"id":"ExplanationOfBenefit.item.detail.subDetail.productOrService","path":"ExplanationOfBenefit.item.detail.subDetail.productOrService","short":"Billing, service, product, or drug code","definition":"When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.","comment":"If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.","requirements":"Necessary to state what was provided or done.","alias":["Drug Code","Bill Code","Service Code"],"min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.productOrService","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServiceProduct"}],"strength":"example","description":"Allowable service and product codes.","valueSet":"http://hl7.org/fhir/ValueSet/service-uscls"}},{"id":"ExplanationOfBenefit.item.detail.subDetail.modifier","path":"ExplanationOfBenefit.item.detail.subDetail.modifier","short":"Service/Product billing modifiers","definition":"Item typification or modifiers codes to convey additional context for the product or service.","comment":"For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or outside of office hours.","requirements":"To support inclusion of the item for adjudication or to charge an elevated fee.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.modifier","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Modifiers"}],"strength":"example","description":"Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.","valueSet":"http://hl7.org/fhir/ValueSet/claim-modifiers"}},{"id":"ExplanationOfBenefit.item.detail.subDetail.programCode","path":"ExplanationOfBenefit.item.detail.subDetail.programCode","short":"Program the product or service is provided under","definition":"Identifies the program under which this may be recovered.","comment":"For example: Neonatal program, child dental program or drug users recovery program.","requirements":"Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.programCode","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ProgramCode"}],"strength":"example","description":"Program specific reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/ex-program-code"}},{"id":"ExplanationOfBenefit.item.detail.subDetail.quantity","path":"ExplanationOfBenefit.item.detail.subDetail.quantity","short":"Count of products or services","definition":"The number of repetitions of a service or product.","requirements":"Required when the product or service code does not convey the quantity provided.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.quantity","min":0,"max":"1"},"type":[{"code":"Quantity","profile":["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.unitPrice","path":"ExplanationOfBenefit.item.detail.subDetail.unitPrice","short":"Fee, charge or cost per item","definition":"If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.","requirements":"The amount charged to the patient by the provider for a single unit.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.unitPrice","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.factor","path":"ExplanationOfBenefit.item.detail.subDetail.factor","short":"Price scaling factor","definition":"A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.","comment":"To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).","requirements":"When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.factor","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.net","path":"ExplanationOfBenefit.item.detail.subDetail.net","short":"Total item cost","definition":"The quantity times the unit price for an additional service or product or charge.","comment":"For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.","requirements":"Provides the total amount claimed for the group (if a grouper) or the line item.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.net","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.udi","path":"ExplanationOfBenefit.item.detail.subDetail.udi","short":"Unique device identifier","definition":"Unique Device Identifiers associated with this line item.","requirements":"The UDI code allows the insurer to obtain device level information on the product supplied.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.udi","min":0,"max":"*"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Device"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.noteNumber","path":"ExplanationOfBenefit.item.detail.subDetail.noteNumber","short":"Applicable note numbers","definition":"The numbers associated with notes below which apply to the adjudication of this item.","requirements":"Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.noteNumber","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.adjudication","path":"ExplanationOfBenefit.item.detail.subDetail.adjudication","short":"Subdetail level adjudication details","definition":"The adjudication results.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.adjudication","min":0,"max":"*"},"contentReference":"http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"740;600"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"AddedItem"}],"path":"ExplanationOfBenefit.addItem","short":"Insurer added line items","definition":"The first-tier service adjudications for payor added product or service lines.","requirements":"Insurers may redefine the provided product or service or may package and/or decompose groups of products and services. The addItems allows the insurer to provide their line item list with linkage to the submitted items/details/sub-details. In a preauthorization the insurer may use the addItem structure to provide additional information on authorized products and services.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.id","path":"ExplanationOfBenefit.addItem.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.addItem.extension","path":"ExplanationOfBenefit.addItem.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.addItem.modifierExtension","path":"ExplanationOfBenefit.addItem.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.addItem.itemSequence","path":"ExplanationOfBenefit.addItem.itemSequence","short":"Item sequence number","definition":"Claim items which this service line is intended to replace.","requirements":"Provides references to the claim items.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.itemSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detailSequence","path":"ExplanationOfBenefit.addItem.detailSequence","short":"Detail sequence number","definition":"The sequence number of the details within the claim item which this line is intended to replace.","requirements":"Provides references to the claim details within the claim item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detailSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.subDetailSequence","path":"ExplanationOfBenefit.addItem.subDetailSequence","short":"Subdetail sequence number","definition":"The sequence number of the sub-details woithin the details within the claim item which this line is intended to replace.","requirements":"Provides references to the claim sub-details within the claim detail.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.subDetailSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.provider","path":"ExplanationOfBenefit.addItem.provider","short":"Authorized providers","definition":"The providers who are authorized for the services rendered to the patient.","requirements":"Insurer may provide authorization specifically to a restricted set of providers rather than an open authorization.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.provider","min":0,"max":"*"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/Organization"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"w5","map":"FiveWs.source"}]},{"id":"ExplanationOfBenefit.addItem.productOrService","path":"ExplanationOfBenefit.addItem.productOrService","short":"Billing, service, product, or drug code","definition":"When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.","comment":"If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.","requirements":"Necessary to state what was provided or done.","alias":["Drug Code","Bill Code","Service Code"],"min":1,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.productOrService","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServiceProduct"}],"strength":"example","description":"Allowable service and product codes.","valueSet":"http://hl7.org/fhir/ValueSet/service-uscls"}},{"id":"ExplanationOfBenefit.addItem.modifier","path":"ExplanationOfBenefit.addItem.modifier","short":"Service/Product billing modifiers","definition":"Item typification or modifiers codes to convey additional context for the product or service.","comment":"For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.","requirements":"To support inclusion of the item for adjudication or to charge an elevated fee.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.modifier","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Modifiers"}],"strength":"example","description":"Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.","valueSet":"http://hl7.org/fhir/ValueSet/claim-modifiers"}},{"id":"ExplanationOfBenefit.addItem.programCode","path":"ExplanationOfBenefit.addItem.programCode","short":"Program the product or service is provided under","definition":"Identifies the program under which this may be recovered.","comment":"For example: Neonatal program, child dental program or drug users recovery program.","requirements":"Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.programCode","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ProgramCode"}],"strength":"example","description":"Program specific reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/ex-program-code"}},{"id":"ExplanationOfBenefit.addItem.serviced[x]","path":"ExplanationOfBenefit.addItem.serviced[x]","short":"Date or dates of service or product delivery","definition":"The date or dates when the service or product was supplied, performed or completed.","requirements":"Needed to determine whether the service or product was provided during the term of the insurance coverage.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.serviced[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"w5","map":"FiveWs.done[x]"}]},{"id":"ExplanationOfBenefit.addItem.location[x]","path":"ExplanationOfBenefit.addItem.location[x]","short":"Place of service or where product was supplied","definition":"Where the product or service was provided.","requirements":"The location can alter whether the item was acceptable for insurance purposes or impact the determination of the benefit amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.location[x]","min":0,"max":"1"},"type":[{"code":"CodeableConcept"},{"code":"Address"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Location"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServicePlace"}],"strength":"example","description":"Place where the service is rendered.","valueSet":"http://hl7.org/fhir/ValueSet/service-place"},"mapping":[{"identity":"w5","map":"FiveWs.where[x]"}]},{"id":"ExplanationOfBenefit.addItem.quantity","path":"ExplanationOfBenefit.addItem.quantity","short":"Count of products or services","definition":"The number of repetitions of a service or product.","requirements":"Required when the product or service code does not convey the quantity provided.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.quantity","min":0,"max":"1"},"type":[{"code":"Quantity","profile":["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.unitPrice","path":"ExplanationOfBenefit.addItem.unitPrice","short":"Fee, charge or cost per item","definition":"If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.","requirements":"The amount charged to the patient by the provider for a single unit.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.unitPrice","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.factor","path":"ExplanationOfBenefit.addItem.factor","short":"Price scaling factor","definition":"A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.","comment":"To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).","requirements":"When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.factor","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.net","path":"ExplanationOfBenefit.addItem.net","short":"Total item cost","definition":"The quantity times the unit price for an additional service or product or charge.","comment":"For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.","requirements":"Provides the total amount claimed for the group (if a grouper) or the line item.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.net","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.bodySite","path":"ExplanationOfBenefit.addItem.bodySite","short":"Anatomical location","definition":"Physical service site on the patient (limb, tooth, etc.).","comment":"For example, providing a tooth code allows an insurer to identify a provider performing a filling on a tooth that was previously removed.","requirements":"Allows insurer to validate specific procedures.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.bodySite","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"OralSites"}],"strength":"example","description":"The code for the teeth, quadrant, sextant and arch.","valueSet":"http://hl7.org/fhir/ValueSet/tooth"}},{"id":"ExplanationOfBenefit.addItem.subSite","path":"ExplanationOfBenefit.addItem.subSite","short":"Anatomical sub-location","definition":"A region or surface of the bodySite, e.g. limb region or tooth surface(s).","requirements":"Allows insurer to validate specific procedures.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.subSite","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Surface"}],"strength":"example","description":"The code for the tooth surface and surface combinations.","valueSet":"http://hl7.org/fhir/ValueSet/surface"}},{"id":"ExplanationOfBenefit.addItem.noteNumber","path":"ExplanationOfBenefit.addItem.noteNumber","short":"Applicable note numbers","definition":"The numbers associated with notes below which apply to the adjudication of this item.","requirements":"Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.noteNumber","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.adjudication","path":"ExplanationOfBenefit.addItem.adjudication","short":"Added items adjudication","definition":"The adjudication results.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.adjudication","min":0,"max":"*"},"contentReference":"http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"740;600"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"AddedItemDetail"}],"path":"ExplanationOfBenefit.addItem.detail","short":"Insurer added line items","definition":"The second-tier service adjudications for payor added services.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.id","path":"ExplanationOfBenefit.addItem.detail.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.addItem.detail.extension","path":"ExplanationOfBenefit.addItem.detail.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.addItem.detail.modifierExtension","path":"ExplanationOfBenefit.addItem.detail.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.addItem.detail.productOrService","path":"ExplanationOfBenefit.addItem.detail.productOrService","short":"Billing, service, product, or drug code","definition":"When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.","comment":"If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.","requirements":"Necessary to state what was provided or done.","alias":["Drug Code","Bill Code","Service Code"],"min":1,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.productOrService","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServiceProduct"}],"strength":"example","description":"Allowable service and product codes.","valueSet":"http://hl7.org/fhir/ValueSet/service-uscls"}},{"id":"ExplanationOfBenefit.addItem.detail.modifier","path":"ExplanationOfBenefit.addItem.detail.modifier","short":"Service/Product billing modifiers","definition":"Item typification or modifiers codes to convey additional context for the product or service.","comment":"For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.","requirements":"To support inclusion of the item for adjudication or to charge an elevated fee.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.modifier","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Modifiers"}],"strength":"example","description":"Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.","valueSet":"http://hl7.org/fhir/ValueSet/claim-modifiers"}},{"id":"ExplanationOfBenefit.addItem.detail.quantity","path":"ExplanationOfBenefit.addItem.detail.quantity","short":"Count of products or services","definition":"The number of repetitions of a service or product.","requirements":"Required when the product or service code does not convey the quantity provided.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.quantity","min":0,"max":"1"},"type":[{"code":"Quantity","profile":["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.unitPrice","path":"ExplanationOfBenefit.addItem.detail.unitPrice","short":"Fee, charge or cost per item","definition":"If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.","requirements":"The amount charged to the patient by the provider for a single unit.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.unitPrice","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.factor","path":"ExplanationOfBenefit.addItem.detail.factor","short":"Price scaling factor","definition":"A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.","comment":"To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).","requirements":"When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.factor","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.net","path":"ExplanationOfBenefit.addItem.detail.net","short":"Total item cost","definition":"The quantity times the unit price for an additional service or product or charge.","comment":"For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.","requirements":"Provides the total amount claimed for the group (if a grouper) or the line item.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.net","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.noteNumber","path":"ExplanationOfBenefit.addItem.detail.noteNumber","short":"Applicable note numbers","definition":"The numbers associated with notes below which apply to the adjudication of this item.","requirements":"Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.noteNumber","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.adjudication","path":"ExplanationOfBenefit.addItem.detail.adjudication","short":"Added items adjudication","definition":"The adjudication results.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.adjudication","min":0,"max":"*"},"contentReference":"http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"740;600"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"AddedItemDetailSubDetail"}],"path":"ExplanationOfBenefit.addItem.detail.subDetail","short":"Insurer added line items","definition":"The third-tier service adjudications for payor added services.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.id","path":"ExplanationOfBenefit.addItem.detail.subDetail.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.extension","path":"ExplanationOfBenefit.addItem.detail.subDetail.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.modifierExtension","path":"ExplanationOfBenefit.addItem.detail.subDetail.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.productOrService","path":"ExplanationOfBenefit.addItem.detail.subDetail.productOrService","short":"Billing, service, product, or drug code","definition":"When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.","comment":"If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.","requirements":"Necessary to state what was provided or done.","alias":["Drug Code","Bill Code","Service Code"],"min":1,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.productOrService","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServiceProduct"}],"strength":"example","description":"Allowable service and product codes.","valueSet":"http://hl7.org/fhir/ValueSet/service-uscls"}},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.modifier","path":"ExplanationOfBenefit.addItem.detail.subDetail.modifier","short":"Service/Product billing modifiers","definition":"Item typification or modifiers codes to convey additional context for the product or service.","comment":"For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.","requirements":"To support inclusion of the item for adjudication or to charge an elevated fee.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.modifier","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Modifiers"}],"strength":"example","description":"Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.","valueSet":"http://hl7.org/fhir/ValueSet/claim-modifiers"}},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.quantity","path":"ExplanationOfBenefit.addItem.detail.subDetail.quantity","short":"Count of products or services","definition":"The number of repetitions of a service or product.","requirements":"Required when the product or service code does not convey the quantity provided.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.quantity","min":0,"max":"1"},"type":[{"code":"Quantity","profile":["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.unitPrice","path":"ExplanationOfBenefit.addItem.detail.subDetail.unitPrice","short":"Fee, charge or cost per item","definition":"If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.","requirements":"The amount charged to the patient by the provider for a single unit.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.unitPrice","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.factor","path":"ExplanationOfBenefit.addItem.detail.subDetail.factor","short":"Price scaling factor","definition":"A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.","comment":"To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).","requirements":"When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.factor","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.net","path":"ExplanationOfBenefit.addItem.detail.subDetail.net","short":"Total item cost","definition":"The quantity times the unit price for an additional service or product or charge.","comment":"For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.","requirements":"Provides the total amount claimed for the group (if a grouper) or the line item.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.net","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.noteNumber","path":"ExplanationOfBenefit.addItem.detail.subDetail.noteNumber","short":"Applicable note numbers","definition":"The numbers associated with notes below which apply to the adjudication of this item.","requirements":"Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.noteNumber","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.adjudication","path":"ExplanationOfBenefit.addItem.detail.subDetail.adjudication","short":"Added items adjudication","definition":"The adjudication results.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.adjudication","min":0,"max":"*"},"contentReference":"http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication","path":"ExplanationOfBenefit.adjudication","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on value pattern","ordered":false,"rules":"closed"},"short":"Header-level adjudication","definition":"The adjudication results which are presented at the header level rather than at the line-item or add-item levels.","requirements":"Some insurers will receive line-items but provide the adjudication only at a summary or header-level.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"adjudication-has-amount-type-slice","severity":"error","human":"If Adjudication is present, it must have at least one adjudicationamounttype slice","expression":"(exists() implies where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication.id","path":"ExplanationOfBenefit.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.adjudication.extension","path":"ExplanationOfBenefit.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.adjudication.modifierExtension","path":"ExplanationOfBenefit.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.adjudication.category","path":"ExplanationOfBenefit.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator"}},{"id":"ExplanationOfBenefit.adjudication.reason","path":"ExplanationOfBenefit.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"For example, may indicate that the funds for this benefit type have been exhausted.","requirements":"To support understanding of variance from adjudication expectations.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"AdjudicationReason"}],"strength":"example","description":"Adjudication reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication-reason"}},{"id":"ExplanationOfBenefit.adjudication.amount","path":"ExplanationOfBenefit.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication.value","path":"ExplanationOfBenefit.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype","path":"ExplanationOfBenefit.adjudication","sliceName":"adjudicationamounttype","short":"Header-level adjudication","definition":"The adjudication results which are presented at the header level rather than at the line-item or add-item levels.","comment":"Describes the various amount fields used when payers receive and adjudicate a claim. (187)","requirements":"Some insurers will receive line-items but provide the adjudication only at a summary or header-level.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.id","path":"ExplanationOfBenefit.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.extension","path":"ExplanationOfBenefit.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.modifierExtension","path":"ExplanationOfBenefit.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.category","path":"ExplanationOfBenefit.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication"}},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.reason","path":"ExplanationOfBenefit.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"For example, may indicate that the funds for this benefit type have been exhausted.","requirements":"To support understanding of variance from adjudication expectations.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"AdjudicationReason"}],"strength":"example","description":"Adjudication reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication-reason"}},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.amount","path":"ExplanationOfBenefit.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.value","path":"ExplanationOfBenefit.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication:denialreason","path":"ExplanationOfBenefit.adjudication","sliceName":"denialreason","short":"Header-level adjudication","definition":"The adjudication results which are presented at the header level rather than at the line-item or add-item levels.","comment":"Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)","requirements":"Some insurers will receive line-items but provide the adjudication only at a summary or header-level.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication:denialreason.id","path":"ExplanationOfBenefit.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.adjudication:denialreason.extension","path":"ExplanationOfBenefit.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.adjudication:denialreason.modifierExtension","path":"ExplanationOfBenefit.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.adjudication:denialreason.category","path":"ExplanationOfBenefit.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator","code":"denialreason"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Adjudication"}],"strength":"example","description":"The adjudication codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication"}},{"id":"ExplanationOfBenefit.adjudication:denialreason.reason","path":"ExplanationOfBenefit.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)","requirements":"To support understanding of variance from adjudication expectations.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes"}},{"id":"ExplanationOfBenefit.adjudication:denialreason.amount","path":"ExplanationOfBenefit.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication:denialreason.value","path":"ExplanationOfBenefit.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.total","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"'360;620"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Total"}],"path":"ExplanationOfBenefit.total","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on value pattern","ordered":false,"rules":"open"},"short":"Adjudication totals","definition":"Categorized monetary totals for the adjudication.","comment":"Totals for amounts submitted, co-pays, benefits payable etc.","requirements":"To provide the requestor with financial totals by category for the adjudication.","min":1,"max":"*","base":{"path":"ExplanationOfBenefit.total","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.total.id","path":"ExplanationOfBenefit.total.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.total.extension","path":"ExplanationOfBenefit.total.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.total.modifierExtension","path":"ExplanationOfBenefit.total.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.total.category","path":"ExplanationOfBenefit.total.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to convey the type of total provided.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.total.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBTotalCategoryDiscriminator"}},{"id":"ExplanationOfBenefit.total.amount","path":"ExplanationOfBenefit.total.amount","short":"Financial total for the category","definition":"Monetary total amount associated with the category.","comment":"Total amount for each category (i.e., submitted, allowed, etc.) (148)","requirements":"Needed to convey the total monetary amount.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.total.amount","min":1,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.total:adjudicationamounttype","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"'360;620"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Total"}],"path":"ExplanationOfBenefit.total","sliceName":"adjudicationamounttype","short":"Adjudication totals","definition":"Categorized monetary totals for the adjudication.","comment":"Describes the various amount fields used when payers receive and adjudicate a claim. (187)","requirements":"To provide the requestor with financial totals by category for the adjudication.","min":1,"max":"*","base":{"path":"ExplanationOfBenefit.total","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.id","path":"ExplanationOfBenefit.total.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.extension","path":"ExplanationOfBenefit.total.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.modifierExtension","path":"ExplanationOfBenefit.total.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.category","path":"ExplanationOfBenefit.total.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to convey the type of total provided.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.total.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication"}},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.amount","path":"ExplanationOfBenefit.total.amount","short":"Financial total for the category","definition":"Monetary total amount associated with the category.","requirements":"Needed to convey the total monetary amount.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.total.amount","min":1,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.total:inoutnetwork","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"'360;620"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Total"}],"path":"ExplanationOfBenefit.total","sliceName":"inoutnetwork","short":"Adjudication totals","definition":"Categorized monetary totals for the adjudication.","comment":"Indicates the in network or out of network payment status of the claim. (142)","requirements":"To provide the requestor with financial totals by category for the adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.total","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.total:inoutnetwork.id","path":"ExplanationOfBenefit.total.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.total:inoutnetwork.extension","path":"ExplanationOfBenefit.total.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.total:inoutnetwork.modifierExtension","path":"ExplanationOfBenefit.total.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.total:inoutnetwork.category","path":"ExplanationOfBenefit.total.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to convey the type of total provided.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.total.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerBenefitPaymentStatus"}},{"id":"ExplanationOfBenefit.total:inoutnetwork.amount","path":"ExplanationOfBenefit.total.amount","short":"Financial total for the category","definition":"Monetary total amount associated with the category.","requirements":"Needed to convey the total monetary amount.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.total.amount","min":1,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.payment","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"360;650"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Payment"}],"path":"ExplanationOfBenefit.payment","short":"Payment Details","definition":"Payment details for the adjudication of the claim.","requirements":"Needed to convey references to the financial instrument that has been used if payment has been made.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment","min":0,"max":"1"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.payment.id","path":"ExplanationOfBenefit.payment.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.payment.extension","path":"ExplanationOfBenefit.payment.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.payment.modifierExtension","path":"ExplanationOfBenefit.payment.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.payment.type","path":"ExplanationOfBenefit.payment.type","short":"Partial or complete payment","definition":"Whether this represents partial or complete payment of the benefits payable.","comment":"Indicates whether the claim was paid or denied. (91)","requirements":"To advise the requestor when the insurer believes all payments to have been completed.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment.type","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerClaimPaymentStatusCode"}},{"id":"ExplanationOfBenefit.payment.adjustment","path":"ExplanationOfBenefit.payment.adjustment","short":"Payment adjustment for non-claim issues","definition":"Total amount of all adjustments to this payment included in this transaction which are not related to this claim's adjudication.","comment":"Insurers will deduct amounts owing from the provider (adjustment), such as a prior overpayment, from the amount owing to the provider (benefits payable) when payment is made to the provider.","requirements":"To advise the requestor of adjustments applied to the payment.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment.adjustment","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.payment.adjustmentReason","path":"ExplanationOfBenefit.payment.adjustmentReason","short":"Explanation for the variance","definition":"Reason for the payment adjustment.","requirements":"Needed to clarify the monetary adjustment.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment.adjustmentReason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"PaymentAdjustmentReason"}],"strength":"example","description":"Payment Adjustment reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/payment-adjustment-reason"}},{"id":"ExplanationOfBenefit.payment.date","path":"ExplanationOfBenefit.payment.date","short":"Expected date of payment","definition":"Estimated date the payment will be issued or the actual issue date of payment.","comment":"The date the claim was paid. (107)","requirements":"To advise the payee when payment can be expected.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment.date","min":0,"max":"1"},"type":[{"code":"date"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.payment.amount","path":"ExplanationOfBenefit.payment.amount","short":"Payable amount after adjustment","definition":"Benefits payable less any payment adjustment.","requirements":"Needed to provide the actual payment amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.payment.identifier","path":"ExplanationOfBenefit.payment.identifier","short":"Business identifier for the payment","definition":"Issuer's unique identifier for the payment instrument.","comment":"For example: EFT number or check number.","requirements":"Enable the receiver to reconcile when payment received.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment.identifier","min":0,"max":"1"},"type":[{"code":"Identifier"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.formCode","path":"ExplanationOfBenefit.formCode","short":"Printed form identifier","definition":"A code for the form to be used for printing the content.","comment":"May be needed to identify specific jurisdictional forms.","requirements":"Needed to specify the specific form used for producing output for this response.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.formCode","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Forms"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"example","description":"The forms codes.","valueSet":"http://hl7.org/fhir/ValueSet/forms"}},{"id":"ExplanationOfBenefit.form","path":"ExplanationOfBenefit.form","short":"Printed reference or actual form","definition":"The actual form, by reference or inclusion, for printing the content or an EOB.","comment":"Needed to permit insurers to include the actual form.","requirements":"Needed to include the specific form used for producing output for this response.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.form","min":0,"max":"1"},"type":[{"code":"Attachment"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.processNote","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Note"}],"path":"ExplanationOfBenefit.processNote","short":"Note concerning adjudication","definition":"A note that describes or explains adjudication results in a human readable form.","requirements":"Provides the insurer specific textual explanations associated with the processing.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.processNote","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.processNote.id","path":"ExplanationOfBenefit.processNote.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.processNote.extension","path":"ExplanationOfBenefit.processNote.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.processNote.modifierExtension","path":"ExplanationOfBenefit.processNote.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.processNote.number","path":"ExplanationOfBenefit.processNote.number","short":"Note instance identifier","definition":"A number to uniquely identify a note entry.","requirements":"Necessary to provide a mechanism to link from adjudications.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.processNote.number","min":0,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.processNote.type","path":"ExplanationOfBenefit.processNote.type","short":"display | print | printoper","definition":"The business purpose of the note text.","requirements":"To convey the expectation for when the text is used.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.processNote.type","min":0,"max":"1"},"type":[{"code":"code"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"NoteType"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"required","description":"The presentation types of notes.","valueSet":"http://hl7.org/fhir/ValueSet/note-type|4.0.1"}},{"id":"ExplanationOfBenefit.processNote.text","path":"ExplanationOfBenefit.processNote.text","short":"Note explanatory text","definition":"The explanation or description associated with the processing.","comment":"Payment denial explanation to a member, typically goes on the EOB when the payment is denied or disallowed (181)","requirements":"Required to provide human readable explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.processNote.text","min":0,"max":"1"},"type":[{"code":"string"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.processNote.language","path":"ExplanationOfBenefit.processNote.language","short":"Language of the text","definition":"A code to define the language used in the text of the note.","comment":"Only required if the language is different from the resource language.","requirements":"Note text may vary from the resource defined language.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.processNote.language","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-maxValueSet","valueCanonical":"http://hl7.org/fhir/ValueSet/all-languages"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Language"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"preferred","description":"A human language.","valueSet":"http://hl7.org/fhir/ValueSet/languages"}},{"id":"ExplanationOfBenefit.benefitPeriod","path":"ExplanationOfBenefit.benefitPeriod","short":"When the benefits are applicable","definition":"The term of the benefits documented in this response.","comment":"Not applicable when use=claim.","requirements":"Needed as coverages may be multi-year while benefits tend to be annual therefore a separate expression of the benefit period is needed.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitPeriod","min":0,"max":"1"},"type":[{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"BenefitBalance"}],"path":"ExplanationOfBenefit.benefitBalance","short":"Balance by Benefit Category","definition":"Balance by Benefit Category.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.benefitBalance","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance.id","path":"ExplanationOfBenefit.benefitBalance.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.benefitBalance.extension","path":"ExplanationOfBenefit.benefitBalance.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.benefitBalance.modifierExtension","path":"ExplanationOfBenefit.benefitBalance.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.benefitBalance.category","path":"ExplanationOfBenefit.benefitBalance.category","short":"Benefit classification","definition":"Code to identify the general type of benefits under which products and services are provided.","comment":"Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.","requirements":"Needed to convey the category of service or product for which eligibility is sought.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitCategory"}],"strength":"example","description":"Benefit categories such as: oral, medical, vision, oral-basic etc.","valueSet":"http://hl7.org/fhir/ValueSet/ex-benefitcategory"}},{"id":"ExplanationOfBenefit.benefitBalance.excluded","path":"ExplanationOfBenefit.benefitBalance.excluded","short":"Excluded from the plan","definition":"True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.","requirements":"Needed to identify items that are specifically excluded from the coverage.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.excluded","min":0,"max":"1"},"type":[{"code":"boolean"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance.name","path":"ExplanationOfBenefit.benefitBalance.name","short":"Short name for the benefit","definition":"A short name or tag for the benefit.","comment":"For example: MED01, or DENT2.","requirements":"Required to align with other plan names.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.name","min":0,"max":"1"},"type":[{"code":"string"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance.description","path":"ExplanationOfBenefit.benefitBalance.description","short":"Description of the benefit or services covered","definition":"A richer description of the benefit or services covered.","comment":"For example, 'DENT2 covers 100% of basic, 50% of major but excludes Ortho, Implants and Cosmetic services'.","requirements":"Needed for human readable reference.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.description","min":0,"max":"1"},"type":[{"code":"string"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance.network","path":"ExplanationOfBenefit.benefitBalance.network","short":"In or out of network","definition":"Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.","requirements":"Needed as in or out of network providers are treated differently under the coverage.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.network","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitNetwork"}],"strength":"example","description":"Code to classify in or out of network services.","valueSet":"http://hl7.org/fhir/ValueSet/benefit-network"}},{"id":"ExplanationOfBenefit.benefitBalance.unit","path":"ExplanationOfBenefit.benefitBalance.unit","short":"Individual or family","definition":"Indicates if the benefits apply to an individual or to the family.","requirements":"Needed for the understanding of the benefits.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.unit","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitUnit"}],"strength":"example","description":"Unit covered/serviced - individual or family.","valueSet":"http://hl7.org/fhir/ValueSet/benefit-unit"}},{"id":"ExplanationOfBenefit.benefitBalance.term","path":"ExplanationOfBenefit.benefitBalance.term","short":"Annual or lifetime","definition":"The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.","requirements":"Needed for the understanding of the benefits.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.term","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitTerm"}],"strength":"example","description":"Coverage unit - annual, lifetime.","valueSet":"http://hl7.org/fhir/ValueSet/benefit-term"}},{"id":"ExplanationOfBenefit.benefitBalance.financial","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Benefit"}],"path":"ExplanationOfBenefit.benefitBalance.financial","short":"Benefit Summary","definition":"Benefits Used to date.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.benefitBalance.financial","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance.financial.id","path":"ExplanationOfBenefit.benefitBalance.financial.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.benefitBalance.financial.extension","path":"ExplanationOfBenefit.benefitBalance.financial.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.benefitBalance.financial.modifierExtension","path":"ExplanationOfBenefit.benefitBalance.financial.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.benefitBalance.financial.type","path":"ExplanationOfBenefit.benefitBalance.financial.type","short":"Benefit classification","definition":"Classification of benefit being provided.","comment":"For example: deductible, visits, benefit amount.","requirements":"Needed to convey the nature of the benefit.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.financial.type","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitType"}],"strength":"example","description":"Deductable, visits, co-pay, etc.","valueSet":"http://hl7.org/fhir/ValueSet/benefit-type"}},{"id":"ExplanationOfBenefit.benefitBalance.financial.allowed[x]","path":"ExplanationOfBenefit.benefitBalance.financial.allowed[x]","short":"Benefits allowed","definition":"The quantity of the benefit which is permitted under the coverage.","requirements":"Needed to convey the benefits offered under the coverage.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.financial.allowed[x]","min":0,"max":"1"},"type":[{"code":"unsignedInt"},{"code":"string"},{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance.financial.used[x]","path":"ExplanationOfBenefit.benefitBalance.financial.used[x]","short":"Benefits used","definition":"The quantity of the benefit which have been consumed to date.","requirements":"Needed to convey the benefits consumed to date.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.financial.used[x]","min":0,"max":"1"},"type":[{"code":"unsignedInt"},{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false}]},"differential":{"element":[{"id":"ExplanationOfBenefit","path":"ExplanationOfBenefit","constraint":[{"key":"dom-2","severity":"error","human":"If the resource is contained in another resource, it SHALL NOT contain nested Resources","expression":"contained.contained.empty()","xpath":"not(parent::f:contained and f:contained)","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"dom-3","severity":"error","human":"If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource","expression":"contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()","xpath":"not(exists(for $id in f:contained/*/f:id/@value return $contained[not(parent::*/descendant::f:reference/@value=concat('#', $contained/*/id/@value) or descendant::f:reference[@value='#'])]))","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"dom-4","severity":"error","human":"If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated","expression":"contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()","xpath":"not(exists(f:contained/*/f:meta/f:versionId)) and not(exists(f:contained/*/f:meta/f:lastUpdated))","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"dom-5","severity":"error","human":"If a resource is contained in another resource, it SHALL NOT have a security label","expression":"contained.meta.security.empty()","xpath":"not(exists(f:contained/*/f:meta/f:security))","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice","valueBoolean":true},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice-explanation","valueMarkdown":"When a resource has no narrative, only systems that fully understand the data can display the resource to a human safely. Including a human readable representation in the resource makes for a much more robust eco-system and cheaper handling of resources by intermediary systems. Some ecosystems restrict distribution of resources to only those systems that do fully understand the resources, and as a consequence implementers may believe that the narrative is superfluous. However experience shows that such eco-systems often open up to new participants over time."}],"key":"dom-6","severity":"warning","human":"A resource should have narrative for robust management","expression":"text.`div`.exists()","xpath":"exists(f:text/h:div)","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"EOB-institutional-item-or-header-adjudication","severity":"error","human":"Institutional EOB: Should have adjudication at the item or header level, but not both","expression":"(adjudication.exists() != item.adjudication.exists())","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional"}]},{"id":"ExplanationOfBenefit.type","path":"ExplanationOfBenefit.type","patternCodeableConcept":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/claim-type","code":"institutional"}]}},{"id":"ExplanationOfBenefit.billablePeriod","path":"ExplanationOfBenefit.billablePeriod","min":1},{"id":"ExplanationOfBenefit.billablePeriod.start","path":"ExplanationOfBenefit.billablePeriod.start","mustSupport":true},{"id":"ExplanationOfBenefit.billablePeriod.end","path":"ExplanationOfBenefit.billablePeriod.end","mustSupport":true},{"id":"ExplanationOfBenefit.created","path":"ExplanationOfBenefit.created","mustSupport":true},{"id":"ExplanationOfBenefit.provider","path":"ExplanationOfBenefit.provider","type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization"]}]},{"id":"ExplanationOfBenefit.careTeam","path":"ExplanationOfBenefit.careTeam","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"EOB-inst-careTeam-practitioner","severity":"error","human":"Institutional EOB: Careteam roles refer to a practitioner","expression":"(\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists() implies\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists().provider.all(resolve() is Practitioner)\n)","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional"},{"key":"EOB-inst-careTeam-organization","severity":"error","human":"Institutional EOB: Careteam roles refer to an organization","expression":"(\nrole.where(coding.where(code in ('performing' )).exists()).exists() implies\nrole.where(coding.where(code in ('performing' )).exists()).exists().provider.all(resolve() is Organization)\n)","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional"}]},{"id":"ExplanationOfBenefit.careTeam.role","path":"ExplanationOfBenefit.careTeam.role","min":1,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimInstitutionalCareTeamRole"}},{"id":"ExplanationOfBenefit.supportingInfo","path":"ExplanationOfBenefit.supportingInfo","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on $this pattern","ordered":false,"rules":"open"},"min":1},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus","path":"ExplanationOfBenefit.supportingInfo","sliceName":"billingnetworkcontractingstatus","comment":"Indicates that the Billing Provider has a contract with the Plan (regardless of the network) as of the effective date of service or admission. (101)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"billingnetworkcontractingstatus"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.code","path":"ExplanationOfBenefit.supportingInfo.code","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerProviderContractingStatus"}},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod","path":"ExplanationOfBenefit.supportingInfo","sliceName":"admissionperiod","comment":"The Period.start date corresponds with the date the beneficiary was admitted to a facility and the onset of services. May precede the Statement From Date if this claim is for a beneficiary who has been continuously under care. The Period.end date corresponds with the date beneficiary was discharged from the facility, or died. Matches the final Statement Thru Date. When there is a discharge date, the Patient Discharge Status Code indicates the final disposition of the patient after discharge. (18, 19)","min":1,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"admissionperiod"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","slicing":{"discriminator":[{"type":"type","path":"$this"}],"ordered":false,"rules":"open"},"min":1},{"id":"ExplanationOfBenefit.supportingInfo:admissionperiod.timingPeriod","path":"ExplanationOfBenefit.supportingInfo.timingPeriod","min":1,"max":"1","type":[{"code":"Period"}],"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate","path":"ExplanationOfBenefit.supportingInfo","sliceName":"clmrecvddate","comment":"The date the claim was received by the payer (88)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"clmrecvddate"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":1,"type":[{"code":"date"}],"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill","path":"ExplanationOfBenefit.supportingInfo","sliceName":"typeofbill","comment":"UB04 (Form Locator 4) type of bill code provides specific information for payer purposes. The first digit of the three-digit number denotes the type of institution, the second digit classifies the type of care being billed, and the third digit identifies the frequency of the bill for a specific course of treatment or inpatient confinement. (17)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"typeofbill"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.code","path":"ExplanationOfBenefit.supportingInfo.code","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCTypeOfBill"}},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin","path":"ExplanationOfBenefit.supportingInfo","sliceName":"pointoforigin","comment":"Identifies the place where the patient was identified as needing admission to an institution. This is a two position code mapped from the standard values for the UB-04 Source of Admission code (FL-15). (13)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"pointoforigin"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.code","path":"ExplanationOfBenefit.supportingInfo.code","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPointOfOriginForAdmissionOrVisit"}},{"id":"ExplanationOfBenefit.supportingInfo:admtype","path":"ExplanationOfBenefit.supportingInfo","sliceName":"admtype","comment":"Priority of the admission. Information located on (UB04 Form Locator 14). For example, an admission type of elective indicates that the patient's condition permitted time for medical services to be scheduled. (14)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:admtype.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"admtype"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:admtype.code","path":"ExplanationOfBenefit.supportingInfo.code","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPriorityTypeOfAdmissionOrVisit"}},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status","path":"ExplanationOfBenefit.supportingInfo","sliceName":"discharge-status","comment":"Patient’s status as of the discharge date for a facility stay. Information located on UB04. (Form Locator 17). (117)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"discharge-status"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.code","path":"ExplanationOfBenefit.supportingInfo.code","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPatientDischargeStatus"}},{"id":"ExplanationOfBenefit.supportingInfo:drg","path":"ExplanationOfBenefit.supportingInfo","sliceName":"drg","comment":"Claim diagnosis related group (DRG). DRGs require the DRG system; i.e., MS-DRG / AP-DRG / APR-DRG, the DRG version and the code value (32, 33. 113)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:drg.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"drg"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:drg.code","path":"ExplanationOfBenefit.supportingInfo.code","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/CMSMS3MAPAPRDRG"}},{"id":"ExplanationOfBenefit.diagnosis","path":"ExplanationOfBenefit.diagnosis","comment":"Diagnosis codes describe an individual's disease or medical condition. (6, 7, 8, 21, 22, 23, 30)","min":1,"mustSupport":true},{"id":"ExplanationOfBenefit.diagnosis.sequence","path":"ExplanationOfBenefit.diagnosis.sequence","comment":"Diagnosis.sequence values do not necessarily indiate any order in which the diagnosis was reported or identified. client app implementations should not assign any significance to the sequence values. client app implementations should use the values of diagnosis.type to identify primary, secondary, etc."},{"id":"ExplanationOfBenefit.diagnosis.diagnosis[x]","path":"ExplanationOfBenefit.diagnosis.diagnosis[x]","type":[{"code":"CodeableConcept"}],"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/CDCICD910CMDiagnosisCodes"}},{"id":"ExplanationOfBenefit.diagnosis.type","path":"ExplanationOfBenefit.diagnosis.type","comment":"Indicates if the inpatient institutional diagnosis is admitting, principal, other or an external cause of injury. (21, 22, 23)","min":1,"max":"1","mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimInpatientInstitutionalDiagnosisType"}},{"id":"ExplanationOfBenefit.diagnosis.onAdmission","path":"ExplanationOfBenefit.diagnosis.onAdmission","comment":"Used to capture whether a diagnosis was present at time of a patient's admission. (28)","mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPresentOnAdmission"}},{"id":"ExplanationOfBenefit.procedure","path":"ExplanationOfBenefit.procedure","comment":"Medical procedure a patient received during inpatient stay. Current coding methods include: International Classification of Diseases Surgical Procedures (ICD-9). Information located on UB04 (Form Locator 74). (25, 27, 10, 12)","mustSupport":true},{"id":"ExplanationOfBenefit.procedure.sequence","path":"ExplanationOfBenefit.procedure.sequence","comment":" procedure.sequence values do not necessarily indiate any order in which the procedure occurred. client app implementations should not assign any significance to the sequence values. client app implementations should use the values of procedure.type to identify primary and secondary procedures"},{"id":"ExplanationOfBenefit.procedure.type","path":"ExplanationOfBenefit.procedure.type","comment":"Indicates if the inpatient institutional procedure (ICD-PCS) is the principal procedure or another procedure. (186)","min":1,"max":"1","mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimProcedureType"}},{"id":"ExplanationOfBenefit.procedure.date","path":"ExplanationOfBenefit.procedure.date","mustSupport":true},{"id":"ExplanationOfBenefit.procedure.procedure[x]","path":"ExplanationOfBenefit.procedure.procedure[x]","type":[{"code":"CodeableConcept"}],"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/CMSICD910PCSProcedureCodes"}},{"id":"ExplanationOfBenefit.insurance","path":"ExplanationOfBenefit.insurance","max":"1"},{"id":"ExplanationOfBenefit.item.revenue","path":"ExplanationOfBenefit.item.revenue","comment":"Code used on the UB-04 (Form Locator 42) to identify a specific accommodation, ancillary service, or billing calculation related to the service being billed (86)","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCRevenueCodes"}},{"id":"ExplanationOfBenefit.item.productOrService","path":"ExplanationOfBenefit.item.productOrService","comment":"Medical procedure a patient received from a health care provider. Current coding methods include: CPT-4 and HCFA Common Procedure Coding System Level II - (HCPCSII). (40)","mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSProcedureCodes"}},{"id":"ExplanationOfBenefit.item.modifier","path":"ExplanationOfBenefit.item.modifier","comment":"Modifier(s) for the procedure represented on this line. Identifies special circumstances related to the performance of the service. (41)","mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSModifiers"}},{"id":"ExplanationOfBenefit.item.quantity","path":"ExplanationOfBenefit.item.quantity","comment":"The quantity of units, times, days, visits, services, or treatments for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (42)","mustSupport":true},{"id":"ExplanationOfBenefit.item.adjudication","path":"ExplanationOfBenefit.item.adjudication","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on value pattern","ordered":false,"rules":"closed"},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"adjudication-has-amount-type-slice","severity":"error","human":"If Adjudication is present, it must have at least one adjudicationamounttype slice","expression":"(exists() implies where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional"}],"mustSupport":true},{"id":"ExplanationOfBenefit.item.adjudication.category","path":"ExplanationOfBenefit.item.adjudication.category","binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator"}},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype","path":"ExplanationOfBenefit.item.adjudication","sliceName":"adjudicationamounttype","comment":"Describes the various amount fields used when payers receive and adjudicate a claim. (187)","min":0,"max":"*","mustSupport":true},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.category","path":"ExplanationOfBenefit.item.adjudication.category","binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication"}},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.amount","path":"ExplanationOfBenefit.item.adjudication.amount","mustSupport":true},{"id":"ExplanationOfBenefit.item.adjudication:denialreason","path":"ExplanationOfBenefit.item.adjudication","sliceName":"denialreason","comment":"Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)","min":0,"max":"*","mustSupport":true},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.category","path":"ExplanationOfBenefit.item.adjudication.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator","code":"denialreason"}]}},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.reason","path":"ExplanationOfBenefit.item.adjudication.reason","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes"}},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits","path":"ExplanationOfBenefit.item.adjudication","sliceName":"allowedunits","comment":"The quantity of units, times, days, visits, services, or treatments allowed for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (149)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.category","path":"ExplanationOfBenefit.item.adjudication.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator","code":"allowedunits"}]}},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.value","path":"ExplanationOfBenefit.item.adjudication.value","mustSupport":true},{"id":"ExplanationOfBenefit.adjudication","path":"ExplanationOfBenefit.adjudication","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on value pattern","ordered":false,"rules":"closed"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"adjudication-has-amount-type-slice","severity":"error","human":"If Adjudication is present, it must have at least one adjudicationamounttype slice","expression":"(exists() implies where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional"}],"mustSupport":true},{"id":"ExplanationOfBenefit.adjudication.category","path":"ExplanationOfBenefit.adjudication.category","mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator"}},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype","path":"ExplanationOfBenefit.adjudication","sliceName":"adjudicationamounttype","comment":"Describes the various amount fields used when payers receive and adjudicate a claim. (187)","min":0,"max":"*","mustSupport":true},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.category","path":"ExplanationOfBenefit.adjudication.category","binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication"}},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.amount","path":"ExplanationOfBenefit.adjudication.amount","min":1},{"id":"ExplanationOfBenefit.adjudication:denialreason","path":"ExplanationOfBenefit.adjudication","sliceName":"denialreason","comment":"Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)","min":0,"max":"*","mustSupport":true},{"id":"ExplanationOfBenefit.adjudication:denialreason.category","path":"ExplanationOfBenefit.adjudication.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator","code":"denialreason"}]}},{"id":"ExplanationOfBenefit.adjudication:denialreason.reason","path":"ExplanationOfBenefit.adjudication.reason","comment":"Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)","mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes"}},{"id":"ExplanationOfBenefit.total","path":"ExplanationOfBenefit.total","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on value pattern","ordered":false,"rules":"open"}},{"id":"ExplanationOfBenefit.total.category","path":"ExplanationOfBenefit.total.category","mustSupport":true,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBTotalCategoryDiscriminator"}},{"id":"ExplanationOfBenefit.total.amount","path":"ExplanationOfBenefit.total.amount","comment":"Total amount for each category (i.e., submitted, allowed, etc.) (148)"},{"id":"ExplanationOfBenefit.total:adjudicationamounttype","path":"ExplanationOfBenefit.total","sliceName":"adjudicationamounttype","comment":"Describes the various amount fields used when payers receive and adjudicate a claim. (187)","min":1,"max":"*","mustSupport":true},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.category","path":"ExplanationOfBenefit.total.category","binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication"}},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.amount","path":"ExplanationOfBenefit.total.amount","mustSupport":true},{"id":"ExplanationOfBenefit.total:inoutnetwork","path":"ExplanationOfBenefit.total","sliceName":"inoutnetwork","comment":"Indicates the in network or out of network payment status of the claim. (142)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.total:inoutnetwork.category","path":"ExplanationOfBenefit.total.category","binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerBenefitPaymentStatus"}},{"id":"ExplanationOfBenefit.payment.date","path":"ExplanationOfBenefit.payment.date","mustSupport":true},{"id":"ExplanationOfBenefit.processNote.text","path":"ExplanationOfBenefit.processNote.text","mustSupport":true}]}} \ No newline at end of file +{ + "resourceType": "StructureDefinition", + "id": "C4BB-ExplanationOfBenefit-Inpatient-Institutional", + "text": { + "status": "extensions", + "div": "
    \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
    NameFlagsCard.TypeDescription & Constraints\"doco\"
    \".\"\".\" ExplanationOfBenefit I0..*C4BBExplanationOfBenefitExplanation of Benefit resource
    EOB-institutional-item-or-header-adjudication: Institutional EOB: Should have adjudication at the item or header level, but not both
    \".\"\".\"\".\" type 1..1CodeableConceptCategory or discipline
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://terminology.hl7.org/CodeSystem/claim-type
    \".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: institutional
    \".\"\".\"\".\" billablePeriod 1..1PeriodRelevant time frame for the claim
    \".\"\".\"\".\"\".\" start S0..1dateTimeStarting time with inclusive boundary
    \".\"\".\"\".\"\".\" end S0..1dateTimeEnd time with inclusive boundary, if not ongoing
    \".\"\".\"\".\" created S1..1dateTimeResponse creation date
    \".\"\".\"\".\" provider 1..1Reference(C4BB Organization)Party responsible for the claim
    \".\"\".\"\".\" careTeam I0..*BackboneElementCare Team members
    EOB-inst-careTeam-practitioner: Institutional EOB: Careteam roles refer to a practitioner
    EOB-inst-careTeam-organization: Institutional EOB: Careteam roles refer to an organization
    \".\"\".\"\".\"\".\" role 1..1CodeableConceptFunction within the team
    Binding: C4BB Claim Institutional Care Team Role (required)
    \".\"\".\"\".\" supportingInfo 1..*(Slice Definition)Supporting information
    Slice: Unordered, Open by pattern:category
    \".\"\".\"\".\"\".\" supportingInfo:billingnetworkcontractingstatus S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: billingnetworkcontractingstatus
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: C4BB Payer Provider Contracting Status (required)
    \".\"\".\"\".\"\".\" supportingInfo:admissionperiod S1..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: admissionperiod
    \".\"\".\"\".\"\".\"\".\" timing[x] 1..1(Slice Definition)When it occurred
    Slice: Unordered, Open by type:$this
    \".\"\".\"\".\"\".\"\".\" timingPeriod S1..1PeriodWhen it occurred
    \".\"\".\"\".\"\".\" supportingInfo:clmrecvddate S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: clmrecvddate
    \".\"\".\"\".\"\".\"\".\" timing[x] S1..1dateWhen it occurred
    \".\"\".\"\".\"\".\" supportingInfo:typeofbill S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: typeofbill
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Type of Bill Codes (required)
    \".\"\".\"\".\"\".\" supportingInfo:pointoforigin S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: pointoforigin
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Point Of Origin (required)
    \".\"\".\"\".\"\".\" supportingInfo:admtype S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: admtype
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Priority (Type) of Admission or Visit (required)
    \".\"\".\"\".\"\".\" supportingInfo:discharge-status S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: discharge-status
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Patient Discharge Status Codes (required)
    \".\"\".\"\".\"\".\" supportingInfo:drg S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: drg
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: MS-DRGs - AP-DRGs - APR-DRGs (required)
    \".\"\".\"\".\" diagnosis S1..*BackboneElementPertinent diagnosis information
    \".\"\".\"\".\"\".\" sequence 1..1positiveIntDiagnosis instance identifier
    \".\"\".\"\".\"\".\" diagnosis[x] S1..1CodeableConceptNature of illness or problem
    Binding: Diagnosis Codes - International Classification of Diseases, Clinical Modification (ICD-9-CM, ICD-10-CM) (required)
    \".\"\".\"\".\"\".\" type S1..1CodeableConceptTiming or nature of the diagnosis
    Binding: C4BB Claim Inpatient Institutional Diagnosis Type (required)
    \".\"\".\"\".\"\".\" onAdmission S0..1CodeableConceptPresent on admission
    Binding: NUBC Present On Admission Indicator Codes (required)
    \".\"\".\"\".\" procedure S0..*BackboneElementClinical procedures performed
    \".\"\".\"\".\"\".\" sequence 1..1positiveIntProcedure instance identifier
    \".\"\".\"\".\"\".\" type S1..1CodeableConceptCategory of Procedure
    Binding: C4BB Claim Procedure Type (required)
    \".\"\".\"\".\"\".\" date S0..1dateTimeWhen the procedure was performed
    \".\"\".\"\".\"\".\" procedure[x] S1..1CodeableConceptSpecific clinical procedure
    Binding: Procedure Codes - International Classification of Diseases, Ninth Revision, Clinical Modification (ICD-9-CM) - ICD-10 Procedure Coding System (required)
    \".\"\".\"\".\" insurance 1..1BackboneElementPatient insurance information
    \".\"\".\"\".\" item
    \".\"\".\"\".\"\".\" revenue S1..1CodeableConceptRevenue or cost center code
    Binding: NUBC Revenue Codes (required)
    \".\"\".\"\".\"\".\" productOrService S1..1CodeableConceptBilling, service, product, or drug code
    Binding: Current Procedural Terminology (CPT) - Healthcare Common Procedure Coding System (HCPCS) level II alphanumeric codes - Procedure Codes (required)
    \".\"\".\"\".\"\".\" modifier S0..*CodeableConceptProduct or service billing modifiers
    Binding: Current Procedural Terminology (CPT) - Healthcare Common Procedure Coding System (HCPCS) level II alphanumeric codes - Procedure Modifier Codes (required)
    \".\"\".\"\".\"\".\" quantity S0..1SimpleQuantityCount of products or services
    \".\"\".\"\".\"\".\" adjudication SI0..*(Slice Definition)Adjudication details
    Slice: Unordered, Closed by pattern:category
    adjudication-has-amount-type-slice: If Adjudication is present, it must have at least one adjudicationamounttype slice
    \".\"\".\"\".\"\".\"\".\" adjudication:All Slices Content/Rules for all slices
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication Category Discriminator (required)
    \".\"\".\"\".\"\".\"\".\" adjudication:adjudicationamounttype S0..*BackboneElementAdjudication details
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication (required)
    \".\"\".\"\".\"\".\"\".\"\".\" amount S0..1MoneyMonetary amount
    \".\"\".\"\".\"\".\"\".\" adjudication:denialreason S0..*BackboneElementAdjudication details
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: denialreason
    \".\"\".\"\".\"\".\"\".\"\".\" reason S1..1CodeableConceptExplanation of adjudication outcome
    Binding: X12 Claim Adjustment Reason Codes - Remittance Advice Remark Codes (required)
    \".\"\".\"\".\"\".\"\".\" adjudication:allowedunits S0..1BackboneElementAdjudication details
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: allowedunits
    \".\"\".\"\".\"\".\"\".\"\".\" value S0..1decimalNon-monitary value
    \".\"\".\"\".\" adjudication SI0..*(Slice Definition)Header-level adjudication
    Slice: Unordered, Closed by pattern:category
    adjudication-has-amount-type-slice: If Adjudication is present, it must have at least one adjudicationamounttype slice
    \".\"\".\"\".\"\".\" adjudication:All Slices Content/Rules for all slices
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication Category Discriminator (required)
    \".\"\".\"\".\"\".\" adjudication:adjudicationamounttype S0..*BackboneElementHeader-level adjudication
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication (required)
    \".\"\".\"\".\"\".\"\".\" amount 1..1MoneyMonetary amount
    \".\"\".\"\".\"\".\" adjudication:denialreason S0..*BackboneElementHeader-level adjudication
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: denialreason
    \".\"\".\"\".\"\".\"\".\" reason S0..1CodeableConceptExplanation of adjudication outcome
    Binding: X12 Claim Adjustment Reason Codes - Remittance Advice Remark Codes (required)
    \".\"\".\"\".\" total 1..*(Slice Definition)Adjudication totals
    Slice: Unordered, Open by pattern:category
    \".\"\".\"\".\"\".\" total:All Slices Content/Rules for all slices
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptType of adjudication information
    Binding: C4BB Total Category Discriminator (extensible)
    \".\"\".\"\".\"\".\"\".\" amount 1..1MoneyFinancial total for the category
    \".\"\".\"\".\"\".\" total:adjudicationamounttype S1..*BackboneElementAdjudication totals
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication (required)
    \".\"\".\"\".\"\".\"\".\" amount S1..1MoneyFinancial total for the category
    \".\"\".\"\".\"\".\" total:inoutnetwork S0..1BackboneElementAdjudication totals
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Payer Benefit Payment Status (required)
    \".\"\".\"\".\" payment
    \".\"\".\"\".\"\".\" date S0..1dateExpected date of payment
    \".\"\".\"\".\" processNote
    \".\"\".\"\".\"\".\" text S0..1stringNote explanatory text

    \"doco\" Documentation for this format
    " + }, + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-category", + "valueString": "Financial.General" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-security-category", + "valueCode": "patient" + } + ], + "url": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional", + "version": "1.0.0", + "name": "C4BBExplanationOfBenefitInpatientInstitutional", + "title": "C4BB ExplanationOfBenefit Inpatient Institutional", + "status": "active", + "date": "2020-11-23T16:49:10+00:00", + "publisher": "HL7 Financial Management Working Group", + "contact": [ + { + "name": "HL7 Financial Management Working Group", + "telecom": [ + { + "system": "url", + "value": "http://www.hl7.org/Special/committees/fm/index.cfm" + }, + { + "system": "email", + "value": "fm@lists.HL7.org" + } + ] + } + ], + "description": "The profile is used for Explanation of Benefits (EOBs) based on claims submitted by clinics, hospitals, skilled nursing facilities and other institutions for inpatient services, which may include the use of equipment and supplies, laboratory services, radiology services and other charges. Inpatient claims are submitted for services rendered at an institution as part of an overnight stay. \nThe claims data is based on the institutional claim format UB-04, submission standards adopted by the Department of Health and Human \nServices.", + "jurisdiction": [ + { + "coding": [ + { + "system": "urn:iso:std:iso:3166", + "code": "US" + } + ] + } + ], + "fhirVersion": "4.0.1", + "mapping": [ + { + "identity": "workflow", + "uri": "http://hl7.org/fhir/workflow", + "name": "Workflow Pattern" + }, + { + "identity": "w5", + "uri": "http://hl7.org/fhir/fivews", + "name": "FiveWs Pattern Mapping" + }, + { + "identity": "v2", + "uri": "http://hl7.org/v2", + "name": "HL7 v2 Mapping" + }, + { + "identity": "rim", + "uri": "http://hl7.org/v3", + "name": "RIM Mapping" + } + ], + "kind": "resource", + "abstract": false, + "type": "ExplanationOfBenefit", + "baseDefinition": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit", + "derivation": "constraint", + "snapshot": { + "element": [ + { + "id": "ExplanationOfBenefit", + "path": "ExplanationOfBenefit", + "short": "Explanation of Benefit resource", + "definition": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", + "alias": [ + "EOB" + ], + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit", + "min": 0, + "max": "*" + }, + "constraint": [ + { + "key": "dom-2", + "severity": "error", + "human": "If the resource is contained in another resource, it SHALL NOT contain nested Resources", + "expression": "contained.contained.empty()", + "xpath": "not(parent::f:contained and f:contained)", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "dom-3", + "severity": "error", + "human": "If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource", + "expression": "contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()", + "xpath": "not(exists(for $id in f:contained/*/f:id/@value return $contained[not(parent::*/descendant::f:reference/@value=concat('#', $contained/*/id/@value) or descendant::f:reference[@value='#'])]))", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "dom-4", + "severity": "error", + "human": "If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated", + "expression": "contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()", + "xpath": "not(exists(f:contained/*/f:meta/f:versionId)) and not(exists(f:contained/*/f:meta/f:lastUpdated))", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "dom-5", + "severity": "error", + "human": "If a resource is contained in another resource, it SHALL NOT have a security label", + "expression": "contained.meta.security.empty()", + "xpath": "not(exists(f:contained/*/f:meta/f:security))", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice", + "valueBoolean": true + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice-explanation", + "valueMarkdown": "When a resource has no narrative, only systems that fully understand the data can display the resource to a human safely. Including a human readable representation in the resource makes for a much more robust eco-system and cheaper handling of resources by intermediary systems. Some ecosystems restrict distribution of resources to only those systems that do fully understand the resources, and as a consequence implementers may believe that the narrative is superfluous. However experience shows that such eco-systems often open up to new participants over time." + } + ], + "key": "dom-6", + "severity": "warning", + "human": "A resource should have narrative for robust management", + "expression": "text.`div`.exists()", + "xpath": "exists(f:text/h:div)", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "EOB-institutional-item-or-header-adjudication", + "severity": "error", + "human": "Institutional EOB: Should have adjudication at the item or header level, but not both", + "expression": "(adjudication.exists() != item.adjudication.exists())", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional" + }, + { + "key": "adjudication-has-amount-type-slice", + "severity": "error", + "human": "If Adjudication is present, it must have at least one adjudicationamounttype slice", + "expression": "adjudication.exists() implies (adjudication.where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "Entity. Role, or Act" + }, + { + "identity": "workflow", + "map": "Event" + } + ] + }, + { + "id": "ExplanationOfBenefit.id", + "path": "ExplanationOfBenefit.id", + "short": "Logical id of this artifact", + "definition": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", + "comment": "The only time that a resource does not have an id is when it is being submitted to the server using a create operation.", + "min": 0, + "max": "1", + "base": { + "path": "Resource.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.meta", + "path": "ExplanationOfBenefit.meta", + "short": "Metadata about the resource", + "definition": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", + "min": 1, + "max": "1", + "base": { + "path": "Resource.meta", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Meta" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.meta.id", + "path": "ExplanationOfBenefit.meta.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.meta.extension", + "path": "ExplanationOfBenefit.meta.extension", + "slicing": { + "discriminator": [ + { + "type": "value", + "path": "url" + } + ], + "description": "Extensions are always sliced by (at least) url", + "rules": "open" + }, + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.meta.versionId", + "path": "ExplanationOfBenefit.meta.versionId", + "short": "Version specific identifier", + "definition": "The version specific identifier, as it appears in the version portion of the URL. This value changes when the resource is created, updated, or deleted.", + "comment": "The server assigns this value, and ignores what the client specifies, except in the case that the server is imposing version integrity on updates/deletes.", + "min": 0, + "max": "1", + "base": { + "path": "Meta.versionId", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "id" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.meta.lastUpdated", + "path": "ExplanationOfBenefit.meta.lastUpdated", + "short": "When the resource version last changed", + "definition": "When the resource last changed - e.g. when the version changed.", + "comment": "Defines the date the Resource was created or updated, whichever comes last (163). Payers SHALL provide the last time the data was updated or the date of creation in the payer’s system of record, whichever comes last", + "min": 1, + "max": "1", + "base": { + "path": "Meta.lastUpdated", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "instant" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.meta.source", + "path": "ExplanationOfBenefit.meta.source", + "short": "Identifies where the resource comes from", + "definition": "A uri that identifies the source system of the resource. This provides a minimal amount of [Provenance](http://hl7.org/fhir/R4/provenance.html#) information that can be used to track or differentiate the source of information in the resource. The source may identify another FHIR server, document, message, database, etc.", + "comment": "In the provenance resource, this corresponds to Provenance.entity.what[x]. The exact use of the source (and the implied Provenance.entity.role) is left to implementer discretion. Only one nominated source is allowed; for additional provenance details, a full Provenance resource should be used. \n\nThis element can be used to indicate where the current master source of a resource that has a canonical URL if the resource is no longer hosted at the canonical URL.", + "min": 0, + "max": "1", + "base": { + "path": "Meta.source", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "uri" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.meta.profile", + "path": "ExplanationOfBenefit.meta.profile", + "short": "Profiles this resource claims to conform to", + "definition": "A list of profiles (references to [StructureDefinition](http://hl7.org/fhir/R4/structuredefinition.html#) resources) that this resource claims to conform to. The URL is a reference to [StructureDefinition.url](http://hl7.org/fhir/R4/structuredefinition-definitions.html#StructureDefinition.url).", + "comment": "CPCDS data element (190)", + "min": 1, + "max": "*", + "base": { + "path": "Meta.profile", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "canonical", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/StructureDefinition" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.meta.security", + "path": "ExplanationOfBenefit.meta.security", + "short": "Security Labels applied to this resource", + "definition": "Security labels applied to this resource. These tags connect specific resources to the overall security policy and infrastructure.", + "comment": "The security labels can be updated without changing the stated version of the resource. The list of security labels is a set. Uniqueness is based the system/code, and version and display are ignored.", + "min": 0, + "max": "*", + "base": { + "path": "Meta.security", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "SecurityLabels" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "extensible", + "description": "Security Labels from the Healthcare Privacy and Security Classification System.", + "valueSet": "http://hl7.org/fhir/ValueSet/security-labels" + } + }, + { + "id": "ExplanationOfBenefit.meta.tag", + "path": "ExplanationOfBenefit.meta.tag", + "short": "Tags applied to this resource", + "definition": "Tags applied to this resource. Tags are intended to be used to identify and relate resources to process and workflow, and applications are not required to consider the tags when interpreting the meaning of a resource.", + "comment": "The tags can be updated without changing the stated version of the resource. The list of tags is a set. Uniqueness is based the system/code, and version and display are ignored.", + "min": 0, + "max": "*", + "base": { + "path": "Meta.tag", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Tags" + } + ], + "strength": "example", + "description": "Codes that represent various types of tags, commonly workflow-related; e.g. \"Needs review by Dr. Jones\".", + "valueSet": "http://hl7.org/fhir/ValueSet/common-tags" + } + }, + { + "id": "ExplanationOfBenefit.implicitRules", + "path": "ExplanationOfBenefit.implicitRules", + "short": "A set of rules under which this content was created", + "definition": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", + "comment": "Asserting this rule set restricts the content to be only understood by a limited set of trading partners. This inherently limits the usefulness of the data in the long term. However, the existing health eco-system is highly fractured, and not yet ready to define, collect, and exchange data in a generally computable sense. Wherever possible, implementers and/or specification writers should avoid using this element. Often, when used, the URL is a reference to an implementation guide that defines these special rules as part of it's narrative along with other profiles, value sets, etc.", + "min": 0, + "max": "1", + "base": { + "path": "Resource.implicitRules", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "uri" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": true, + "isModifierReason": "This element is labeled as a modifier because the implicit rules may provide additional knowledge about the resource that modifies it's meaning or interpretation", + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.language", + "path": "ExplanationOfBenefit.language", + "short": "Language of the resource content", + "definition": "The base language in which the resource is written.", + "comment": "Language is provided to support indexing and accessibility (typically, services such as text to speech use the language tag). The html language tag in the narrative applies to the narrative. The language tag on the resource may be used to specify the language of other presentations generated from the data in the resource. Not all the content has to be in the base language. The Resource.language should not be assumed to apply to the narrative automatically. If a language is specified, it should it also be specified on the div element in the html (see rules in HTML5 for information about the relationship between xml:lang and the html lang attribute).", + "min": 0, + "max": "1", + "base": { + "path": "Resource.language", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "code" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-maxValueSet", + "valueCanonical": "http://hl7.org/fhir/ValueSet/all-languages" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Language" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "preferred", + "description": "A human language.", + "valueSet": "http://hl7.org/fhir/ValueSet/languages" + } + }, + { + "id": "ExplanationOfBenefit.text", + "path": "ExplanationOfBenefit.text", + "short": "Text summary of the resource, for human interpretation", + "definition": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", + "comment": "Contained resources do not have narrative. Resources that are not contained SHOULD have a narrative. In some cases, a resource may only have text with little or no additional discrete data (as long as all minOccurs=1 elements are satisfied). This may be necessary for data from legacy systems where information is captured as a \"text blob\" or where text is additionally entered raw or narrated and encoded information is added later.", + "alias": [ + "narrative", + "html", + "xhtml", + "display" + ], + "min": 0, + "max": "1", + "base": { + "path": "DomainResource.text", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Narrative" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "Act.text?" + } + ] + }, + { + "id": "ExplanationOfBenefit.contained", + "path": "ExplanationOfBenefit.contained", + "short": "Contained, inline Resources", + "definition": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", + "comment": "This should never be done when the content can be identified properly, as once identification is lost, it is extremely difficult (and context dependent) to restore it again. Contained resources may have profiles and tags In their meta elements, but SHALL NOT have security labels.", + "alias": [ + "inline resources", + "anonymous resources", + "contained resources" + ], + "min": 0, + "max": "*", + "base": { + "path": "DomainResource.contained", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Resource" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.extension", + "path": "ExplanationOfBenefit.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "DomainResource.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.modifierExtension", + "path": "ExplanationOfBenefit.modifierExtension", + "short": "Extensions that cannot be ignored", + "definition": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "DomainResource.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the resource that contains them", + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier", + "path": "ExplanationOfBenefit.identifier", + "short": "Business Identifier for the resource", + "definition": "A unique identifier assigned to this explanation of benefit.", + "comment": "Identifier assigned by a payer for a claim received from a provider or subscriber. It is not the same identifier as that assigned by a provider. (35)", + "requirements": "Allows EOBs to be distinguished and referenced.", + "min": 1, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.identifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Identifier" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "workflow", + "map": "Event.identifier" + }, + { + "identity": "w5", + "map": "FiveWs.identifier" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.id", + "path": "ExplanationOfBenefit.identifier.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.extension", + "path": "ExplanationOfBenefit.identifier.extension", + "slicing": { + "discriminator": [ + { + "type": "value", + "path": "url" + } + ], + "description": "Extensions are always sliced by (at least) url", + "rules": "open" + }, + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.use", + "path": "ExplanationOfBenefit.identifier.use", + "short": "usual | official | temp | secondary | old (If known)", + "definition": "The purpose of this identifier.", + "comment": "Applications can assume that an identifier is permanent unless it explicitly says that it is temporary.", + "requirements": "Allows the appropriate identifier for a particular context of use to be selected from among a set of identifiers.", + "min": 0, + "max": "1", + "base": { + "path": "Identifier.use", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "code" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": true, + "isModifierReason": "This is labeled as \"Is Modifier\" because applications should not mistake a temporary id for a permanent one.", + "isSummary": true, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "IdentifierUse" + } + ], + "strength": "required", + "description": "Identifies the purpose for this identifier, if known .", + "valueSet": "http://hl7.org/fhir/ValueSet/identifier-use|4.0.1" + }, + "mapping": [ + { + "identity": "v2", + "map": "N/A" + }, + { + "identity": "rim", + "map": "Role.code or implied by context" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.type", + "path": "ExplanationOfBenefit.identifier.type", + "short": "Description of identifier", + "definition": "A coded type for the identifier that can be used to determine which identifier to use for a specific purpose.", + "comment": "Indicates that the claim identifier is that assigned by a payer for a claim received from a provider or subscriber. (183)", + "requirements": "Allows users to make use of identifiers when the identifier system is not known.", + "min": 1, + "max": "1", + "base": { + "path": "Identifier.type", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimIdentifierType" + }, + "mapping": [ + { + "identity": "v2", + "map": "CX.5" + }, + { + "identity": "rim", + "map": "Role.code or implied by context" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.system", + "path": "ExplanationOfBenefit.identifier.system", + "short": "The namespace for the identifier value", + "definition": "Establishes the namespace for the value - that is, a URL that describes a set values that are unique.", + "comment": "Identifier.system is always case sensitive.", + "requirements": "There are many sets of identifiers. To perform matching of two identifiers, we need to know what set we're dealing with. The system identifies a particular set of unique identifiers.", + "min": 0, + "max": "1", + "base": { + "path": "Identifier.system", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "uri" + } + ], + "example": [ + { + "label": "General", + "valueUri": "http://www.acme.com/identifiers/patient" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "CX.4 / EI-2-4" + }, + { + "identity": "rim", + "map": "II.root or Role.id.root" + }, + { + "identity": "servd", + "map": "./IdentifierType" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.value", + "path": "ExplanationOfBenefit.identifier.value", + "short": "The value that is unique", + "definition": "The portion of the identifier typically relevant to the user and which is unique within the context of the system.", + "comment": "If the value is a full URI, then the system SHALL be urn:ietf:rfc:3986. The value's primary purpose is computational mapping. As a result, it may be normalized for comparison purposes (e.g. removing non-significant whitespace, dashes, etc.) A value formatted for human display can be conveyed using the [Rendered Value extension](http://hl7.org/fhir/R4/extension-rendered-value.html). Identifier.value is to be treated as case sensitive unless knowledge of the Identifier.system allows the processer to be confident that non-case-sensitive processing is safe.", + "min": 0, + "max": "1", + "base": { + "path": "Identifier.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "string" + } + ], + "example": [ + { + "label": "General", + "valueString": "123456" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "CX.1 / EI.1" + }, + { + "identity": "rim", + "map": "II.extension or II.root if system indicates OID or GUID (Or Role.id.extension or root)" + }, + { + "identity": "servd", + "map": "./Value" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.period", + "path": "ExplanationOfBenefit.identifier.period", + "short": "Time period when id is/was valid for use", + "definition": "Time period during which identifier is/was valid for use.", + "min": 0, + "max": "1", + "base": { + "path": "Identifier.period", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "CX.7 + CX.8" + }, + { + "identity": "rim", + "map": "Role.effectiveTime or implied by context" + }, + { + "identity": "servd", + "map": "./StartDate and ./EndDate" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.assigner", + "path": "ExplanationOfBenefit.identifier.assigner", + "short": "Organization that issued id (may be just text)", + "definition": "Organization that issued/manages the identifier.", + "comment": "The Identifier.assigner may omit the .reference element and only contain a .display element reflecting the name or other textual information about the assigning organization.", + "min": 0, + "max": "1", + "base": { + "path": "Identifier.assigner", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Organization" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "CX.4 / (CX.4,CX.9,CX.10)" + }, + { + "identity": "rim", + "map": "II.assigningAuthorityName but note that this is an improper use by the definition of the field. Also Role.scoper" + }, + { + "identity": "servd", + "map": "./IdentifierIssuingAuthority" + } + ] + }, + { + "id": "ExplanationOfBenefit.status", + "path": "ExplanationOfBenefit.status", + "short": "active | cancelled | draft | entered-in-error", + "definition": "The status of the resource instance.", + "comment": "Claim processing status code (140). Expected values are active or cancelled. To comply with the CMS rule, draft EOBs are not required", + "requirements": "Need to track the status of the resource as 'draft' resources may undergo further edits while 'active' resources are immutable and may only have their status changed to 'cancelled'.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.status", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "code" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": true, + "isModifierReason": "This element is labeled as a modifier because it is a status element that contains status entered-in-error which means that the resource should not be treated as valid", + "isSummary": true, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ExplanationOfBenefitStatus" + } + ], + "strength": "required", + "description": "A code specifying the state of the resource instance.", + "valueSet": "http://hl7.org/fhir/ValueSet/explanationofbenefit-status|4.0.1" + }, + "mapping": [ + { + "identity": "workflow", + "map": "Event.status" + }, + { + "identity": "w5", + "map": "FiveWs.status" + } + ] + }, + { + "id": "ExplanationOfBenefit.type", + "path": "ExplanationOfBenefit.type", + "short": "Category or discipline", + "definition": "The category of claim, e.g. oral, pharmacy, vision, institutional, professional.", + "comment": "Specifies the type of claim. (e.g., inpatient insitutional, outpatient institutional, physician, etc.) (16). Defines the Claims profiles. Values from Claim Type Codes are required; a data absent reason is not allowed", + "requirements": "Claim type determine the general sets of business rules applied for information requirements and adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.type", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/claim-type", + "code": "institutional" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-type" + }, + "mapping": [ + { + "identity": "workflow", + "map": "Event.code" + }, + { + "identity": "w5", + "map": "FiveWs.class" + } + ] + }, + { + "id": "ExplanationOfBenefit.subType", + "path": "ExplanationOfBenefit.subType", + "short": "More granular claim type", + "definition": "A finer grained suite of claim type codes which may convey additional information such as Inpatient vs Outpatient and/or a specialty service.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Some jurisdictions need a finer grained claim type for routing and adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.subType", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ClaimSubType" + } + ], + "strength": "example", + "description": "A more granular claim typecode.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-subtype" + }, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.class" + } + ] + }, + { + "id": "ExplanationOfBenefit.use", + "path": "ExplanationOfBenefit.use", + "short": "claim | preauthorization | predetermination", + "definition": "A code to indicate whether the nature of the request is: to request adjudication of products and services previously rendered; or requesting authorization and adjudication for provision in the future; or requesting the non-binding adjudication of the listed products and services which could be provided in the future.", + "comment": "Expected value is claim. The CMS rule applies to adjudicated claims; it does not require preauthorizations or predeterminations", + "requirements": "This element is required to understand the nature of the request for adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.use", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "code" + } + ], + "patternCode": "claim", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Use" + } + ], + "strength": "required", + "description": "Complete, proposed, exploratory, other.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-use|4.0.1" + }, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.class" + } + ] + }, + { + "id": "ExplanationOfBenefit.patient", + "path": "ExplanationOfBenefit.patient", + "short": "The recipient of the products and services", + "definition": "The party to whom the professional services and/or products have been supplied or are being considered and for whom actual for forecast reimbursement is sought.", + "comment": "Identifier for a member assigned by the Payer. If members receive ID cards, that is the identifier that should be provided. (1). The patient must be supplied to the insurer so that confirmation of coverage and service history may be considered as part of the authorization and/or adjudiction. Additional required path:EOB.insurance.coverage(Coverage).beneficiary(Patient).identifier", + "requirements": "The patient must be supplied to the insurer so that confirmation of coverage and service history may be considered as part of the authorization and/or adjudiction.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.patient", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Patient" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "workflow", + "map": "Event.subject" + }, + { + "identity": "w5", + "map": "FiveWs.subject[x]" + }, + { + "identity": "w5", + "map": "FiveWs.subject" + } + ] + }, + { + "id": "ExplanationOfBenefit.billablePeriod", + "path": "ExplanationOfBenefit.billablePeriod", + "short": "Relevant time frame for the claim", + "definition": "The period for which charges are being submitted.", + "comment": "Typically this would be today or in the past for a claim, and today or in the future for preauthorizations and prodeterminations. Typically line item dates of service should fall within the billing period if one is specified.", + "requirements": "A number jurisdictions required the submission of the billing period when submitting claims for example for hospital stays or long-term care.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.billablePeriod", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.done[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.billablePeriod.id", + "path": "ExplanationOfBenefit.billablePeriod.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.billablePeriod.extension", + "path": "ExplanationOfBenefit.billablePeriod.extension", + "slicing": { + "discriminator": [ + { + "type": "value", + "path": "url" + } + ], + "description": "Extensions are always sliced by (at least) url", + "rules": "open" + }, + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.billablePeriod.start", + "path": "ExplanationOfBenefit.billablePeriod.start", + "short": "Starting time with inclusive boundary", + "definition": "The start of the period. The boundary is inclusive.", + "comment": "The first day on the billing statement covering services rendered to the beneficiary (i.e. 'Statement Covers From Date’). (177)", + "min": 0, + "max": "1", + "base": { + "path": "Period.start", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "dateTime" + } + ], + "condition": [ + "per-1" + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "DR.1" + }, + { + "identity": "rim", + "map": "./low" + } + ] + }, + { + "id": "ExplanationOfBenefit.billablePeriod.end", + "path": "ExplanationOfBenefit.billablePeriod.end", + "short": "End time with inclusive boundary, if not ongoing", + "definition": "The end of the period. If the end of the period is missing, it means no end was known or planned at the time the instance was created. The start may be in the past, and the end date in the future, which means that period is expected/planned to end at that time.", + "comment": "The last day on the billing statement covering services rendered to the beneficiary (i.e. 'Statement Covers Thru Date’). (178)", + "min": 0, + "max": "1", + "base": { + "path": "Period.end", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "dateTime" + } + ], + "meaningWhenMissing": "If the end of the period is missing, it means that the period is ongoing", + "condition": [ + "per-1" + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "DR.2" + }, + { + "identity": "rim", + "map": "./high" + } + ] + }, + { + "id": "ExplanationOfBenefit.created", + "path": "ExplanationOfBenefit.created", + "short": "Response creation date", + "definition": "The date this resource was created.", + "comment": "Date the claim was adjudicated (179)", + "requirements": "Need to record a timestamp for use by both the recipient and the issuer.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.created", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "dateTime" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "workflow", + "map": "Event.occurrence[x]" + }, + { + "identity": "w5", + "map": "FiveWs.recorded" + } + ] + }, + { + "id": "ExplanationOfBenefit.enterer", + "path": "ExplanationOfBenefit.enterer", + "short": "Author of the claim", + "definition": "Individual who created the claim, predetermination or preauthorization.", + "requirements": "Some jurisdictions require the contact information for personnel completing claims.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.enterer", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Practitioner", + "http://hl7.org/fhir/StructureDefinition/PractitionerRole" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "workflow", + "map": "Event.performer.agent" + }, + { + "identity": "w5", + "map": "FiveWs.author" + } + ] + }, + { + "id": "ExplanationOfBenefit.insurer", + "path": "ExplanationOfBenefit.insurer", + "short": "Party responsible for reimbursement", + "definition": "The party responsible for authorization, adjudication and reimbursement.", + "comment": "Code of the payer responsible for the claim (2, 5). Same as insurance.coverage.organization. Party responsible for reimbursing the provider", + "requirements": "To be a valid claim, preauthorization or predetermination there must be a party who is responsible for adjudicating the contents against a policy which provides benefits for the patient.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.insurer", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "workflow", + "map": "Event.performer.agent" + }, + { + "identity": "w5", + "map": "FiveWs.author" + } + ] + }, + { + "id": "ExplanationOfBenefit.provider", + "path": "ExplanationOfBenefit.provider", + "short": "Party responsible for the claim", + "definition": "The provider which is responsible for the claim, predetermination or preauthorization.", + "comment": "The identifier assigned to the Billing Provider. (94)", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.provider", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.source" + } + ] + }, + { + "id": "ExplanationOfBenefit.priority", + "path": "ExplanationOfBenefit.priority", + "short": "Desired processing urgency", + "definition": "The provider-required urgency of processing the request. Typical values include: stat, routine deferred.", + "comment": "If a claim processor is unable to complete the processing as per the priority then they should generate and error and not process the request.", + "requirements": "The provider may need to indicate their processing requirements so that the processor can indicate if they are unable to comply.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.priority", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/ValueSet/process-priority" + }, + "mapping": [ + { + "identity": "v2", + "map": "Request.priority" + } + ] + }, + { + "id": "ExplanationOfBenefit.fundsReserveRequested", + "path": "ExplanationOfBenefit.fundsReserveRequested", + "short": "For whom to reserve funds", + "definition": "A code to indicate whether and for whom funds are to be reserved for future claims.", + "comment": "This field is only used for preauthorizations.", + "requirements": "In the case of a Pre-Determination/Pre-Authorization the provider may request that funds in the amount of the expected Benefit be reserved ('Patient' or 'Provider') to pay for the Benefits determined on the subsequent claim(s). 'None' explicitly indicates no funds reserving is requested.", + "alias": [ + "Fund pre-allocation" + ], + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.fundsReserveRequested", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "FundsReserve" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "example", + "description": "For whom funds are to be reserved: (Patient, Provider, None).", + "valueSet": "http://hl7.org/fhir/ValueSet/fundsreserve" + } + }, + { + "id": "ExplanationOfBenefit.fundsReserve", + "path": "ExplanationOfBenefit.fundsReserve", + "short": "Funds reserved status", + "definition": "A code, used only on a response to a preauthorization, to indicate whether the benefits payable have been reserved and for whom.", + "comment": "Fund would be release by a future claim quoting the preAuthRef of this response. Examples of values include: provider, patient, none.", + "requirements": "Needed to advise the submitting provider on whether the rquest for reservation of funds has been honored.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.fundsReserve", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "FundsReserve" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "example", + "description": "For whom funds are to be reserved: (Patient, Provider, None).", + "valueSet": "http://hl7.org/fhir/ValueSet/fundsreserve" + } + }, + { + "id": "ExplanationOfBenefit.related", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "RelatedClaim" + } + ], + "path": "ExplanationOfBenefit.related", + "short": "Prior or corollary claims", + "definition": "Other claims which are related to this claim such as prior submissions or claims for related services or for the same event.", + "comment": "If the current claim represents a claim that has been adjusted and was given a prior claim number, this field represents the prior claim number. If the current claim has been adjusted; i.e., replaced by or merged to another claim number, this data element represents that new number.(111, 112)", + "requirements": "For workplace or other accidents it is common to relate separate claims arising from the same event.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.related", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.related.id", + "path": "ExplanationOfBenefit.related.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.related.extension", + "path": "ExplanationOfBenefit.related.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.related.modifierExtension", + "path": "ExplanationOfBenefit.related.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.related.claim", + "path": "ExplanationOfBenefit.related.claim", + "short": "Reference to the related claim", + "definition": "Reference to a related claim.", + "requirements": "For workplace or other accidents it is common to relate separate claims arising from the same event.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.related.claim", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Claim" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.related.relationship", + "path": "ExplanationOfBenefit.related.relationship", + "short": "How the reference claim is related", + "definition": "A code to convey how the claims are related.", + "comment": "For example, prior claim or umbrella.", + "requirements": "Some insurers need a declaration of the type of relationship.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.related.relationship", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBRelatedClaimRelationshipCodes" + } + }, + { + "id": "ExplanationOfBenefit.related.reference", + "path": "ExplanationOfBenefit.related.reference", + "short": "File or case reference", + "definition": "An alternate organizational reference to the case or file to which this particular claim pertains.", + "comment": "For example, Property/Casualty insurer claim number or Workers Compensation case number.", + "requirements": "In cases where an event-triggered claim is being submitted to an insurer which requires a reference number to be specified on all exchanges.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.related.reference", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Identifier" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.prescription", + "path": "ExplanationOfBenefit.prescription", + "short": "Prescription authorizing services or products", + "definition": "Prescription to support the dispensing of pharmacy, device or vision products.", + "requirements": "Required to authorize the dispensing of controlled substances and devices.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.prescription", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/MedicationRequest", + "http://hl7.org/fhir/StructureDefinition/VisionPrescription" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.originalPrescription", + "path": "ExplanationOfBenefit.originalPrescription", + "short": "Original prescription if superceded by fulfiller", + "definition": "Original prescription which has been superseded by this prescription to support the dispensing of pharmacy services, medications or products.", + "comment": "For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new prescription for an alternate medication which has the same therapeutic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.", + "requirements": "Often required when a fulfiller varies what is fulfilled from that authorized on the original prescription.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.originalPrescription", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/MedicationRequest" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.payee", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Payee" + } + ], + "path": "ExplanationOfBenefit.payee", + "short": "Recipient of benefits payable", + "definition": "The party to be reimbursed for cost of the products and services according to the terms of the policy.", + "comment": "Often providers agree to receive the benefits payable to reduce the near-term costs to the patient. The insurer may decline to pay the provider and may choose to pay the subscriber instead.", + "requirements": "The provider needs to specify who they wish to be reimbursed and the claims processor needs express who they will reimburse.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payee", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.payee.id", + "path": "ExplanationOfBenefit.payee.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.payee.extension", + "path": "ExplanationOfBenefit.payee.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.payee.modifierExtension", + "path": "ExplanationOfBenefit.payee.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.payee.type", + "path": "ExplanationOfBenefit.payee.type", + "short": "Category of recipient", + "definition": "Type of Party to be reimbursed: Subscriber, provider, other.", + "comment": "Identifies the type of recipient of the adjudication amount; i.e., provider, subscriber, beneficiary or another recipient. (120)", + "requirements": "Need to know who should receive payment with the most common situations being the Provider (assignment of benefits) or the Subscriber.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payee.type", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayeeType" + } + }, + { + "id": "ExplanationOfBenefit.payee.party", + "path": "ExplanationOfBenefit.payee.party", + "short": "Recipient reference", + "definition": "Reference to the individual or organization to whom any payment will be made.", + "comment": "Recipient reference (121)", + "requirements": "Need to provide demographics if the payee is not 'subscriber' nor 'provider'.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payee.party", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization", + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Patient", + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Practitioner" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.referral", + "path": "ExplanationOfBenefit.referral", + "short": "Treatment Referral", + "definition": "A reference to a referral resource.", + "comment": "The referral resource which lists the date, practitioner, reason and other supporting information.", + "requirements": "Some insurers require proof of referral to pay for services or to pay specialist rates for services.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.referral", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/ServiceRequest" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.cause" + } + ] + }, + { + "id": "ExplanationOfBenefit.facility", + "path": "ExplanationOfBenefit.facility", + "short": "Servicing Facility", + "definition": "Facility where the services were provided.", + "requirements": "Insurance adjudication can be dependant on where services were delivered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.facility", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Location" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "workflow", + "map": "Event.performer.location" + }, + { + "identity": "w5", + "map": "FiveWs.where[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.claim", + "path": "ExplanationOfBenefit.claim", + "short": "Claim reference", + "definition": "The business identifier for the instance of the adjudication request: claim predetermination or preauthorization.", + "requirements": "To provide a link to the original adjudication request.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.claim", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Claim" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.why[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.claimResponse", + "path": "ExplanationOfBenefit.claimResponse", + "short": "Claim response reference", + "definition": "The business identifier for the instance of the adjudication response: claim, predetermination or preauthorization response.", + "requirements": "To provide a link to the original adjudication response.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.claimResponse", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/ClaimResponse" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.outcome", + "path": "ExplanationOfBenefit.outcome", + "short": "queued | complete | error | partial", + "definition": "The outcome of the claim, predetermination, or preauthorization processing.", + "comment": "Expected value is complete", + "requirements": "To advise the requestor of an overall processing outcome.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.outcome", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "code" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "RemittanceOutcome" + } + ], + "strength": "required", + "description": "The result of the claim processing.", + "valueSet": "http://hl7.org/fhir/ValueSet/remittance-outcome|4.0.1" + } + }, + { + "id": "ExplanationOfBenefit.disposition", + "path": "ExplanationOfBenefit.disposition", + "short": "Disposition Message", + "definition": "A human readable description of the status of the adjudication.", + "requirements": "Provided for user display.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.disposition", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "string" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.preAuthRef", + "path": "ExplanationOfBenefit.preAuthRef", + "short": "Preauthorization reference", + "definition": "Reference from the Insurer which is used in later communications which refers to this adjudication.", + "comment": "This value is only present on preauthorization adjudications.", + "requirements": "On subsequent claims, the insurer may require the provider to quote this value.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.preAuthRef", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "string" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.preAuthRefPeriod", + "path": "ExplanationOfBenefit.preAuthRefPeriod", + "short": "Preauthorization in-effect period", + "definition": "The timeframe during which the supplied preauthorization reference may be quoted on claims to obtain the adjudication as provided.", + "comment": "This value is only present on preauthorization adjudications.", + "requirements": "On subsequent claims, the insurer may require the provider to quote this value.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.preAuthRefPeriod", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.careTeam", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "CareTeam" + } + ], + "path": "ExplanationOfBenefit.careTeam", + "short": "Care Team members", + "definition": "The members of the team who provided the products and services.", + "requirements": "Common to identify the responsible and supporting practitioners.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.careTeam", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "EOB-inst-careTeam-practitioner", + "severity": "error", + "human": "Institutional EOB: Careteam roles refer to a practitioner", + "expression": "(\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists() implies\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists().provider.all(resolve() is Practitioner)\n)", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional" + }, + { + "key": "EOB-inst-careTeam-organization", + "severity": "error", + "human": "Institutional EOB: Careteam roles refer to an organization", + "expression": "(\nrole.where(coding.where(code in ('performing' )).exists()).exists() implies\nrole.where(coding.where(code in ('performing' )).exists()).exists().provider.all(resolve() is Organization)\n)", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.careTeam.id", + "path": "ExplanationOfBenefit.careTeam.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.careTeam.extension", + "path": "ExplanationOfBenefit.careTeam.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.careTeam.modifierExtension", + "path": "ExplanationOfBenefit.careTeam.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.careTeam.sequence", + "path": "ExplanationOfBenefit.careTeam.sequence", + "short": "Order of care team", + "definition": "A number to uniquely identify care team entries.", + "comment": "careTeam.sequence values uniquely identify careTeam members. They do not necessarily indiate any order in which the patient was seen by the careTeam or identify any level of significance of the careTeam to the patient, etc. Client app implementations should not assign any significance to the sequence values", + "requirements": "Necessary to maintain the order of the care team and provide a mechanism to link individuals to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.careTeam.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.careTeam.provider", + "path": "ExplanationOfBenefit.careTeam.provider", + "short": "Practitioner or organization", + "definition": "Member of the team who provided the product or service.", + "comment": "The identifier assigned to the care team. (varies depending on the profile)", + "requirements": "Often a regulatory requirement to specify the responsible provider.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.careTeam.provider", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization", + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Practitioner" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.actor" + } + ] + }, + { + "id": "ExplanationOfBenefit.careTeam.responsible", + "path": "ExplanationOfBenefit.careTeam.responsible", + "short": "Indicator of the lead practitioner", + "definition": "The party who is billing and/or responsible for the claimed products or services.", + "comment": "Responsible might not be required when there is only a single provider listed.", + "requirements": "When multiple parties are present it is required to distinguish the lead or responsible individual.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.careTeam.responsible", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.careTeam.role", + "path": "ExplanationOfBenefit.careTeam.role", + "short": "Function within the team", + "definition": "The lead, assisting or supervising practitioner and their discipline if a multidisciplinary team.", + "comment": "The functional role of a provider on a claim. (165)", + "requirements": "When multiple parties are present it is required to distinguish the roles performed by each member.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.careTeam.role", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimInstitutionalCareTeamRole" + } + }, + { + "id": "ExplanationOfBenefit.careTeam.qualification", + "path": "ExplanationOfBenefit.careTeam.qualification", + "short": "Practitioner credential or specialization", + "definition": "The qualification of the practitioner which is applicable for this service.", + "requirements": "Need to specify which qualification a provider is delivering the product or service under.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.careTeam.qualification", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ProviderQualification" + } + ], + "strength": "example", + "description": "Provider professional qualifications.", + "valueSet": "http://hl7.org/fhir/ValueSet/provider-qualification" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on $this pattern", + "ordered": false, + "rules": "open" + }, + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "Defines data elements not available in the base EOB resource", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 1, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "InformationCode" + } + ], + "strength": "example", + "description": "The valuset used for additional information codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-exception" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "billingnetworkcontractingstatus", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "Indicates that the Billing Provider has a contract with the Plan (regardless of the network) as of the effective date of service or admission. (101)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "billingnetworkcontractingstatus" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerProviderContractingStatus" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "admissionperiod", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "The Period.start date corresponds with the date the beneficiary was admitted to a facility and the onset of services. May precede the Statement From Date if this claim is for a beneficiary who has been continuously under care. The Period.end date corresponds with the date beneficiary was discharged from the facility, or died. Matches the final Statement Thru Date. When there is a discharge date, the Patient Discharge Status Code indicates the final disposition of the patient after discharge. (18, 19)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "admissionperiod" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "InformationCode" + } + ], + "strength": "example", + "description": "The valuset used for additional information codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-exception" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "slicing": { + "discriminator": [ + { + "type": "type", + "path": "$this" + } + ], + "ordered": false, + "rules": "closed" + }, + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod.timing[x]:timingPeriod", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "sliceName": "timingPeriod", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "clmrecvddate", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "The date the claim was received by the payer (88)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "clmrecvddate" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "InformationCode" + } + ], + "strength": "example", + "description": "The valuset used for additional information codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-exception" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "typeofbill", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "UB04 (Form Locator 4) type of bill code provides specific information for payer purposes. The first digit of the three-digit number denotes the type of institution, the second digit classifies the type of care being billed, and the third digit identifies the frequency of the bill for a specific course of treatment or inpatient confinement. (17)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "typeofbill" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCTypeOfBill" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "pointoforigin", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "Identifies the place where the patient was identified as needing admission to an institution. This is a two position code mapped from the standard values for the UB-04 Source of Admission code (FL-15). (13)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "pointoforigin" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPointOfOriginForAdmissionOrVisit" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "admtype", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "Priority of the admission. Information located on (UB04 Form Locator 14). For example, an admission type of elective indicates that the patient's condition permitted time for medical services to be scheduled. (14)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "admtype" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPriorityTypeOfAdmissionOrVisit" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "discharge-status", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "Patient’s status as of the discharge date for a facility stay. Information located on UB04. (Form Locator 17). (117)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "discharge-status" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPatientDischargeStatus" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:drg", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "drg", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "Claim diagnosis related group (DRG). DRGs require the DRG system; i.e., MS-DRG / AP-DRG / APR-DRG, the DRG version and the code value (32, 33. 113)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:drg.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:drg.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:drg.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:drg.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:drg.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "drg" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:drg.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/CMSMS3MAPAPRDRG" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:drg.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:drg.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:drg.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.diagnosis", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Diagnosis" + } + ], + "path": "ExplanationOfBenefit.diagnosis", + "short": "Pertinent diagnosis information", + "definition": "Information about diagnoses relevant to the claim items.", + "comment": "Diagnosis codes describe an individual's disease or medical condition. (6, 7, 8, 21, 22, 23, 30)", + "requirements": "Required for the adjudication by provided context for the services and product listed.", + "min": 1, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.diagnosis", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.diagnosis.id", + "path": "ExplanationOfBenefit.diagnosis.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.diagnosis.extension", + "path": "ExplanationOfBenefit.diagnosis.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.diagnosis.modifierExtension", + "path": "ExplanationOfBenefit.diagnosis.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.diagnosis.sequence", + "path": "ExplanationOfBenefit.diagnosis.sequence", + "short": "Diagnosis instance identifier", + "definition": "A number to uniquely identify diagnosis entries.", + "comment": "Diagnosis.sequence values do not necessarily indiate any order in which the diagnosis was reported or identified. client app implementations should not assign any significance to the sequence values. client app implementations should use the values of diagnosis.type to identify primary, secondary, etc.", + "requirements": "Necessary to maintain the order of the diagnosis items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.diagnosis.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.diagnosis.diagnosis[x]", + "path": "ExplanationOfBenefit.diagnosis.diagnosis[x]", + "short": "Nature of illness or problem", + "definition": "The nature of illness or problem in a coded form or as a reference to an external defined Condition.", + "requirements": "Provides health context for the evaluation of the products and/or services.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.diagnosis.diagnosis[x]", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/CDCICD910CMDiagnosisCodes" + } + }, + { + "id": "ExplanationOfBenefit.diagnosis.type", + "path": "ExplanationOfBenefit.diagnosis.type", + "short": "Timing or nature of the diagnosis", + "definition": "When the condition was observed or the relative ranking.", + "comment": "Indicates if the inpatient institutional diagnosis is admitting, principal, other or an external cause of injury. (21, 22, 23)", + "requirements": "Often required to capture a particular diagnosis, for example: primary or discharge.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.diagnosis.type", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimInpatientInstitutionalDiagnosisType" + } + }, + { + "id": "ExplanationOfBenefit.diagnosis.onAdmission", + "path": "ExplanationOfBenefit.diagnosis.onAdmission", + "short": "Present on admission", + "definition": "Indication of whether the diagnosis was present on admission to a facility.", + "comment": "Used to capture whether a diagnosis was present at time of a patient's admission. (28)", + "requirements": "Many systems need to understand for adjudication if the diagnosis was present a time of admission.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.diagnosis.onAdmission", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPresentOnAdmission" + } + }, + { + "id": "ExplanationOfBenefit.diagnosis.packageCode", + "path": "ExplanationOfBenefit.diagnosis.packageCode", + "short": "Package billing code", + "definition": "A package billing code or bundle code used to group products and services to a particular health condition (such as heart attack) which is based on a predetermined grouping code system.", + "comment": "For example, DRG (Diagnosis Related Group) or a bundled billing code. A patient may have a diagnosis of a Myocardio-infarction and a DRG for HeartAttack would assigned. The Claim item (and possible subsequent claims) would refer to the DRG for those line items that were for services related to the heart attack event.", + "requirements": "Required to relate the current diagnosis to a package billing code that is then referenced on the individual claim items which are specific to the health condition covered by the package code.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.diagnosis.packageCode", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "DiagnosisRelatedGroup" + } + ], + "strength": "example", + "description": "The DRG codes associated with the diagnosis.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-diagnosisrelatedgroup" + } + }, + { + "id": "ExplanationOfBenefit.procedure", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Procedure" + } + ], + "path": "ExplanationOfBenefit.procedure", + "short": "Clinical procedures performed", + "definition": "Procedures performed on the patient relevant to the billing items with the claim.", + "comment": "Medical procedure a patient received during inpatient stay. Current coding methods include: International Classification of Diseases Surgical Procedures (ICD-9). Information located on UB04 (Form Locator 74). (25, 27, 10, 12)", + "requirements": "The specific clinical invention are sometimes required to be provided to justify billing a greater than customary amount for a service.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.procedure", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.procedure.id", + "path": "ExplanationOfBenefit.procedure.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.procedure.extension", + "path": "ExplanationOfBenefit.procedure.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.procedure.modifierExtension", + "path": "ExplanationOfBenefit.procedure.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.procedure.sequence", + "path": "ExplanationOfBenefit.procedure.sequence", + "short": "Procedure instance identifier", + "definition": "A number to uniquely identify procedure entries.", + "comment": " procedure.sequence values do not necessarily indiate any order in which the procedure occurred. client app implementations should not assign any significance to the sequence values. client app implementations should use the values of procedure.type to identify primary and secondary procedures", + "requirements": "Necessary to provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.procedure.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.procedure.type", + "path": "ExplanationOfBenefit.procedure.type", + "short": "Category of Procedure", + "definition": "When the condition was observed or the relative ranking.", + "comment": "Indicates if the inpatient institutional procedure (ICD-PCS) is the principal procedure or another procedure. (186)", + "requirements": "Often required to capture a particular diagnosis, for example: primary or discharge.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.procedure.type", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimProcedureType" + } + }, + { + "id": "ExplanationOfBenefit.procedure.date", + "path": "ExplanationOfBenefit.procedure.date", + "short": "When the procedure was performed", + "definition": "Date and optionally time the procedure was performed.", + "requirements": "Required for auditing purposes.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.procedure.date", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "dateTime" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.procedure.procedure[x]", + "path": "ExplanationOfBenefit.procedure.procedure[x]", + "short": "Specific clinical procedure", + "definition": "The code or reference to a Procedure resource which identifies the clinical intervention performed.", + "requirements": "This identifies the actual clinical procedure.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.procedure.procedure[x]", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/CMSICD910PCSProcedureCodes" + } + }, + { + "id": "ExplanationOfBenefit.procedure.udi", + "path": "ExplanationOfBenefit.procedure.udi", + "short": "Unique device identifier", + "definition": "Unique Device Identifiers associated with this line item.", + "requirements": "The UDI code allows the insurer to obtain device level information on the product supplied.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.procedure.udi", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Device" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.precedence", + "path": "ExplanationOfBenefit.precedence", + "short": "Precedence (primary, secondary, etc.)", + "definition": "This indicates the relative order of a series of EOBs related to different coverages for the same suite of services.", + "requirements": "Needed to coordinate between multiple EOBs for the same suite of services.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.precedence", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.insurance", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Insurance" + } + ], + "path": "ExplanationOfBenefit.insurance", + "short": "Patient insurance information", + "definition": "Financial instruments for reimbursement for the health care products and services specified on the claim.", + "comment": "Identity of the payers responsible for the claim. (2, 141). All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. An invariant is defined to enforce the following rule: Will have multiple occurrences on secondary / tertiary, etc. claims. Up to one occurrence, that of the ExplanationOfBenefit.insurer, will have a boolean value = 'True'", + "requirements": "At least one insurer is required for a claim to be a claim.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.insurance", + "min": 1, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "EOB-insurance-focal", + "severity": "error", + "human": "EOB.insurance: at most one with focal = true", + "expression": "insurance.select (focal = true).count() < 2", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "Coverage" + } + ] + }, + { + "id": "ExplanationOfBenefit.insurance.id", + "path": "ExplanationOfBenefit.insurance.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.insurance.extension", + "path": "ExplanationOfBenefit.insurance.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.insurance.modifierExtension", + "path": "ExplanationOfBenefit.insurance.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.insurance.focal", + "path": "ExplanationOfBenefit.insurance.focal", + "short": "Coverage to be used for adjudication", + "definition": "A flag to indicate that this Coverage is to be used for adjudication of this claim when set to true.", + "comment": "A patient may (will) have multiple insurance policies which provide reimbursement for healthcare services and products. For example, a person may also be covered by their spouse's policy and both appear in the list (and may be from the same insurer). This flag will be set to true for only one of the listed policies and that policy will be used for adjudicating this claim. Other claims would be created to request adjudication against the other listed policies. An invariant is defined to enforce the following rule: Will have multiple occurrences on secondary / tertiary, etc. claims. Up to one occurrence, that of the ExplanationOfBenefit.insurer, will have a boolean value = 'True'", + "requirements": "To identify which coverage in the list is being used to adjudicate this claim.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.insurance.focal", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "boolean" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.insurance.coverage", + "path": "ExplanationOfBenefit.insurance.coverage", + "short": "Insurance information", + "definition": "Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.", + "comment": "Same as insurance.coverage.organization. Party responsible for reimbursing the provider. When focal = true, Coverage.payer--> Organization.identifier. When focal = false, EOB.insurance.coverage.display = [name of other carrier]", + "requirements": "Required to allow the adjudicator to locate the correct policy and history within their information system.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.insurance.coverage", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Coverage" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.insurance.preAuthRef", + "path": "ExplanationOfBenefit.insurance.preAuthRef", + "short": "Prior authorization reference number", + "definition": "Reference numbers previously provided by the insurer to the provider to be quoted on subsequent claims containing services or products related to the prior authorization.", + "comment": "This value is an alphanumeric string that may be provided over the phone, via text, via paper, or within a ClaimResponse resource and is not a FHIR Identifier.", + "requirements": "Providers must quote previously issued authorization reference numbers in order to obtain adjudication as previously advised on the Preauthorization.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.insurance.preAuthRef", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "string" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.accident", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Accident" + } + ], + "path": "ExplanationOfBenefit.accident", + "short": "Details of the event", + "definition": "Details of a accident which resulted in injuries which required the products and services listed in the claim.", + "requirements": "When healthcare products and services are accident related, benefits may be payable under accident provisions of policies, such as automotive, etc before they are payable under normal health insurance.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.accident", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.accident.id", + "path": "ExplanationOfBenefit.accident.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.accident.extension", + "path": "ExplanationOfBenefit.accident.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.accident.modifierExtension", + "path": "ExplanationOfBenefit.accident.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.accident.date", + "path": "ExplanationOfBenefit.accident.date", + "short": "When the incident occurred", + "definition": "Date of an accident event related to the products and services contained in the claim.", + "comment": "The date of the accident has to precede the dates of the products and services but within a reasonable timeframe.", + "requirements": "Required for audit purposes and adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.accident.date", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.accident.type", + "path": "ExplanationOfBenefit.accident.type", + "short": "The nature of the accident", + "definition": "The type or context of the accident event for the purposes of selection of potential insurance coverages and determination of coordination between insurers.", + "requirements": "Coverage may be dependant on the type of accident.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.accident.type", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "AccidentType" + } + ], + "strength": "extensible", + "description": "Type of accident: work place, auto, etc.", + "valueSet": "http://terminology.hl7.org/ValueSet/v3-ActIncidentCode" + } + }, + { + "id": "ExplanationOfBenefit.accident.location[x]", + "path": "ExplanationOfBenefit.accident.location[x]", + "short": "Where the event occurred", + "definition": "The physical location of the accident event.", + "requirements": "Required for audit purposes and determination of applicable insurance liability.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.accident.location[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Address" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Location" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Item" + } + ], + "path": "ExplanationOfBenefit.item", + "short": "Product or service provided", + "definition": "A claim line. Either a simple (a product or service) or a 'group' of details which can also be a simple items or groups of sub-details.", + "requirements": "The items to be processed for adjudication.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "adjudication-has-amount-type-slice", + "severity": "error", + "human": "If Adjudication is present, it must have at least one adjudicationamounttype slice", + "expression": "adjudication.exists() implies (adjudication.where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.id", + "path": "ExplanationOfBenefit.item.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.extension", + "path": "ExplanationOfBenefit.item.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.modifierExtension", + "path": "ExplanationOfBenefit.item.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.sequence", + "path": "ExplanationOfBenefit.item.sequence", + "short": "Item instance identifier", + "definition": "A number to uniquely identify item entries.", + "comment": "Line identification number that represents the number assigned in a source system for identification and processing. (36)", + "requirements": "Necessary to provide a mechanism to link to items from within the claim and within the adjudication details of the ClaimResponse.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.careTeamSequence", + "path": "ExplanationOfBenefit.item.careTeamSequence", + "short": "Applicable care team members", + "definition": "Care team members related to this service or product.", + "requirements": "Need to identify the individuals and their roles in the provision of the product or service.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.careTeamSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.diagnosisSequence", + "path": "ExplanationOfBenefit.item.diagnosisSequence", + "short": "Applicable diagnoses", + "definition": "Diagnoses applicable for this service or product.", + "requirements": "Need to related the product or service to the associated diagnoses.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.diagnosisSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.procedureSequence", + "path": "ExplanationOfBenefit.item.procedureSequence", + "short": "Applicable procedures", + "definition": "Procedures applicable for this service or product.", + "requirements": "Need to provide any listed specific procedures to support the product or service being claimed.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.procedureSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.informationSequence", + "path": "ExplanationOfBenefit.item.informationSequence", + "short": "Applicable exception and supporting information", + "definition": "Exceptions, special conditions and supporting information applicable for this service or product.", + "requirements": "Need to reference the supporting information items that relate directly to this product or service.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.informationSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.revenue", + "path": "ExplanationOfBenefit.item.revenue", + "short": "Revenue or cost center code", + "definition": "The type of revenue or cost center providing the product and/or service.", + "comment": "Code used on the UB-04 (Form Locator 42) to identify a specific accommodation, ancillary service, or billing calculation related to the service being billed (86)", + "requirements": "Needed in the processing of institutional claims.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.revenue", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCRevenueCodes" + } + }, + { + "id": "ExplanationOfBenefit.item.category", + "path": "ExplanationOfBenefit.item.category", + "short": "Benefit classification", + "definition": "Code to identify the general type of benefits under which products and services are provided.", + "comment": "Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.", + "requirements": "Needed in the processing of institutional claims as this allows the insurer to determine whether a facial X-Ray is for dental, orthopedic, or facial surgery purposes.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.category", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitCategory" + } + ], + "strength": "example", + "description": "Benefit categories such as: oral, medical, vision, oral-basic etc.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-benefitcategory" + } + }, + { + "id": "ExplanationOfBenefit.item.productOrService", + "path": "ExplanationOfBenefit.item.productOrService", + "short": "Billing, service, product, or drug code", + "definition": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", + "comment": "Medical procedure a patient received from a health care provider. Current coding methods include: CPT-4 and HCFA Common Procedure Coding System Level II - (HCPCSII). (40)", + "requirements": "Necessary to state what was provided or done.", + "alias": [ + "Drug Code", + "Bill Code", + "Service Code" + ], + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.productOrService", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSProcedureCodes" + } + }, + { + "id": "ExplanationOfBenefit.item.modifier", + "path": "ExplanationOfBenefit.item.modifier", + "short": "Product or service billing modifiers", + "definition": "Item typification or modifiers codes to convey additional context for the product or service.", + "comment": "Modifier(s) for the procedure represented on this line. Identifies special circumstances related to the performance of the service. (41)", + "requirements": "To support inclusion of the item for adjudication or to charge an elevated fee.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.modifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSModifiers" + } + }, + { + "id": "ExplanationOfBenefit.item.programCode", + "path": "ExplanationOfBenefit.item.programCode", + "short": "Program the product or service is provided under", + "definition": "Identifies the program under which this may be recovered.", + "comment": "For example: Neonatal program, child dental program or drug users recovery program.", + "requirements": "Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.programCode", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ProgramCode" + } + ], + "strength": "example", + "description": "Program specific reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-program-code" + } + }, + { + "id": "ExplanationOfBenefit.item.serviced[x]", + "path": "ExplanationOfBenefit.item.serviced[x]", + "short": "Date or dates of service or product delivery", + "definition": "The date or dates when the service or product was supplied, performed or completed.", + "requirements": "Needed to determine whether the service or product was provided during the term of the insurance coverage.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.serviced[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.done[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.location[x]", + "path": "ExplanationOfBenefit.item.location[x]", + "short": "Place of service or where product was supplied", + "definition": "Where the product or service was provided.", + "requirements": "The location can alter whether the item was acceptable for insurance purposes or impact the determination of the benefit amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.location[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + }, + { + "code": "Address" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Location" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServicePlace" + } + ], + "strength": "example", + "description": "Place where the service is rendered.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-place" + }, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.where[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.quantity", + "path": "ExplanationOfBenefit.item.quantity", + "short": "Count of products or services", + "definition": "The number of repetitions of a service or product.", + "comment": "The quantity of units, times, days, visits, services, or treatments for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (42)", + "requirements": "Required when the product or service code does not convey the quantity provided.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.quantity", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Quantity", + "profile": [ + "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.unitPrice", + "path": "ExplanationOfBenefit.item.unitPrice", + "short": "Fee, charge or cost per item", + "definition": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", + "requirements": "The amount charged to the patient by the provider for a single unit.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.unitPrice", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.factor", + "path": "ExplanationOfBenefit.item.factor", + "short": "Price scaling factor", + "definition": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", + "comment": "To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).", + "requirements": "When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.factor", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.net", + "path": "ExplanationOfBenefit.item.net", + "short": "Total item cost", + "definition": "The quantity times the unit price for an additional service or product or charge.", + "comment": "For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.", + "requirements": "Provides the total amount claimed for the group (if a grouper) or the line item.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.net", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.udi", + "path": "ExplanationOfBenefit.item.udi", + "short": "Unique device identifier", + "definition": "Unique Device Identifiers associated with this line item.", + "requirements": "The UDI code allows the insurer to obtain device level information on the product supplied.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.udi", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Device" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.bodySite", + "path": "ExplanationOfBenefit.item.bodySite", + "short": "Anatomical location", + "definition": "Physical service site on the patient (limb, tooth, etc.).", + "comment": "For example: Providing a tooth code, allows an insurer to identify a provider performing a filling on a tooth that was previously removed.", + "requirements": "Allows insurer to validate specific procedures.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.bodySite", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "OralSites" + } + ], + "strength": "example", + "description": "The code for the teeth, quadrant, sextant and arch.", + "valueSet": "http://hl7.org/fhir/ValueSet/tooth" + } + }, + { + "id": "ExplanationOfBenefit.item.subSite", + "path": "ExplanationOfBenefit.item.subSite", + "short": "Anatomical sub-location", + "definition": "A region or surface of the bodySite, e.g. limb region or tooth surface(s).", + "requirements": "Allows insurer to validate specific procedures.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.subSite", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Surface" + } + ], + "strength": "example", + "description": "The code for the tooth surface and surface combinations.", + "valueSet": "http://hl7.org/fhir/ValueSet/surface" + } + }, + { + "id": "ExplanationOfBenefit.item.encounter", + "path": "ExplanationOfBenefit.item.encounter", + "short": "Encounters related to this billed item", + "definition": "A billed item may include goods or services provided in multiple encounters.", + "requirements": "Used in some jurisdictions to link clinical events to claim items.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.encounter", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Encounter" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.noteNumber", + "path": "ExplanationOfBenefit.item.noteNumber", + "short": "Applicable note numbers", + "definition": "The numbers associated with notes below which apply to the adjudication of this item.", + "comment": "References number of the associated processNote entered", + "requirements": "Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.noteNumber", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Adjudication" + } + ], + "path": "ExplanationOfBenefit.item.adjudication", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on value pattern", + "ordered": false, + "rules": "closed" + }, + "short": "Adjudication details", + "definition": "If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.", + "requirements": "The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication.id", + "path": "ExplanationOfBenefit.item.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication.extension", + "path": "ExplanationOfBenefit.item.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication.modifierExtension", + "path": "ExplanationOfBenefit.item.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication.reason", + "path": "ExplanationOfBenefit.item.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "For example, may indicate that the funds for this benefit type have been exhausted.", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "AdjudicationReason" + } + ], + "strength": "example", + "description": "Adjudication reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication-reason" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication.amount", + "path": "ExplanationOfBenefit.item.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication.value", + "path": "ExplanationOfBenefit.item.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Adjudication" + } + ], + "path": "ExplanationOfBenefit.item.adjudication", + "sliceName": "adjudicationamounttype", + "short": "Adjudication details", + "definition": "If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.", + "comment": "Describes the various amount fields used when payers receive and adjudicate a claim. (187)", + "requirements": "The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.id", + "path": "ExplanationOfBenefit.item.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.extension", + "path": "ExplanationOfBenefit.item.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.modifierExtension", + "path": "ExplanationOfBenefit.item.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.reason", + "path": "ExplanationOfBenefit.item.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "For example, may indicate that the funds for this benefit type have been exhausted.", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "AdjudicationReason" + } + ], + "strength": "example", + "description": "Adjudication reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication-reason" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.amount", + "path": "ExplanationOfBenefit.item.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.value", + "path": "ExplanationOfBenefit.item.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Adjudication" + } + ], + "path": "ExplanationOfBenefit.item.adjudication", + "sliceName": "denialreason", + "short": "Adjudication details", + "definition": "If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.", + "comment": "Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)", + "requirements": "The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.id", + "path": "ExplanationOfBenefit.item.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.extension", + "path": "ExplanationOfBenefit.item.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.modifierExtension", + "path": "ExplanationOfBenefit.item.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator", + "code": "denialreason" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Adjudication" + } + ], + "strength": "example", + "description": "The adjudication codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.reason", + "path": "ExplanationOfBenefit.item.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "For example, may indicate that the funds for this benefit type have been exhausted.", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.amount", + "path": "ExplanationOfBenefit.item.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.value", + "path": "ExplanationOfBenefit.item.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Adjudication" + } + ], + "path": "ExplanationOfBenefit.item.adjudication", + "sliceName": "allowedunits", + "short": "Adjudication details", + "definition": "If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.", + "comment": "The quantity of units, times, days, visits, services, or treatments allowed for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (149)", + "requirements": "The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.id", + "path": "ExplanationOfBenefit.item.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.extension", + "path": "ExplanationOfBenefit.item.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.modifierExtension", + "path": "ExplanationOfBenefit.item.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator", + "code": "allowedunits" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Adjudication" + } + ], + "strength": "example", + "description": "The adjudication codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.reason", + "path": "ExplanationOfBenefit.item.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "For example, may indicate that the funds for this benefit type have been exhausted.", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "AdjudicationReason" + } + ], + "strength": "example", + "description": "Adjudication reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication-reason" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.amount", + "path": "ExplanationOfBenefit.item.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.value", + "path": "ExplanationOfBenefit.item.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Detail" + } + ], + "path": "ExplanationOfBenefit.item.detail", + "short": "Additional items", + "definition": "Second-tier of goods and services.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.id", + "path": "ExplanationOfBenefit.item.detail.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.detail.extension", + "path": "ExplanationOfBenefit.item.detail.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.detail.modifierExtension", + "path": "ExplanationOfBenefit.item.detail.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.detail.sequence", + "path": "ExplanationOfBenefit.item.detail.sequence", + "short": "Product or service provided", + "definition": "A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.", + "requirements": "The items to be processed for adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.revenue", + "path": "ExplanationOfBenefit.item.detail.revenue", + "short": "Revenue or cost center code", + "definition": "The type of revenue or cost center providing the product and/or service.", + "requirements": "Needed in the processing of institutional claims.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.revenue", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "RevenueCenter" + } + ], + "strength": "example", + "description": "Codes for the revenue or cost centers supplying the service and/or products.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-revenue-center" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.category", + "path": "ExplanationOfBenefit.item.detail.category", + "short": "Benefit classification", + "definition": "Code to identify the general type of benefits under which products and services are provided.", + "comment": "Examples include: Medical Care, Periodontics, Renal Dialysis, Vision Coverage.", + "requirements": "Needed in the processing of institutional claims as this allows the insurer to determine whether a facial X-Ray is for dental, orthopedic, or facial surgery purposes.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.category", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitCategory" + } + ], + "strength": "example", + "description": "Benefit categories such as: oral, medical, vision, oral-basic etc.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-benefitcategory" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.productOrService", + "path": "ExplanationOfBenefit.item.detail.productOrService", + "short": "Billing, service, product, or drug code", + "definition": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", + "comment": "If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.", + "requirements": "Necessary to state what was provided or done.", + "alias": [ + "Drug Code", + "Bill Code", + "Service Code" + ], + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.productOrService", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServiceProduct" + } + ], + "strength": "example", + "description": "Allowable service and product codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-uscls" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.modifier", + "path": "ExplanationOfBenefit.item.detail.modifier", + "short": "Service/Product billing modifiers", + "definition": "Item typification or modifiers codes to convey additional context for the product or service.", + "comment": "For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.", + "requirements": "To support inclusion of the item for adjudication or to charge an elevated fee.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.modifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Modifiers" + } + ], + "strength": "example", + "description": "Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-modifiers" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.programCode", + "path": "ExplanationOfBenefit.item.detail.programCode", + "short": "Program the product or service is provided under", + "definition": "Identifies the program under which this may be recovered.", + "comment": "For example: Neonatal program, child dental program or drug users recovery program.", + "requirements": "Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.programCode", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ProgramCode" + } + ], + "strength": "example", + "description": "Program specific reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-program-code" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.quantity", + "path": "ExplanationOfBenefit.item.detail.quantity", + "short": "Count of products or services", + "definition": "The number of repetitions of a service or product.", + "requirements": "Required when the product or service code does not convey the quantity provided.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.quantity", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Quantity", + "profile": [ + "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.unitPrice", + "path": "ExplanationOfBenefit.item.detail.unitPrice", + "short": "Fee, charge or cost per item", + "definition": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", + "requirements": "The amount charged to the patient by the provider for a single unit.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.unitPrice", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.factor", + "path": "ExplanationOfBenefit.item.detail.factor", + "short": "Price scaling factor", + "definition": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", + "comment": "To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).", + "requirements": "When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.factor", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.net", + "path": "ExplanationOfBenefit.item.detail.net", + "short": "Total item cost", + "definition": "The quantity times the unit price for an additional service or product or charge.", + "comment": "For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.", + "requirements": "Provides the total amount claimed for the group (if a grouper) or the line item.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.net", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.udi", + "path": "ExplanationOfBenefit.item.detail.udi", + "short": "Unique device identifier", + "definition": "Unique Device Identifiers associated with this line item.", + "requirements": "The UDI code allows the insurer to obtain device level information on the product supplied.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.udi", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Device" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.noteNumber", + "path": "ExplanationOfBenefit.item.detail.noteNumber", + "short": "Applicable note numbers", + "definition": "The numbers associated with notes below which apply to the adjudication of this item.", + "requirements": "Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.noteNumber", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.adjudication", + "path": "ExplanationOfBenefit.item.detail.adjudication", + "short": "Detail level adjudication details", + "definition": "The adjudication results.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.adjudication", + "min": 0, + "max": "*" + }, + "contentReference": "http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SubDetail" + } + ], + "path": "ExplanationOfBenefit.item.detail.subDetail", + "short": "Additional items", + "definition": "Third-tier of goods and services.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.id", + "path": "ExplanationOfBenefit.item.detail.subDetail.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.extension", + "path": "ExplanationOfBenefit.item.detail.subDetail.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.modifierExtension", + "path": "ExplanationOfBenefit.item.detail.subDetail.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.sequence", + "path": "ExplanationOfBenefit.item.detail.subDetail.sequence", + "short": "Product or service provided", + "definition": "A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.", + "requirements": "The items to be processed for adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.revenue", + "path": "ExplanationOfBenefit.item.detail.subDetail.revenue", + "short": "Revenue or cost center code", + "definition": "The type of revenue or cost center providing the product and/or service.", + "requirements": "Needed in the processing of institutional claims.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.revenue", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "RevenueCenter" + } + ], + "strength": "example", + "description": "Codes for the revenue or cost centers supplying the service and/or products.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-revenue-center" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.category", + "path": "ExplanationOfBenefit.item.detail.subDetail.category", + "short": "Benefit classification", + "definition": "Code to identify the general type of benefits under which products and services are provided.", + "comment": "Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.", + "requirements": "Needed in the processing of institutional claims as this allows the insurer to determine whether a facial X-Ray is for dental, orthopedic, or facial surgery purposes.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.category", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitCategory" + } + ], + "strength": "example", + "description": "Benefit categories such as: oral, medical, vision, oral-basic etc.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-benefitcategory" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.productOrService", + "path": "ExplanationOfBenefit.item.detail.subDetail.productOrService", + "short": "Billing, service, product, or drug code", + "definition": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", + "comment": "If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.", + "requirements": "Necessary to state what was provided or done.", + "alias": [ + "Drug Code", + "Bill Code", + "Service Code" + ], + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.productOrService", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServiceProduct" + } + ], + "strength": "example", + "description": "Allowable service and product codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-uscls" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.modifier", + "path": "ExplanationOfBenefit.item.detail.subDetail.modifier", + "short": "Service/Product billing modifiers", + "definition": "Item typification or modifiers codes to convey additional context for the product or service.", + "comment": "For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or outside of office hours.", + "requirements": "To support inclusion of the item for adjudication or to charge an elevated fee.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.modifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Modifiers" + } + ], + "strength": "example", + "description": "Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-modifiers" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.programCode", + "path": "ExplanationOfBenefit.item.detail.subDetail.programCode", + "short": "Program the product or service is provided under", + "definition": "Identifies the program under which this may be recovered.", + "comment": "For example: Neonatal program, child dental program or drug users recovery program.", + "requirements": "Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.programCode", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ProgramCode" + } + ], + "strength": "example", + "description": "Program specific reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-program-code" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.quantity", + "path": "ExplanationOfBenefit.item.detail.subDetail.quantity", + "short": "Count of products or services", + "definition": "The number of repetitions of a service or product.", + "requirements": "Required when the product or service code does not convey the quantity provided.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.quantity", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Quantity", + "profile": [ + "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.unitPrice", + "path": "ExplanationOfBenefit.item.detail.subDetail.unitPrice", + "short": "Fee, charge or cost per item", + "definition": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", + "requirements": "The amount charged to the patient by the provider for a single unit.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.unitPrice", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.factor", + "path": "ExplanationOfBenefit.item.detail.subDetail.factor", + "short": "Price scaling factor", + "definition": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", + "comment": "To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).", + "requirements": "When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.factor", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.net", + "path": "ExplanationOfBenefit.item.detail.subDetail.net", + "short": "Total item cost", + "definition": "The quantity times the unit price for an additional service or product or charge.", + "comment": "For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.", + "requirements": "Provides the total amount claimed for the group (if a grouper) or the line item.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.net", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.udi", + "path": "ExplanationOfBenefit.item.detail.subDetail.udi", + "short": "Unique device identifier", + "definition": "Unique Device Identifiers associated with this line item.", + "requirements": "The UDI code allows the insurer to obtain device level information on the product supplied.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.udi", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Device" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.noteNumber", + "path": "ExplanationOfBenefit.item.detail.subDetail.noteNumber", + "short": "Applicable note numbers", + "definition": "The numbers associated with notes below which apply to the adjudication of this item.", + "requirements": "Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.noteNumber", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.adjudication", + "path": "ExplanationOfBenefit.item.detail.subDetail.adjudication", + "short": "Subdetail level adjudication details", + "definition": "The adjudication results.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.adjudication", + "min": 0, + "max": "*" + }, + "contentReference": "http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "740;600" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "AddedItem" + } + ], + "path": "ExplanationOfBenefit.addItem", + "short": "Insurer added line items", + "definition": "The first-tier service adjudications for payor added product or service lines.", + "requirements": "Insurers may redefine the provided product or service or may package and/or decompose groups of products and services. The addItems allows the insurer to provide their line item list with linkage to the submitted items/details/sub-details. In a preauthorization the insurer may use the addItem structure to provide additional information on authorized products and services.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.id", + "path": "ExplanationOfBenefit.addItem.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.extension", + "path": "ExplanationOfBenefit.addItem.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.modifierExtension", + "path": "ExplanationOfBenefit.addItem.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.itemSequence", + "path": "ExplanationOfBenefit.addItem.itemSequence", + "short": "Item sequence number", + "definition": "Claim items which this service line is intended to replace.", + "requirements": "Provides references to the claim items.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.itemSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detailSequence", + "path": "ExplanationOfBenefit.addItem.detailSequence", + "short": "Detail sequence number", + "definition": "The sequence number of the details within the claim item which this line is intended to replace.", + "requirements": "Provides references to the claim details within the claim item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detailSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.subDetailSequence", + "path": "ExplanationOfBenefit.addItem.subDetailSequence", + "short": "Subdetail sequence number", + "definition": "The sequence number of the sub-details woithin the details within the claim item which this line is intended to replace.", + "requirements": "Provides references to the claim sub-details within the claim detail.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.subDetailSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.provider", + "path": "ExplanationOfBenefit.addItem.provider", + "short": "Authorized providers", + "definition": "The providers who are authorized for the services rendered to the patient.", + "requirements": "Insurer may provide authorization specifically to a restricted set of providers rather than an open authorization.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.provider", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Practitioner", + "http://hl7.org/fhir/StructureDefinition/PractitionerRole", + "http://hl7.org/fhir/StructureDefinition/Organization" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.source" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.productOrService", + "path": "ExplanationOfBenefit.addItem.productOrService", + "short": "Billing, service, product, or drug code", + "definition": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", + "comment": "If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.", + "requirements": "Necessary to state what was provided or done.", + "alias": [ + "Drug Code", + "Bill Code", + "Service Code" + ], + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.productOrService", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServiceProduct" + } + ], + "strength": "example", + "description": "Allowable service and product codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-uscls" + } + }, + { + "id": "ExplanationOfBenefit.addItem.modifier", + "path": "ExplanationOfBenefit.addItem.modifier", + "short": "Service/Product billing modifiers", + "definition": "Item typification or modifiers codes to convey additional context for the product or service.", + "comment": "For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.", + "requirements": "To support inclusion of the item for adjudication or to charge an elevated fee.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.modifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Modifiers" + } + ], + "strength": "example", + "description": "Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-modifiers" + } + }, + { + "id": "ExplanationOfBenefit.addItem.programCode", + "path": "ExplanationOfBenefit.addItem.programCode", + "short": "Program the product or service is provided under", + "definition": "Identifies the program under which this may be recovered.", + "comment": "For example: Neonatal program, child dental program or drug users recovery program.", + "requirements": "Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.programCode", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ProgramCode" + } + ], + "strength": "example", + "description": "Program specific reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-program-code" + } + }, + { + "id": "ExplanationOfBenefit.addItem.serviced[x]", + "path": "ExplanationOfBenefit.addItem.serviced[x]", + "short": "Date or dates of service or product delivery", + "definition": "The date or dates when the service or product was supplied, performed or completed.", + "requirements": "Needed to determine whether the service or product was provided during the term of the insurance coverage.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.serviced[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.done[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.location[x]", + "path": "ExplanationOfBenefit.addItem.location[x]", + "short": "Place of service or where product was supplied", + "definition": "Where the product or service was provided.", + "requirements": "The location can alter whether the item was acceptable for insurance purposes or impact the determination of the benefit amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.location[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + }, + { + "code": "Address" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Location" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServicePlace" + } + ], + "strength": "example", + "description": "Place where the service is rendered.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-place" + }, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.where[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.quantity", + "path": "ExplanationOfBenefit.addItem.quantity", + "short": "Count of products or services", + "definition": "The number of repetitions of a service or product.", + "requirements": "Required when the product or service code does not convey the quantity provided.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.quantity", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Quantity", + "profile": [ + "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.unitPrice", + "path": "ExplanationOfBenefit.addItem.unitPrice", + "short": "Fee, charge or cost per item", + "definition": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", + "requirements": "The amount charged to the patient by the provider for a single unit.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.unitPrice", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.factor", + "path": "ExplanationOfBenefit.addItem.factor", + "short": "Price scaling factor", + "definition": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", + "comment": "To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).", + "requirements": "When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.factor", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.net", + "path": "ExplanationOfBenefit.addItem.net", + "short": "Total item cost", + "definition": "The quantity times the unit price for an additional service or product or charge.", + "comment": "For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.", + "requirements": "Provides the total amount claimed for the group (if a grouper) or the line item.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.net", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.bodySite", + "path": "ExplanationOfBenefit.addItem.bodySite", + "short": "Anatomical location", + "definition": "Physical service site on the patient (limb, tooth, etc.).", + "comment": "For example, providing a tooth code allows an insurer to identify a provider performing a filling on a tooth that was previously removed.", + "requirements": "Allows insurer to validate specific procedures.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.bodySite", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "OralSites" + } + ], + "strength": "example", + "description": "The code for the teeth, quadrant, sextant and arch.", + "valueSet": "http://hl7.org/fhir/ValueSet/tooth" + } + }, + { + "id": "ExplanationOfBenefit.addItem.subSite", + "path": "ExplanationOfBenefit.addItem.subSite", + "short": "Anatomical sub-location", + "definition": "A region or surface of the bodySite, e.g. limb region or tooth surface(s).", + "requirements": "Allows insurer to validate specific procedures.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.subSite", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Surface" + } + ], + "strength": "example", + "description": "The code for the tooth surface and surface combinations.", + "valueSet": "http://hl7.org/fhir/ValueSet/surface" + } + }, + { + "id": "ExplanationOfBenefit.addItem.noteNumber", + "path": "ExplanationOfBenefit.addItem.noteNumber", + "short": "Applicable note numbers", + "definition": "The numbers associated with notes below which apply to the adjudication of this item.", + "requirements": "Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.noteNumber", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.adjudication", + "path": "ExplanationOfBenefit.addItem.adjudication", + "short": "Added items adjudication", + "definition": "The adjudication results.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.adjudication", + "min": 0, + "max": "*" + }, + "contentReference": "http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "740;600" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "AddedItemDetail" + } + ], + "path": "ExplanationOfBenefit.addItem.detail", + "short": "Insurer added line items", + "definition": "The second-tier service adjudications for payor added services.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.id", + "path": "ExplanationOfBenefit.addItem.detail.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.detail.extension", + "path": "ExplanationOfBenefit.addItem.detail.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.detail.modifierExtension", + "path": "ExplanationOfBenefit.addItem.detail.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.detail.productOrService", + "path": "ExplanationOfBenefit.addItem.detail.productOrService", + "short": "Billing, service, product, or drug code", + "definition": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", + "comment": "If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.", + "requirements": "Necessary to state what was provided or done.", + "alias": [ + "Drug Code", + "Bill Code", + "Service Code" + ], + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.productOrService", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServiceProduct" + } + ], + "strength": "example", + "description": "Allowable service and product codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-uscls" + } + }, + { + "id": "ExplanationOfBenefit.addItem.detail.modifier", + "path": "ExplanationOfBenefit.addItem.detail.modifier", + "short": "Service/Product billing modifiers", + "definition": "Item typification or modifiers codes to convey additional context for the product or service.", + "comment": "For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.", + "requirements": "To support inclusion of the item for adjudication or to charge an elevated fee.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.modifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Modifiers" + } + ], + "strength": "example", + "description": "Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-modifiers" + } + }, + { + "id": "ExplanationOfBenefit.addItem.detail.quantity", + "path": "ExplanationOfBenefit.addItem.detail.quantity", + "short": "Count of products or services", + "definition": "The number of repetitions of a service or product.", + "requirements": "Required when the product or service code does not convey the quantity provided.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.quantity", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Quantity", + "profile": [ + "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.unitPrice", + "path": "ExplanationOfBenefit.addItem.detail.unitPrice", + "short": "Fee, charge or cost per item", + "definition": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", + "requirements": "The amount charged to the patient by the provider for a single unit.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.unitPrice", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.factor", + "path": "ExplanationOfBenefit.addItem.detail.factor", + "short": "Price scaling factor", + "definition": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", + "comment": "To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).", + "requirements": "When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.factor", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.net", + "path": "ExplanationOfBenefit.addItem.detail.net", + "short": "Total item cost", + "definition": "The quantity times the unit price for an additional service or product or charge.", + "comment": "For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.", + "requirements": "Provides the total amount claimed for the group (if a grouper) or the line item.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.net", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.noteNumber", + "path": "ExplanationOfBenefit.addItem.detail.noteNumber", + "short": "Applicable note numbers", + "definition": "The numbers associated with notes below which apply to the adjudication of this item.", + "requirements": "Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.noteNumber", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.adjudication", + "path": "ExplanationOfBenefit.addItem.detail.adjudication", + "short": "Added items adjudication", + "definition": "The adjudication results.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.adjudication", + "min": 0, + "max": "*" + }, + "contentReference": "http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "740;600" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "AddedItemDetailSubDetail" + } + ], + "path": "ExplanationOfBenefit.addItem.detail.subDetail", + "short": "Insurer added line items", + "definition": "The third-tier service adjudications for payor added services.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.id", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.extension", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.modifierExtension", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.productOrService", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.productOrService", + "short": "Billing, service, product, or drug code", + "definition": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", + "comment": "If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.", + "requirements": "Necessary to state what was provided or done.", + "alias": [ + "Drug Code", + "Bill Code", + "Service Code" + ], + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.productOrService", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServiceProduct" + } + ], + "strength": "example", + "description": "Allowable service and product codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-uscls" + } + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.modifier", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.modifier", + "short": "Service/Product billing modifiers", + "definition": "Item typification or modifiers codes to convey additional context for the product or service.", + "comment": "For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.", + "requirements": "To support inclusion of the item for adjudication or to charge an elevated fee.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.modifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Modifiers" + } + ], + "strength": "example", + "description": "Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-modifiers" + } + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.quantity", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.quantity", + "short": "Count of products or services", + "definition": "The number of repetitions of a service or product.", + "requirements": "Required when the product or service code does not convey the quantity provided.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.quantity", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Quantity", + "profile": [ + "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.unitPrice", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.unitPrice", + "short": "Fee, charge or cost per item", + "definition": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", + "requirements": "The amount charged to the patient by the provider for a single unit.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.unitPrice", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.factor", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.factor", + "short": "Price scaling factor", + "definition": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", + "comment": "To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).", + "requirements": "When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.factor", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.net", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.net", + "short": "Total item cost", + "definition": "The quantity times the unit price for an additional service or product or charge.", + "comment": "For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.", + "requirements": "Provides the total amount claimed for the group (if a grouper) or the line item.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.net", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.noteNumber", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.noteNumber", + "short": "Applicable note numbers", + "definition": "The numbers associated with notes below which apply to the adjudication of this item.", + "requirements": "Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.noteNumber", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.adjudication", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.adjudication", + "short": "Added items adjudication", + "definition": "The adjudication results.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.adjudication", + "min": 0, + "max": "*" + }, + "contentReference": "http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication", + "path": "ExplanationOfBenefit.adjudication", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on value pattern", + "ordered": false, + "rules": "closed" + }, + "short": "Header-level adjudication", + "definition": "The adjudication results which are presented at the header level rather than at the line-item or add-item levels.", + "requirements": "Some insurers will receive line-items but provide the adjudication only at a summary or header-level.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication.id", + "path": "ExplanationOfBenefit.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication.extension", + "path": "ExplanationOfBenefit.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication.modifierExtension", + "path": "ExplanationOfBenefit.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication.category", + "path": "ExplanationOfBenefit.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator" + } + }, + { + "id": "ExplanationOfBenefit.adjudication.reason", + "path": "ExplanationOfBenefit.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "For example, may indicate that the funds for this benefit type have been exhausted.", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "AdjudicationReason" + } + ], + "strength": "example", + "description": "Adjudication reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication-reason" + } + }, + { + "id": "ExplanationOfBenefit.adjudication.amount", + "path": "ExplanationOfBenefit.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication.value", + "path": "ExplanationOfBenefit.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype", + "path": "ExplanationOfBenefit.adjudication", + "sliceName": "adjudicationamounttype", + "short": "Header-level adjudication", + "definition": "The adjudication results which are presented at the header level rather than at the line-item or add-item levels.", + "comment": "Describes the various amount fields used when payers receive and adjudicate a claim. (187)", + "requirements": "Some insurers will receive line-items but provide the adjudication only at a summary or header-level.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.id", + "path": "ExplanationOfBenefit.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.extension", + "path": "ExplanationOfBenefit.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.modifierExtension", + "path": "ExplanationOfBenefit.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.category", + "path": "ExplanationOfBenefit.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication" + } + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.reason", + "path": "ExplanationOfBenefit.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "For example, may indicate that the funds for this benefit type have been exhausted.", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "AdjudicationReason" + } + ], + "strength": "example", + "description": "Adjudication reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication-reason" + } + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.amount", + "path": "ExplanationOfBenefit.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.value", + "path": "ExplanationOfBenefit.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason", + "path": "ExplanationOfBenefit.adjudication", + "sliceName": "denialreason", + "short": "Header-level adjudication", + "definition": "The adjudication results which are presented at the header level rather than at the line-item or add-item levels.", + "comment": "Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)", + "requirements": "Some insurers will receive line-items but provide the adjudication only at a summary or header-level.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.id", + "path": "ExplanationOfBenefit.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.extension", + "path": "ExplanationOfBenefit.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.modifierExtension", + "path": "ExplanationOfBenefit.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.category", + "path": "ExplanationOfBenefit.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator", + "code": "denialreason" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Adjudication" + } + ], + "strength": "example", + "description": "The adjudication codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication" + } + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.reason", + "path": "ExplanationOfBenefit.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes" + } + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.amount", + "path": "ExplanationOfBenefit.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.value", + "path": "ExplanationOfBenefit.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.total", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "'360;620" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Total" + } + ], + "path": "ExplanationOfBenefit.total", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on value pattern", + "ordered": false, + "rules": "open" + }, + "short": "Adjudication totals", + "definition": "Categorized monetary totals for the adjudication.", + "comment": "Totals for amounts submitted, co-pays, benefits payable etc.", + "requirements": "To provide the requestor with financial totals by category for the adjudication.", + "min": 1, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.total", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.total.id", + "path": "ExplanationOfBenefit.total.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.total.extension", + "path": "ExplanationOfBenefit.total.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.total.modifierExtension", + "path": "ExplanationOfBenefit.total.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.total.category", + "path": "ExplanationOfBenefit.total.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to convey the type of total provided.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBTotalCategoryDiscriminator" + } + }, + { + "id": "ExplanationOfBenefit.total.amount", + "path": "ExplanationOfBenefit.total.amount", + "short": "Financial total for the category", + "definition": "Monetary total amount associated with the category.", + "comment": "Total amount for each category (i.e., submitted, allowed, etc.) (148)", + "requirements": "Needed to convey the total monetary amount.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total.amount", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "'360;620" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Total" + } + ], + "path": "ExplanationOfBenefit.total", + "sliceName": "adjudicationamounttype", + "short": "Adjudication totals", + "definition": "Categorized monetary totals for the adjudication.", + "comment": "Describes the various amount fields used when payers receive and adjudicate a claim. (187)", + "requirements": "To provide the requestor with financial totals by category for the adjudication.", + "min": 1, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.total", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.id", + "path": "ExplanationOfBenefit.total.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.extension", + "path": "ExplanationOfBenefit.total.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.modifierExtension", + "path": "ExplanationOfBenefit.total.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.category", + "path": "ExplanationOfBenefit.total.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to convey the type of total provided.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication" + } + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.amount", + "path": "ExplanationOfBenefit.total.amount", + "short": "Financial total for the category", + "definition": "Monetary total amount associated with the category.", + "requirements": "Needed to convey the total monetary amount.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total.amount", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "'360;620" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Total" + } + ], + "path": "ExplanationOfBenefit.total", + "sliceName": "inoutnetwork", + "short": "Adjudication totals", + "definition": "Categorized monetary totals for the adjudication.", + "comment": "Indicates the in network or out of network payment status of the claim. (142)", + "requirements": "To provide the requestor with financial totals by category for the adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork.id", + "path": "ExplanationOfBenefit.total.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork.extension", + "path": "ExplanationOfBenefit.total.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork.modifierExtension", + "path": "ExplanationOfBenefit.total.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork.category", + "path": "ExplanationOfBenefit.total.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to convey the type of total provided.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerBenefitPaymentStatus" + } + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork.amount", + "path": "ExplanationOfBenefit.total.amount", + "short": "Financial total for the category", + "definition": "Monetary total amount associated with the category.", + "requirements": "Needed to convey the total monetary amount.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total.amount", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.payment", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "360;650" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Payment" + } + ], + "path": "ExplanationOfBenefit.payment", + "short": "Payment Details", + "definition": "Payment details for the adjudication of the claim.", + "requirements": "Needed to convey references to the financial instrument that has been used if payment has been made.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.payment.id", + "path": "ExplanationOfBenefit.payment.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.payment.extension", + "path": "ExplanationOfBenefit.payment.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.payment.modifierExtension", + "path": "ExplanationOfBenefit.payment.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.payment.type", + "path": "ExplanationOfBenefit.payment.type", + "short": "Partial or complete payment", + "definition": "Whether this represents partial or complete payment of the benefits payable.", + "comment": "Indicates whether the claim was paid or denied. (91)", + "requirements": "To advise the requestor when the insurer believes all payments to have been completed.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment.type", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerClaimPaymentStatusCode" + } + }, + { + "id": "ExplanationOfBenefit.payment.adjustment", + "path": "ExplanationOfBenefit.payment.adjustment", + "short": "Payment adjustment for non-claim issues", + "definition": "Total amount of all adjustments to this payment included in this transaction which are not related to this claim's adjudication.", + "comment": "Insurers will deduct amounts owing from the provider (adjustment), such as a prior overpayment, from the amount owing to the provider (benefits payable) when payment is made to the provider.", + "requirements": "To advise the requestor of adjustments applied to the payment.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment.adjustment", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.payment.adjustmentReason", + "path": "ExplanationOfBenefit.payment.adjustmentReason", + "short": "Explanation for the variance", + "definition": "Reason for the payment adjustment.", + "requirements": "Needed to clarify the monetary adjustment.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment.adjustmentReason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "PaymentAdjustmentReason" + } + ], + "strength": "example", + "description": "Payment Adjustment reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/payment-adjustment-reason" + } + }, + { + "id": "ExplanationOfBenefit.payment.date", + "path": "ExplanationOfBenefit.payment.date", + "short": "Expected date of payment", + "definition": "Estimated date the payment will be issued or the actual issue date of payment.", + "comment": "The date the claim was paid. (107)", + "requirements": "To advise the payee when payment can be expected.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment.date", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.payment.amount", + "path": "ExplanationOfBenefit.payment.amount", + "short": "Payable amount after adjustment", + "definition": "Benefits payable less any payment adjustment.", + "requirements": "Needed to provide the actual payment amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.payment.identifier", + "path": "ExplanationOfBenefit.payment.identifier", + "short": "Business identifier for the payment", + "definition": "Issuer's unique identifier for the payment instrument.", + "comment": "For example: EFT number or check number.", + "requirements": "Enable the receiver to reconcile when payment received.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment.identifier", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Identifier" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.formCode", + "path": "ExplanationOfBenefit.formCode", + "short": "Printed form identifier", + "definition": "A code for the form to be used for printing the content.", + "comment": "May be needed to identify specific jurisdictional forms.", + "requirements": "Needed to specify the specific form used for producing output for this response.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.formCode", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Forms" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "example", + "description": "The forms codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/forms" + } + }, + { + "id": "ExplanationOfBenefit.form", + "path": "ExplanationOfBenefit.form", + "short": "Printed reference or actual form", + "definition": "The actual form, by reference or inclusion, for printing the content or an EOB.", + "comment": "Needed to permit insurers to include the actual form.", + "requirements": "Needed to include the specific form used for producing output for this response.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.form", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Attachment" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.processNote", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Note" + } + ], + "path": "ExplanationOfBenefit.processNote", + "short": "Note concerning adjudication", + "definition": "A note that describes or explains adjudication results in a human readable form.", + "requirements": "Provides the insurer specific textual explanations associated with the processing.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.processNote", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.processNote.id", + "path": "ExplanationOfBenefit.processNote.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.processNote.extension", + "path": "ExplanationOfBenefit.processNote.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.processNote.modifierExtension", + "path": "ExplanationOfBenefit.processNote.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.processNote.number", + "path": "ExplanationOfBenefit.processNote.number", + "short": "Note instance identifier", + "definition": "A number to uniquely identify a note entry.", + "requirements": "Necessary to provide a mechanism to link from adjudications.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.processNote.number", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.processNote.type", + "path": "ExplanationOfBenefit.processNote.type", + "short": "display | print | printoper", + "definition": "The business purpose of the note text.", + "requirements": "To convey the expectation for when the text is used.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.processNote.type", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "code" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "NoteType" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "required", + "description": "The presentation types of notes.", + "valueSet": "http://hl7.org/fhir/ValueSet/note-type|4.0.1" + } + }, + { + "id": "ExplanationOfBenefit.processNote.text", + "path": "ExplanationOfBenefit.processNote.text", + "short": "Note explanatory text", + "definition": "The explanation or description associated with the processing.", + "comment": "Payment denial explanation to a member, typically goes on the EOB when the payment is denied or disallowed (181)", + "requirements": "Required to provide human readable explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.processNote.text", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "string" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.processNote.language", + "path": "ExplanationOfBenefit.processNote.language", + "short": "Language of the text", + "definition": "A code to define the language used in the text of the note.", + "comment": "Only required if the language is different from the resource language.", + "requirements": "Note text may vary from the resource defined language.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.processNote.language", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-maxValueSet", + "valueCanonical": "http://hl7.org/fhir/ValueSet/all-languages" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Language" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "preferred", + "description": "A human language.", + "valueSet": "http://hl7.org/fhir/ValueSet/languages" + } + }, + { + "id": "ExplanationOfBenefit.benefitPeriod", + "path": "ExplanationOfBenefit.benefitPeriod", + "short": "When the benefits are applicable", + "definition": "The term of the benefits documented in this response.", + "comment": "Not applicable when use=claim.", + "requirements": "Needed as coverages may be multi-year while benefits tend to be annual therefore a separate expression of the benefit period is needed.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitPeriod", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "BenefitBalance" + } + ], + "path": "ExplanationOfBenefit.benefitBalance", + "short": "Balance by Benefit Category", + "definition": "Balance by Benefit Category.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.benefitBalance", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance.id", + "path": "ExplanationOfBenefit.benefitBalance.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.benefitBalance.extension", + "path": "ExplanationOfBenefit.benefitBalance.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.benefitBalance.modifierExtension", + "path": "ExplanationOfBenefit.benefitBalance.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.benefitBalance.category", + "path": "ExplanationOfBenefit.benefitBalance.category", + "short": "Benefit classification", + "definition": "Code to identify the general type of benefits under which products and services are provided.", + "comment": "Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.", + "requirements": "Needed to convey the category of service or product for which eligibility is sought.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitCategory" + } + ], + "strength": "example", + "description": "Benefit categories such as: oral, medical, vision, oral-basic etc.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-benefitcategory" + } + }, + { + "id": "ExplanationOfBenefit.benefitBalance.excluded", + "path": "ExplanationOfBenefit.benefitBalance.excluded", + "short": "Excluded from the plan", + "definition": "True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.", + "requirements": "Needed to identify items that are specifically excluded from the coverage.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.excluded", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance.name", + "path": "ExplanationOfBenefit.benefitBalance.name", + "short": "Short name for the benefit", + "definition": "A short name or tag for the benefit.", + "comment": "For example: MED01, or DENT2.", + "requirements": "Required to align with other plan names.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.name", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "string" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance.description", + "path": "ExplanationOfBenefit.benefitBalance.description", + "short": "Description of the benefit or services covered", + "definition": "A richer description of the benefit or services covered.", + "comment": "For example, 'DENT2 covers 100% of basic, 50% of major but excludes Ortho, Implants and Cosmetic services'.", + "requirements": "Needed for human readable reference.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.description", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "string" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance.network", + "path": "ExplanationOfBenefit.benefitBalance.network", + "short": "In or out of network", + "definition": "Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.", + "requirements": "Needed as in or out of network providers are treated differently under the coverage.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.network", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitNetwork" + } + ], + "strength": "example", + "description": "Code to classify in or out of network services.", + "valueSet": "http://hl7.org/fhir/ValueSet/benefit-network" + } + }, + { + "id": "ExplanationOfBenefit.benefitBalance.unit", + "path": "ExplanationOfBenefit.benefitBalance.unit", + "short": "Individual or family", + "definition": "Indicates if the benefits apply to an individual or to the family.", + "requirements": "Needed for the understanding of the benefits.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.unit", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitUnit" + } + ], + "strength": "example", + "description": "Unit covered/serviced - individual or family.", + "valueSet": "http://hl7.org/fhir/ValueSet/benefit-unit" + } + }, + { + "id": "ExplanationOfBenefit.benefitBalance.term", + "path": "ExplanationOfBenefit.benefitBalance.term", + "short": "Annual or lifetime", + "definition": "The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.", + "requirements": "Needed for the understanding of the benefits.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.term", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitTerm" + } + ], + "strength": "example", + "description": "Coverage unit - annual, lifetime.", + "valueSet": "http://hl7.org/fhir/ValueSet/benefit-term" + } + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Benefit" + } + ], + "path": "ExplanationOfBenefit.benefitBalance.financial", + "short": "Benefit Summary", + "definition": "Benefits Used to date.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.financial", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial.id", + "path": "ExplanationOfBenefit.benefitBalance.financial.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial.extension", + "path": "ExplanationOfBenefit.benefitBalance.financial.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial.modifierExtension", + "path": "ExplanationOfBenefit.benefitBalance.financial.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial.type", + "path": "ExplanationOfBenefit.benefitBalance.financial.type", + "short": "Benefit classification", + "definition": "Classification of benefit being provided.", + "comment": "For example: deductible, visits, benefit amount.", + "requirements": "Needed to convey the nature of the benefit.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.financial.type", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitType" + } + ], + "strength": "example", + "description": "Deductable, visits, co-pay, etc.", + "valueSet": "http://hl7.org/fhir/ValueSet/benefit-type" + } + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial.allowed[x]", + "path": "ExplanationOfBenefit.benefitBalance.financial.allowed[x]", + "short": "Benefits allowed", + "definition": "The quantity of the benefit which is permitted under the coverage.", + "requirements": "Needed to convey the benefits offered under the coverage.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.financial.allowed[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "unsignedInt" + }, + { + "code": "string" + }, + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial.used[x]", + "path": "ExplanationOfBenefit.benefitBalance.financial.used[x]", + "short": "Benefits used", + "definition": "The quantity of the benefit which have been consumed to date.", + "requirements": "Needed to convey the benefits consumed to date.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.financial.used[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "unsignedInt" + }, + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + } + ] + }, + "differential": { + "element": [ + { + "id": "ExplanationOfBenefit", + "path": "ExplanationOfBenefit", + "constraint": [ + { + "key": "dom-2", + "severity": "error", + "human": "If the resource is contained in another resource, it SHALL NOT contain nested Resources", + "expression": "contained.contained.empty()", + "xpath": "not(parent::f:contained and f:contained)", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "dom-3", + "severity": "error", + "human": "If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource", + "expression": "contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()", + "xpath": "not(exists(for $id in f:contained/*/f:id/@value return $contained[not(parent::*/descendant::f:reference/@value=concat('#', $contained/*/id/@value) or descendant::f:reference[@value='#'])]))", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "dom-4", + "severity": "error", + "human": "If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated", + "expression": "contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()", + "xpath": "not(exists(f:contained/*/f:meta/f:versionId)) and not(exists(f:contained/*/f:meta/f:lastUpdated))", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "dom-5", + "severity": "error", + "human": "If a resource is contained in another resource, it SHALL NOT have a security label", + "expression": "contained.meta.security.empty()", + "xpath": "not(exists(f:contained/*/f:meta/f:security))", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice", + "valueBoolean": true + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice-explanation", + "valueMarkdown": "When a resource has no narrative, only systems that fully understand the data can display the resource to a human safely. Including a human readable representation in the resource makes for a much more robust eco-system and cheaper handling of resources by intermediary systems. Some ecosystems restrict distribution of resources to only those systems that do fully understand the resources, and as a consequence implementers may believe that the narrative is superfluous. However experience shows that such eco-systems often open up to new participants over time." + } + ], + "key": "dom-6", + "severity": "warning", + "human": "A resource should have narrative for robust management", + "expression": "text.`div`.exists()", + "xpath": "exists(f:text/h:div)", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "EOB-institutional-item-or-header-adjudication", + "severity": "error", + "human": "Institutional EOB: Should have adjudication at the item or header level, but not both", + "expression": "(adjudication.exists() != item.adjudication.exists())", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional" + }, + { + "key": "adjudication-has-amount-type-slice", + "severity": "error", + "human": "If Adjudication is present, it must have at least one adjudicationamounttype slice", + "expression": "adjudication.exists() implies (adjudication.where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional" + } + ] + }, + { + "id": "ExplanationOfBenefit.type", + "path": "ExplanationOfBenefit.type", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/claim-type", + "code": "institutional" + } + ] + } + }, + { + "id": "ExplanationOfBenefit.billablePeriod", + "path": "ExplanationOfBenefit.billablePeriod", + "min": 1 + }, + { + "id": "ExplanationOfBenefit.billablePeriod.start", + "path": "ExplanationOfBenefit.billablePeriod.start", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.billablePeriod.end", + "path": "ExplanationOfBenefit.billablePeriod.end", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.created", + "path": "ExplanationOfBenefit.created", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.provider", + "path": "ExplanationOfBenefit.provider", + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization" + ] + } + ] + }, + { + "id": "ExplanationOfBenefit.careTeam", + "path": "ExplanationOfBenefit.careTeam", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "EOB-inst-careTeam-practitioner", + "severity": "error", + "human": "Institutional EOB: Careteam roles refer to a practitioner", + "expression": "(\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists() implies\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists().provider.all(resolve() is Practitioner)\n)", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional" + }, + { + "key": "EOB-inst-careTeam-organization", + "severity": "error", + "human": "Institutional EOB: Careteam roles refer to an organization", + "expression": "(\nrole.where(coding.where(code in ('performing' )).exists()).exists() implies\nrole.where(coding.where(code in ('performing' )).exists()).exists().provider.all(resolve() is Organization)\n)", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional" + } + ] + }, + { + "id": "ExplanationOfBenefit.careTeam.role", + "path": "ExplanationOfBenefit.careTeam.role", + "min": 1, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimInstitutionalCareTeamRole" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo", + "path": "ExplanationOfBenefit.supportingInfo", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on $this pattern", + "ordered": false, + "rules": "open" + }, + "min": 1 + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "billingnetworkcontractingstatus", + "comment": "Indicates that the Billing Provider has a contract with the Plan (regardless of the network) as of the effective date of service or admission. (101)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "billingnetworkcontractingstatus" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerProviderContractingStatus" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "admissionperiod", + "comment": "The Period.start date corresponds with the date the beneficiary was admitted to a facility and the onset of services. May precede the Statement From Date if this claim is for a beneficiary who has been continuously under care. The Period.end date corresponds with the date beneficiary was discharged from the facility, or died. Matches the final Statement Thru Date. When there is a discharge date, the Patient Discharge Status Code indicates the final disposition of the patient after discharge. (18, 19)", + "min": 1, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "admissionperiod" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "slicing": { + "discriminator": [ + { + "type": "type", + "path": "$this" + } + ], + "ordered": false, + "rules": "open" + }, + "min": 1 + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admissionperiod.timingPeriod", + "path": "ExplanationOfBenefit.supportingInfo.timingPeriod", + "min": 1, + "max": "1", + "type": [ + { + "code": "Period" + } + ], + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "clmrecvddate", + "comment": "The date the claim was received by the payer (88)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "clmrecvddate" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 1, + "type": [ + { + "code": "date" + } + ], + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "typeofbill", + "comment": "UB04 (Form Locator 4) type of bill code provides specific information for payer purposes. The first digit of the three-digit number denotes the type of institution, the second digit classifies the type of care being billed, and the third digit identifies the frequency of the bill for a specific course of treatment or inpatient confinement. (17)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "typeofbill" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCTypeOfBill" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "pointoforigin", + "comment": "Identifies the place where the patient was identified as needing admission to an institution. This is a two position code mapped from the standard values for the UB-04 Source of Admission code (FL-15). (13)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "pointoforigin" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPointOfOriginForAdmissionOrVisit" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "admtype", + "comment": "Priority of the admission. Information located on (UB04 Form Locator 14). For example, an admission type of elective indicates that the patient's condition permitted time for medical services to be scheduled. (14)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "admtype" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPriorityTypeOfAdmissionOrVisit" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "discharge-status", + "comment": "Patient’s status as of the discharge date for a facility stay. Information located on UB04. (Form Locator 17). (117)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "discharge-status" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPatientDischargeStatus" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:drg", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "drg", + "comment": "Claim diagnosis related group (DRG). DRGs require the DRG system; i.e., MS-DRG / AP-DRG / APR-DRG, the DRG version and the code value (32, 33. 113)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:drg.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "drg" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:drg.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/CMSMS3MAPAPRDRG" + } + }, + { + "id": "ExplanationOfBenefit.diagnosis", + "path": "ExplanationOfBenefit.diagnosis", + "comment": "Diagnosis codes describe an individual's disease or medical condition. (6, 7, 8, 21, 22, 23, 30)", + "min": 1, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.diagnosis.sequence", + "path": "ExplanationOfBenefit.diagnosis.sequence", + "comment": "Diagnosis.sequence values do not necessarily indiate any order in which the diagnosis was reported or identified. client app implementations should not assign any significance to the sequence values. client app implementations should use the values of diagnosis.type to identify primary, secondary, etc." + }, + { + "id": "ExplanationOfBenefit.diagnosis.diagnosis[x]", + "path": "ExplanationOfBenefit.diagnosis.diagnosis[x]", + "type": [ + { + "code": "CodeableConcept" + } + ], + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/CDCICD910CMDiagnosisCodes" + } + }, + { + "id": "ExplanationOfBenefit.diagnosis.type", + "path": "ExplanationOfBenefit.diagnosis.type", + "comment": "Indicates if the inpatient institutional diagnosis is admitting, principal, other or an external cause of injury. (21, 22, 23)", + "min": 1, + "max": "1", + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimInpatientInstitutionalDiagnosisType" + } + }, + { + "id": "ExplanationOfBenefit.diagnosis.onAdmission", + "path": "ExplanationOfBenefit.diagnosis.onAdmission", + "comment": "Used to capture whether a diagnosis was present at time of a patient's admission. (28)", + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPresentOnAdmission" + } + }, + { + "id": "ExplanationOfBenefit.procedure", + "path": "ExplanationOfBenefit.procedure", + "comment": "Medical procedure a patient received during inpatient stay. Current coding methods include: International Classification of Diseases Surgical Procedures (ICD-9). Information located on UB04 (Form Locator 74). (25, 27, 10, 12)", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.procedure.sequence", + "path": "ExplanationOfBenefit.procedure.sequence", + "comment": " procedure.sequence values do not necessarily indiate any order in which the procedure occurred. client app implementations should not assign any significance to the sequence values. client app implementations should use the values of procedure.type to identify primary and secondary procedures" + }, + { + "id": "ExplanationOfBenefit.procedure.type", + "path": "ExplanationOfBenefit.procedure.type", + "comment": "Indicates if the inpatient institutional procedure (ICD-PCS) is the principal procedure or another procedure. (186)", + "min": 1, + "max": "1", + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimProcedureType" + } + }, + { + "id": "ExplanationOfBenefit.procedure.date", + "path": "ExplanationOfBenefit.procedure.date", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.procedure.procedure[x]", + "path": "ExplanationOfBenefit.procedure.procedure[x]", + "type": [ + { + "code": "CodeableConcept" + } + ], + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/CMSICD910PCSProcedureCodes" + } + }, + { + "id": "ExplanationOfBenefit.insurance", + "path": "ExplanationOfBenefit.insurance", + "max": "1" + }, + { + "id": "ExplanationOfBenefit.item", + "path": "ExplanationOfBenefit.insurance", + "constraint": [ + { + "key": "adjudication-has-amount-type-slice", + "severity": "error", + "human": "If Adjudication is present, it must have at least one adjudicationamounttype slice", + "expression": "adjudication.exists() implies (adjudication.where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Inpatient-Institutional" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.revenue", + "path": "ExplanationOfBenefit.item.revenue", + "comment": "Code used on the UB-04 (Form Locator 42) to identify a specific accommodation, ancillary service, or billing calculation related to the service being billed (86)", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCRevenueCodes" + } + }, + { + "id": "ExplanationOfBenefit.item.productOrService", + "path": "ExplanationOfBenefit.item.productOrService", + "comment": "Medical procedure a patient received from a health care provider. Current coding methods include: CPT-4 and HCFA Common Procedure Coding System Level II - (HCPCSII). (40)", + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSProcedureCodes" + } + }, + { + "id": "ExplanationOfBenefit.item.modifier", + "path": "ExplanationOfBenefit.item.modifier", + "comment": "Modifier(s) for the procedure represented on this line. Identifies special circumstances related to the performance of the service. (41)", + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSModifiers" + } + }, + { + "id": "ExplanationOfBenefit.item.quantity", + "path": "ExplanationOfBenefit.item.quantity", + "comment": "The quantity of units, times, days, visits, services, or treatments for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (42)", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.item.adjudication", + "path": "ExplanationOfBenefit.item.adjudication", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on value pattern", + "ordered": false, + "rules": "closed" + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.item.adjudication.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype", + "path": "ExplanationOfBenefit.item.adjudication", + "sliceName": "adjudicationamounttype", + "comment": "Describes the various amount fields used when payers receive and adjudicate a claim. (187)", + "min": 0, + "max": "*", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.amount", + "path": "ExplanationOfBenefit.item.adjudication.amount", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason", + "path": "ExplanationOfBenefit.item.adjudication", + "sliceName": "denialreason", + "comment": "Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)", + "min": 0, + "max": "*", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator", + "code": "denialreason" + } + ] + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.reason", + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits", + "path": "ExplanationOfBenefit.item.adjudication", + "sliceName": "allowedunits", + "comment": "The quantity of units, times, days, visits, services, or treatments allowed for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (149)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator", + "code": "allowedunits" + } + ] + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.value", + "path": "ExplanationOfBenefit.item.adjudication.value", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.adjudication", + "path": "ExplanationOfBenefit.adjudication", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on value pattern", + "ordered": false, + "rules": "closed" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.adjudication.category", + "path": "ExplanationOfBenefit.adjudication.category", + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator" + } + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype", + "path": "ExplanationOfBenefit.adjudication", + "sliceName": "adjudicationamounttype", + "comment": "Describes the various amount fields used when payers receive and adjudicate a claim. (187)", + "min": 0, + "max": "*", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.category", + "path": "ExplanationOfBenefit.adjudication.category", + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication" + } + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.amount", + "path": "ExplanationOfBenefit.adjudication.amount", + "min": 1 + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason", + "path": "ExplanationOfBenefit.adjudication", + "sliceName": "denialreason", + "comment": "Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)", + "min": 0, + "max": "*", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.category", + "path": "ExplanationOfBenefit.adjudication.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator", + "code": "denialreason" + } + ] + } + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.reason", + "path": "ExplanationOfBenefit.adjudication.reason", + "comment": "Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)", + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes" + } + }, + { + "id": "ExplanationOfBenefit.total", + "path": "ExplanationOfBenefit.total", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on value pattern", + "ordered": false, + "rules": "open" + } + }, + { + "id": "ExplanationOfBenefit.total.category", + "path": "ExplanationOfBenefit.total.category", + "mustSupport": true, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBTotalCategoryDiscriminator" + } + }, + { + "id": "ExplanationOfBenefit.total.amount", + "path": "ExplanationOfBenefit.total.amount", + "comment": "Total amount for each category (i.e., submitted, allowed, etc.) (148)" + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype", + "path": "ExplanationOfBenefit.total", + "sliceName": "adjudicationamounttype", + "comment": "Describes the various amount fields used when payers receive and adjudicate a claim. (187)", + "min": 1, + "max": "*", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.category", + "path": "ExplanationOfBenefit.total.category", + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication" + } + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.amount", + "path": "ExplanationOfBenefit.total.amount", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork", + "path": "ExplanationOfBenefit.total", + "sliceName": "inoutnetwork", + "comment": "Indicates the in network or out of network payment status of the claim. (142)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork.category", + "path": "ExplanationOfBenefit.total.category", + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerBenefitPaymentStatus" + } + }, + { + "id": "ExplanationOfBenefit.payment.date", + "path": "ExplanationOfBenefit.payment.date", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.processNote.text", + "path": "ExplanationOfBenefit.processNote.text", + "mustSupport": true + } + ] + } +} \ No newline at end of file diff --git a/conformance/fhir-ig-carin-bb/src/main/resources/hl7/fhir/us/carin-bb/package/StructureDefinition-C4BB-ExplanationOfBenefit-Outpatient-Institutional.json b/conformance/fhir-ig-carin-bb/src/main/resources/hl7/fhir/us/carin-bb/package/StructureDefinition-C4BB-ExplanationOfBenefit-Outpatient-Institutional.json index 1281e67694b..1004e4ac062 100644 --- a/conformance/fhir-ig-carin-bb/src/main/resources/hl7/fhir/us/carin-bb/package/StructureDefinition-C4BB-ExplanationOfBenefit-Outpatient-Institutional.json +++ b/conformance/fhir-ig-carin-bb/src/main/resources/hl7/fhir/us/carin-bb/package/StructureDefinition-C4BB-ExplanationOfBenefit-Outpatient-Institutional.json @@ -1 +1,16879 @@ -{"resourceType":"StructureDefinition","id":"C4BB-ExplanationOfBenefit-Outpatient-Institutional","text":{"status":"extensions","div":"
    \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
    NameFlagsCard.TypeDescription & Constraints\"doco\"
    \".\"\".\" ExplanationOfBenefit I0..*C4BBExplanationOfBenefitExplanation of Benefit resource
    EOB-institutional-item-or-header-adjudication: Institutional EOB: Should have adjudication at the item or header level, but not both
    \".\"\".\"\".\" type 1..1CodeableConceptCategory or discipline
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://terminology.hl7.org/CodeSystem/claim-type
    \".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: institutional
    \".\"\".\"\".\" created S1..1dateTimeResponse creation date
    \".\"\".\"\".\" provider 1..1Reference(C4BB Organization)Party responsible for the claim
    \".\"\".\"\".\" careTeam I0..*BackboneElementCare Team members
    EOB-inst-careTeam-practitioner: Institutional EOB: Careteam roles refer to a practitioner
    EOB-inst-careTeam-organization: Institutional EOB: Careteam roles refer to an organization
    EOB-careteam-qualification: Care Team Performing physician's qualifications are from US-Core-Provider-Specialty Value Set
    \".\"\".\"\".\"\".\" role 1..1CodeableConceptFunction within the team
    Binding: C4BB Claim Institutional Care Team Role (required)
    \".\"\".\"\".\"\".\" qualification 0..1CodeableConceptPractitioner credential or specialization
    Binding: US Core Provider Speciality (NUCC) (required)
    \".\"\".\"\".\" supportingInfo 0..*(Slice Definition)Supporting information
    Slice: Unordered, Open by pattern:category
    \".\"\".\"\".\"\".\" supportingInfo:billingnetworkcontractingstatus S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: billingnetworkcontractingstatus
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: C4BB Payer Provider Contracting Status (required)
    \".\"\".\"\".\"\".\" supportingInfo:clmrecvddate S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: clmrecvddate
    \".\"\".\"\".\"\".\"\".\" timing[x] S1..1dateWhen it occurred
    \".\"\".\"\".\"\".\" supportingInfo:typeofbill S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: typeofbill
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Type of Bill Codes (required)
    \".\"\".\"\".\"\".\" supportingInfo:pointoforigin S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: pointoforigin
    \".\"\".\"\".\"\".\"\".\" code S0..1CodeableConceptType of information
    Binding: NUBC Point Of Origin (required)
    \".\"\".\"\".\"\".\" supportingInfo:admtype S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: admtype
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Priority (Type) of Admission or Visit (required)
    \".\"\".\"\".\"\".\" supportingInfo:discharge-status S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: discharge-status
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Patient Discharge Status Codes (required)
    \".\"\".\"\".\" diagnosis 1..*BackboneElementPertinent diagnosis information
    \".\"\".\"\".\"\".\" sequence 1..1positiveIntDiagnosis instance identifier
    \".\"\".\"\".\"\".\" diagnosis[x] S1..1CodeableConceptNature of illness or problem
    Binding: Diagnosis Codes - International Classification of Diseases, Clinical Modification (ICD-9-CM, ICD-10-CM) (required)
    \".\"\".\"\".\"\".\" type S1..1CodeableConceptTiming or nature of the diagnosis
    Binding: C4BB Claim Outpatient Institutional Diagnosis Type (required)
    \".\"\".\"\".\" item 0..*BackboneElementProduct or service provided
    \".\"\".\"\".\"\".\" revenue S0..1CodeableConceptRevenue or cost center code
    Binding: NUBC Revenue Codes (required)
    \".\"\".\"\".\"\".\" productOrService S1..1CodeableConceptBilling, service, product, or drug code
    Binding: Current Procedural Terminology (CPT) - Healthcare Common Procedure Coding System (HCPCS) level II alphanumeric codes - Procedure Codes (required)
    \".\"\".\"\".\"\".\" modifier S0..*CodeableConceptProduct or service billing modifiers
    Binding: Current Procedural Terminology (CPT) - Healthcare Common Procedure Coding System (HCPCS) level II alphanumeric codes - Procedure Modifier Codes (required)
    \".\"\".\"\".\"\".\" serviced[x] 0..1(Slice Definition)Date or dates of service or product delivery
    Slice: Unordered, Open by type:$this
    \".\"\".\"\".\"\".\" servicedDate S0..1dateDate or dates of service or product delivery
    \".\"\".\"\".\"\".\" quantity S0..1SimpleQuantityCount of products or services
    \".\"\".\"\".\"\".\" adjudication SI0..*(Slice Definition)Adjudication details
    Slice: Unordered, Closed by pattern:category
    adjudication-has-amount-type-slice: If Adjudication is present, it must have at least one adjudicationamounttype slice
    \".\"\".\"\".\"\".\"\".\" adjudication:All Slices Content/Rules for all slices
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication Category Discriminator (required)
    \".\"\".\"\".\"\".\"\".\" adjudication:adjudicationamounttype S0..*BackboneElementAdjudication details
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication (required)
    \".\"\".\"\".\"\".\"\".\"\".\" amount S0..1MoneyMonetary amount
    \".\"\".\"\".\"\".\"\".\" adjudication:denialreason S0..*BackboneElementAdjudication details
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: denialreason
    \".\"\".\"\".\"\".\"\".\"\".\" reason S1..1CodeableConceptExplanation of adjudication outcome
    Binding: X12 Claim Adjustment Reason Codes - Remittance Advice Remark Codes (required)
    \".\"\".\"\".\"\".\"\".\" adjudication:allowedunits S0..1BackboneElementAdjudication details
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: allowedunits
    \".\"\".\"\".\"\".\"\".\"\".\" value S0..1decimalNon-monitary value
    \".\"\".\"\".\" adjudication SI0..*(Slice Definition)Header-level adjudication
    Slice: Unordered, Closed by pattern:category
    adjudication-has-amount-type-slice: If Adjudication is present, it must have at least one adjudicationamounttype slice
    \".\"\".\"\".\"\".\" adjudication:All Slices Content/Rules for all slices
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication Category Discriminator (required)
    \".\"\".\"\".\"\".\" adjudication:adjudicationamounttype S0..*BackboneElementHeader-level adjudication
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication (required)
    \".\"\".\"\".\"\".\"\".\" amount S1..1MoneyMonetary amount
    \".\"\".\"\".\"\".\" adjudication:denialreason S0..*BackboneElementHeader-level adjudication
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: denialreason
    \".\"\".\"\".\"\".\"\".\" reason S1..1CodeableConceptExplanation of adjudication outcome
    Binding: X12 Claim Adjustment Reason Codes - Remittance Advice Remark Codes (required)
    \".\"\".\"\".\" total 1..*(Slice Definition)Adjudication totals
    Slice: Unordered, Open by pattern:category
    \".\"\".\"\".\"\".\" total:All Slices Content/Rules for all slices
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptType of adjudication information
    Binding: C4BB Total Category Discriminator (extensible)
    \".\"\".\"\".\"\".\"\".\" amount 1..1MoneyFinancial total for the category
    \".\"\".\"\".\"\".\" total:adjudicationamounttype S1..*BackboneElementAdjudication totals
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication (required)
    \".\"\".\"\".\"\".\"\".\" amount S1..1MoneyFinancial total for the category
    \".\"\".\"\".\"\".\" total:inoutnetwork S0..1BackboneElementAdjudication totals
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Payer Benefit Payment Status (required)
    \".\"\".\"\".\" payment
    \".\"\".\"\".\"\".\" date S0..1dateExpected date of payment
    \".\"\".\"\".\" processNote
    \".\"\".\"\".\"\".\" text S0..1stringNote explanatory text

    \"doco\" Documentation for this format
    "},"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-category","valueString":"Financial.General"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-security-category","valueCode":"patient"}],"url":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional","version":"1.0.0","name":"C4BBExplanationOfBenefitOutpatientInstitutional","title":"C4BB ExplanationOfBenefit Outpatient Institutional","status":"active","date":"2020-11-23T16:49:10+00:00","publisher":"HL7 Financial Management Working Group","contact":[{"name":"HL7 Financial Management Working Group","telecom":[{"system":"url","value":"http://www.hl7.org/Special/committees/fm/index.cfm"},{"system":"email","value":"fm@lists.HL7.org"}]}],"description":"This profile is used for Explanation of Benefits (EOBs) based on claims submitted by clinics, hospitals, skilled nursing facilities and other institutions for outpatient services, which may include including the use of equipment and supplies, laboratory services, radiology services and other charges. Outpatient claims are submitted for services rendered at an institution that are not part of an overnight stay. \nThe claims data is based on the institutional claim form UB-04, submission standards adopted by the Department of Health and Human Services.","jurisdiction":[{"coding":[{"system":"urn:iso:std:iso:3166","code":"US"}]}],"fhirVersion":"4.0.1","mapping":[{"identity":"workflow","uri":"http://hl7.org/fhir/workflow","name":"Workflow Pattern"},{"identity":"w5","uri":"http://hl7.org/fhir/fivews","name":"FiveWs Pattern Mapping"},{"identity":"v2","uri":"http://hl7.org/v2","name":"HL7 v2 Mapping"},{"identity":"rim","uri":"http://hl7.org/v3","name":"RIM Mapping"}],"kind":"resource","abstract":false,"type":"ExplanationOfBenefit","baseDefinition":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit","derivation":"constraint","snapshot":{"element":[{"id":"ExplanationOfBenefit","path":"ExplanationOfBenefit","short":"Explanation of Benefit resource","definition":"This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.","alias":["EOB"],"min":0,"max":"*","base":{"path":"ExplanationOfBenefit","min":0,"max":"*"},"constraint":[{"key":"dom-2","severity":"error","human":"If the resource is contained in another resource, it SHALL NOT contain nested Resources","expression":"contained.contained.empty()","xpath":"not(parent::f:contained and f:contained)","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"dom-3","severity":"error","human":"If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource","expression":"contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()","xpath":"not(exists(for $id in f:contained/*/f:id/@value return $contained[not(parent::*/descendant::f:reference/@value=concat('#', $contained/*/id/@value) or descendant::f:reference[@value='#'])]))","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"dom-4","severity":"error","human":"If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated","expression":"contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()","xpath":"not(exists(f:contained/*/f:meta/f:versionId)) and not(exists(f:contained/*/f:meta/f:lastUpdated))","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"dom-5","severity":"error","human":"If a resource is contained in another resource, it SHALL NOT have a security label","expression":"contained.meta.security.empty()","xpath":"not(exists(f:contained/*/f:meta/f:security))","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice","valueBoolean":true},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice-explanation","valueMarkdown":"When a resource has no narrative, only systems that fully understand the data can display the resource to a human safely. Including a human readable representation in the resource makes for a much more robust eco-system and cheaper handling of resources by intermediary systems. Some ecosystems restrict distribution of resources to only those systems that do fully understand the resources, and as a consequence implementers may believe that the narrative is superfluous. However experience shows that such eco-systems often open up to new participants over time."}],"key":"dom-6","severity":"warning","human":"A resource should have narrative for robust management","expression":"text.`div`.exists()","xpath":"exists(f:text/h:div)","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"EOB-institutional-item-or-header-adjudication","severity":"error","human":"Institutional EOB: Should have adjudication at the item or header level, but not both","expression":"(adjudication.exists() != item.adjudication.exists())","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"Entity. Role, or Act"},{"identity":"workflow","map":"Event"}]},{"id":"ExplanationOfBenefit.id","path":"ExplanationOfBenefit.id","short":"Logical id of this artifact","definition":"The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.","comment":"The only time that a resource does not have an id is when it is being submitted to the server using a create operation.","min":0,"max":"1","base":{"path":"Resource.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.meta","path":"ExplanationOfBenefit.meta","short":"Metadata about the resource","definition":"The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.","min":1,"max":"1","base":{"path":"Resource.meta","min":0,"max":"1"},"type":[{"code":"Meta"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.meta.id","path":"ExplanationOfBenefit.meta.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.meta.extension","path":"ExplanationOfBenefit.meta.extension","slicing":{"discriminator":[{"type":"value","path":"url"}],"description":"Extensions are always sliced by (at least) url","rules":"open"},"short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.meta.versionId","path":"ExplanationOfBenefit.meta.versionId","short":"Version specific identifier","definition":"The version specific identifier, as it appears in the version portion of the URL. This value changes when the resource is created, updated, or deleted.","comment":"The server assigns this value, and ignores what the client specifies, except in the case that the server is imposing version integrity on updates/deletes.","min":0,"max":"1","base":{"path":"Meta.versionId","min":0,"max":"1"},"type":[{"code":"id"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.meta.lastUpdated","path":"ExplanationOfBenefit.meta.lastUpdated","short":"When the resource version last changed","definition":"When the resource last changed - e.g. when the version changed.","comment":"Defines the date the Resource was created or updated, whichever comes last (163). Payers SHALL provide the last time the data was updated or the date of creation in the payer’s system of record, whichever comes last","min":1,"max":"1","base":{"path":"Meta.lastUpdated","min":0,"max":"1"},"type":[{"code":"instant"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.meta.source","path":"ExplanationOfBenefit.meta.source","short":"Identifies where the resource comes from","definition":"A uri that identifies the source system of the resource. This provides a minimal amount of [Provenance](http://hl7.org/fhir/R4/provenance.html#) information that can be used to track or differentiate the source of information in the resource. The source may identify another FHIR server, document, message, database, etc.","comment":"In the provenance resource, this corresponds to Provenance.entity.what[x]. The exact use of the source (and the implied Provenance.entity.role) is left to implementer discretion. Only one nominated source is allowed; for additional provenance details, a full Provenance resource should be used. \n\nThis element can be used to indicate where the current master source of a resource that has a canonical URL if the resource is no longer hosted at the canonical URL.","min":0,"max":"1","base":{"path":"Meta.source","min":0,"max":"1"},"type":[{"code":"uri"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.meta.profile","path":"ExplanationOfBenefit.meta.profile","short":"Profiles this resource claims to conform to","definition":"A list of profiles (references to [StructureDefinition](http://hl7.org/fhir/R4/structuredefinition.html#) resources) that this resource claims to conform to. The URL is a reference to [StructureDefinition.url](http://hl7.org/fhir/R4/structuredefinition-definitions.html#StructureDefinition.url).","comment":"CPCDS data element (190)","min":1,"max":"*","base":{"path":"Meta.profile","min":0,"max":"*"},"type":[{"code":"canonical","targetProfile":["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.meta.security","path":"ExplanationOfBenefit.meta.security","short":"Security Labels applied to this resource","definition":"Security labels applied to this resource. These tags connect specific resources to the overall security policy and infrastructure.","comment":"The security labels can be updated without changing the stated version of the resource. The list of security labels is a set. Uniqueness is based the system/code, and version and display are ignored.","min":0,"max":"*","base":{"path":"Meta.security","min":0,"max":"*"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"SecurityLabels"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"extensible","description":"Security Labels from the Healthcare Privacy and Security Classification System.","valueSet":"http://hl7.org/fhir/ValueSet/security-labels"}},{"id":"ExplanationOfBenefit.meta.tag","path":"ExplanationOfBenefit.meta.tag","short":"Tags applied to this resource","definition":"Tags applied to this resource. Tags are intended to be used to identify and relate resources to process and workflow, and applications are not required to consider the tags when interpreting the meaning of a resource.","comment":"The tags can be updated without changing the stated version of the resource. The list of tags is a set. Uniqueness is based the system/code, and version and display are ignored.","min":0,"max":"*","base":{"path":"Meta.tag","min":0,"max":"*"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Tags"}],"strength":"example","description":"Codes that represent various types of tags, commonly workflow-related; e.g. \"Needs review by Dr. Jones\".","valueSet":"http://hl7.org/fhir/ValueSet/common-tags"}},{"id":"ExplanationOfBenefit.implicitRules","path":"ExplanationOfBenefit.implicitRules","short":"A set of rules under which this content was created","definition":"A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.","comment":"Asserting this rule set restricts the content to be only understood by a limited set of trading partners. This inherently limits the usefulness of the data in the long term. However, the existing health eco-system is highly fractured, and not yet ready to define, collect, and exchange data in a generally computable sense. Wherever possible, implementers and/or specification writers should avoid using this element. Often, when used, the URL is a reference to an implementation guide that defines these special rules as part of it's narrative along with other profiles, value sets, etc.","min":0,"max":"1","base":{"path":"Resource.implicitRules","min":0,"max":"1"},"type":[{"code":"uri"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":true,"isModifierReason":"This element is labeled as a modifier because the implicit rules may provide additional knowledge about the resource that modifies it's meaning or interpretation","isSummary":true},{"id":"ExplanationOfBenefit.language","path":"ExplanationOfBenefit.language","short":"Language of the resource content","definition":"The base language in which the resource is written.","comment":"Language is provided to support indexing and accessibility (typically, services such as text to speech use the language tag). The html language tag in the narrative applies to the narrative. The language tag on the resource may be used to specify the language of other presentations generated from the data in the resource. Not all the content has to be in the base language. The Resource.language should not be assumed to apply to the narrative automatically. If a language is specified, it should it also be specified on the div element in the html (see rules in HTML5 for information about the relationship between xml:lang and the html lang attribute).","min":0,"max":"1","base":{"path":"Resource.language","min":0,"max":"1"},"type":[{"code":"code"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-maxValueSet","valueCanonical":"http://hl7.org/fhir/ValueSet/all-languages"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Language"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"preferred","description":"A human language.","valueSet":"http://hl7.org/fhir/ValueSet/languages"}},{"id":"ExplanationOfBenefit.text","path":"ExplanationOfBenefit.text","short":"Text summary of the resource, for human interpretation","definition":"A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.","comment":"Contained resources do not have narrative. Resources that are not contained SHOULD have a narrative. In some cases, a resource may only have text with little or no additional discrete data (as long as all minOccurs=1 elements are satisfied). This may be necessary for data from legacy systems where information is captured as a \"text blob\" or where text is additionally entered raw or narrated and encoded information is added later.","alias":["narrative","html","xhtml","display"],"min":0,"max":"1","base":{"path":"DomainResource.text","min":0,"max":"1"},"type":[{"code":"Narrative"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"Act.text?"}]},{"id":"ExplanationOfBenefit.contained","path":"ExplanationOfBenefit.contained","short":"Contained, inline Resources","definition":"These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.","comment":"This should never be done when the content can be identified properly, as once identification is lost, it is extremely difficult (and context dependent) to restore it again. Contained resources may have profiles and tags In their meta elements, but SHALL NOT have security labels.","alias":["inline resources","anonymous resources","contained resources"],"min":0,"max":"*","base":{"path":"DomainResource.contained","min":0,"max":"*"},"type":[{"code":"Resource"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.extension","path":"ExplanationOfBenefit.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"DomainResource.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.modifierExtension","path":"ExplanationOfBenefit.modifierExtension","short":"Extensions that cannot be ignored","definition":"May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"DomainResource.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the resource that contains them","isSummary":false,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.identifier","path":"ExplanationOfBenefit.identifier","short":"Business Identifier for the resource","definition":"A unique identifier assigned to this explanation of benefit.","comment":"Identifier assigned by a payer for a claim received from a provider or subscriber. It is not the same identifier as that assigned by a provider. (35)","requirements":"Allows EOBs to be distinguished and referenced.","min":1,"max":"*","base":{"path":"ExplanationOfBenefit.identifier","min":0,"max":"*"},"type":[{"code":"Identifier"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"mapping":[{"identity":"workflow","map":"Event.identifier"},{"identity":"w5","map":"FiveWs.identifier"}]},{"id":"ExplanationOfBenefit.identifier.id","path":"ExplanationOfBenefit.identifier.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.identifier.extension","path":"ExplanationOfBenefit.identifier.extension","slicing":{"discriminator":[{"type":"value","path":"url"}],"description":"Extensions are always sliced by (at least) url","rules":"open"},"short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.identifier.use","path":"ExplanationOfBenefit.identifier.use","short":"usual | official | temp | secondary | old (If known)","definition":"The purpose of this identifier.","comment":"Applications can assume that an identifier is permanent unless it explicitly says that it is temporary.","requirements":"Allows the appropriate identifier for a particular context of use to be selected from among a set of identifiers.","min":0,"max":"1","base":{"path":"Identifier.use","min":0,"max":"1"},"type":[{"code":"code"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":true,"isModifierReason":"This is labeled as \"Is Modifier\" because applications should not mistake a temporary id for a permanent one.","isSummary":true,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"IdentifierUse"}],"strength":"required","description":"Identifies the purpose for this identifier, if known .","valueSet":"http://hl7.org/fhir/ValueSet/identifier-use|4.0.1"},"mapping":[{"identity":"v2","map":"N/A"},{"identity":"rim","map":"Role.code or implied by context"}]},{"id":"ExplanationOfBenefit.identifier.type","path":"ExplanationOfBenefit.identifier.type","short":"Description of identifier","definition":"A coded type for the identifier that can be used to determine which identifier to use for a specific purpose.","comment":"Indicates that the claim identifier is that assigned by a payer for a claim received from a provider or subscriber. (183)","requirements":"Allows users to make use of identifiers when the identifier system is not known.","min":1,"max":"1","base":{"path":"Identifier.type","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimIdentifierType"},"mapping":[{"identity":"v2","map":"CX.5"},{"identity":"rim","map":"Role.code or implied by context"}]},{"id":"ExplanationOfBenefit.identifier.system","path":"ExplanationOfBenefit.identifier.system","short":"The namespace for the identifier value","definition":"Establishes the namespace for the value - that is, a URL that describes a set values that are unique.","comment":"Identifier.system is always case sensitive.","requirements":"There are many sets of identifiers. To perform matching of two identifiers, we need to know what set we're dealing with. The system identifies a particular set of unique identifiers.","min":0,"max":"1","base":{"path":"Identifier.system","min":0,"max":"1"},"type":[{"code":"uri"}],"example":[{"label":"General","valueUri":"http://www.acme.com/identifiers/patient"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"CX.4 / EI-2-4"},{"identity":"rim","map":"II.root or Role.id.root"},{"identity":"servd","map":"./IdentifierType"}]},{"id":"ExplanationOfBenefit.identifier.value","path":"ExplanationOfBenefit.identifier.value","short":"The value that is unique","definition":"The portion of the identifier typically relevant to the user and which is unique within the context of the system.","comment":"If the value is a full URI, then the system SHALL be urn:ietf:rfc:3986. The value's primary purpose is computational mapping. As a result, it may be normalized for comparison purposes (e.g. removing non-significant whitespace, dashes, etc.) A value formatted for human display can be conveyed using the [Rendered Value extension](http://hl7.org/fhir/R4/extension-rendered-value.html). Identifier.value is to be treated as case sensitive unless knowledge of the Identifier.system allows the processer to be confident that non-case-sensitive processing is safe.","min":0,"max":"1","base":{"path":"Identifier.value","min":0,"max":"1"},"type":[{"code":"string"}],"example":[{"label":"General","valueString":"123456"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"CX.1 / EI.1"},{"identity":"rim","map":"II.extension or II.root if system indicates OID or GUID (Or Role.id.extension or root)"},{"identity":"servd","map":"./Value"}]},{"id":"ExplanationOfBenefit.identifier.period","path":"ExplanationOfBenefit.identifier.period","short":"Time period when id is/was valid for use","definition":"Time period during which identifier is/was valid for use.","min":0,"max":"1","base":{"path":"Identifier.period","min":0,"max":"1"},"type":[{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"CX.7 + CX.8"},{"identity":"rim","map":"Role.effectiveTime or implied by context"},{"identity":"servd","map":"./StartDate and ./EndDate"}]},{"id":"ExplanationOfBenefit.identifier.assigner","path":"ExplanationOfBenefit.identifier.assigner","short":"Organization that issued id (may be just text)","definition":"Organization that issued/manages the identifier.","comment":"The Identifier.assigner may omit the .reference element and only contain a .display element reflecting the name or other textual information about the assigning organization.","min":0,"max":"1","base":{"path":"Identifier.assigner","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Organization"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"CX.4 / (CX.4,CX.9,CX.10)"},{"identity":"rim","map":"II.assigningAuthorityName but note that this is an improper use by the definition of the field. Also Role.scoper"},{"identity":"servd","map":"./IdentifierIssuingAuthority"}]},{"id":"ExplanationOfBenefit.status","path":"ExplanationOfBenefit.status","short":"active | cancelled | draft | entered-in-error","definition":"The status of the resource instance.","comment":"Claim processing status code (140). Expected values are active or cancelled. To comply with the CMS rule, draft EOBs are not required","requirements":"Need to track the status of the resource as 'draft' resources may undergo further edits while 'active' resources are immutable and may only have their status changed to 'cancelled'.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.status","min":1,"max":"1"},"type":[{"code":"code"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":true,"isModifierReason":"This element is labeled as a modifier because it is a status element that contains status entered-in-error which means that the resource should not be treated as valid","isSummary":true,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ExplanationOfBenefitStatus"}],"strength":"required","description":"A code specifying the state of the resource instance.","valueSet":"http://hl7.org/fhir/ValueSet/explanationofbenefit-status|4.0.1"},"mapping":[{"identity":"workflow","map":"Event.status"},{"identity":"w5","map":"FiveWs.status"}]},{"id":"ExplanationOfBenefit.type","path":"ExplanationOfBenefit.type","short":"Category or discipline","definition":"The category of claim, e.g. oral, pharmacy, vision, institutional, professional.","comment":"Specifies the type of claim. (e.g., inpatient insitutional, outpatient institutional, physician, etc.) (16). Defines the Claims profiles. Values from Claim Type Codes are required; a data absent reason is not allowed","requirements":"Claim type determine the general sets of business rules applied for information requirements and adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.type","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/claim-type","code":"institutional"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/ValueSet/claim-type"},"mapping":[{"identity":"workflow","map":"Event.code"},{"identity":"w5","map":"FiveWs.class"}]},{"id":"ExplanationOfBenefit.subType","path":"ExplanationOfBenefit.subType","short":"More granular claim type","definition":"A finer grained suite of claim type codes which may convey additional information such as Inpatient vs Outpatient and/or a specialty service.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Some jurisdictions need a finer grained claim type for routing and adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.subType","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ClaimSubType"}],"strength":"example","description":"A more granular claim typecode.","valueSet":"http://hl7.org/fhir/ValueSet/claim-subtype"},"mapping":[{"identity":"w5","map":"FiveWs.class"}]},{"id":"ExplanationOfBenefit.use","path":"ExplanationOfBenefit.use","short":"claim | preauthorization | predetermination","definition":"A code to indicate whether the nature of the request is: to request adjudication of products and services previously rendered; or requesting authorization and adjudication for provision in the future; or requesting the non-binding adjudication of the listed products and services which could be provided in the future.","comment":"Expected value is claim. The CMS rule applies to adjudicated claims; it does not require preauthorizations or predeterminations","requirements":"This element is required to understand the nature of the request for adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.use","min":1,"max":"1"},"type":[{"code":"code"}],"patternCode":"claim","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Use"}],"strength":"required","description":"Complete, proposed, exploratory, other.","valueSet":"http://hl7.org/fhir/ValueSet/claim-use|4.0.1"},"mapping":[{"identity":"w5","map":"FiveWs.class"}]},{"id":"ExplanationOfBenefit.patient","path":"ExplanationOfBenefit.patient","short":"The recipient of the products and services","definition":"The party to whom the professional services and/or products have been supplied or are being considered and for whom actual for forecast reimbursement is sought.","comment":"Identifier for a member assigned by the Payer. If members receive ID cards, that is the identifier that should be provided. (1). The patient must be supplied to the insurer so that confirmation of coverage and service history may be considered as part of the authorization and/or adjudiction. Additional required path:EOB.insurance.coverage(Coverage).beneficiary(Patient).identifier","requirements":"The patient must be supplied to the insurer so that confirmation of coverage and service history may be considered as part of the authorization and/or adjudiction.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.patient","min":1,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Patient"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"workflow","map":"Event.subject"},{"identity":"w5","map":"FiveWs.subject[x]"},{"identity":"w5","map":"FiveWs.subject"}]},{"id":"ExplanationOfBenefit.billablePeriod","path":"ExplanationOfBenefit.billablePeriod","short":"Relevant time frame for the claim","definition":"The period for which charges are being submitted.","comment":"Typically this would be today or in the past for a claim, and today or in the future for preauthorizations and prodeterminations. Typically line item dates of service should fall within the billing period if one is specified.","requirements":"A number jurisdictions required the submission of the billing period when submitting claims for example for hospital stays or long-term care.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.billablePeriod","min":0,"max":"1"},"type":[{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"w5","map":"FiveWs.done[x]"}]},{"id":"ExplanationOfBenefit.billablePeriod.id","path":"ExplanationOfBenefit.billablePeriod.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.billablePeriod.extension","path":"ExplanationOfBenefit.billablePeriod.extension","slicing":{"discriminator":[{"type":"value","path":"url"}],"description":"Extensions are always sliced by (at least) url","rules":"open"},"short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.billablePeriod.start","path":"ExplanationOfBenefit.billablePeriod.start","short":"Starting time with inclusive boundary","definition":"The start of the period. The boundary is inclusive.","comment":"The first day on the billing statement covering services rendered to the beneficiary (i.e. 'Statement Covers From Date’). (177)","min":0,"max":"1","base":{"path":"Period.start","min":0,"max":"1"},"type":[{"code":"dateTime"}],"condition":["per-1"],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"DR.1"},{"identity":"rim","map":"./low"}]},{"id":"ExplanationOfBenefit.billablePeriod.end","path":"ExplanationOfBenefit.billablePeriod.end","short":"End time with inclusive boundary, if not ongoing","definition":"The end of the period. If the end of the period is missing, it means no end was known or planned at the time the instance was created. The start may be in the past, and the end date in the future, which means that period is expected/planned to end at that time.","comment":"The last day on the billing statement covering services rendered to the beneficiary (i.e. 'Statement Covers Thru Date’). (178)","min":0,"max":"1","base":{"path":"Period.end","min":0,"max":"1"},"type":[{"code":"dateTime"}],"meaningWhenMissing":"If the end of the period is missing, it means that the period is ongoing","condition":["per-1"],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"DR.2"},{"identity":"rim","map":"./high"}]},{"id":"ExplanationOfBenefit.created","path":"ExplanationOfBenefit.created","short":"Response creation date","definition":"The date this resource was created.","comment":"Date the claim was adjudicated (179)","requirements":"Need to record a timestamp for use by both the recipient and the issuer.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.created","min":1,"max":"1"},"type":[{"code":"dateTime"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"workflow","map":"Event.occurrence[x]"},{"identity":"w5","map":"FiveWs.recorded"}]},{"id":"ExplanationOfBenefit.enterer","path":"ExplanationOfBenefit.enterer","short":"Author of the claim","definition":"Individual who created the claim, predetermination or preauthorization.","requirements":"Some jurisdictions require the contact information for personnel completing claims.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.enterer","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"workflow","map":"Event.performer.agent"},{"identity":"w5","map":"FiveWs.author"}]},{"id":"ExplanationOfBenefit.insurer","path":"ExplanationOfBenefit.insurer","short":"Party responsible for reimbursement","definition":"The party responsible for authorization, adjudication and reimbursement.","comment":"Code of the payer responsible for the claim (2, 5). Same as insurance.coverage.organization. Party responsible for reimbursing the provider","requirements":"To be a valid claim, preauthorization or predetermination there must be a party who is responsible for adjudicating the contents against a policy which provides benefits for the patient.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.insurer","min":1,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"workflow","map":"Event.performer.agent"},{"identity":"w5","map":"FiveWs.author"}]},{"id":"ExplanationOfBenefit.provider","path":"ExplanationOfBenefit.provider","short":"Party responsible for the claim","definition":"The provider which is responsible for the claim, predetermination or preauthorization.","comment":"The identifier assigned to the Billing Provider. (94)","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.provider","min":1,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"w5","map":"FiveWs.source"}]},{"id":"ExplanationOfBenefit.priority","path":"ExplanationOfBenefit.priority","short":"Desired processing urgency","definition":"The provider-required urgency of processing the request. Typical values include: stat, routine deferred.","comment":"If a claim processor is unable to complete the processing as per the priority then they should generate and error and not process the request.","requirements":"The provider may need to indicate their processing requirements so that the processor can indicate if they are unable to comply.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.priority","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/ValueSet/process-priority"},"mapping":[{"identity":"v2","map":"Request.priority"}]},{"id":"ExplanationOfBenefit.fundsReserveRequested","path":"ExplanationOfBenefit.fundsReserveRequested","short":"For whom to reserve funds","definition":"A code to indicate whether and for whom funds are to be reserved for future claims.","comment":"This field is only used for preauthorizations.","requirements":"In the case of a Pre-Determination/Pre-Authorization the provider may request that funds in the amount of the expected Benefit be reserved ('Patient' or 'Provider') to pay for the Benefits determined on the subsequent claim(s). 'None' explicitly indicates no funds reserving is requested.","alias":["Fund pre-allocation"],"min":0,"max":"1","base":{"path":"ExplanationOfBenefit.fundsReserveRequested","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"FundsReserve"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"example","description":"For whom funds are to be reserved: (Patient, Provider, None).","valueSet":"http://hl7.org/fhir/ValueSet/fundsreserve"}},{"id":"ExplanationOfBenefit.fundsReserve","path":"ExplanationOfBenefit.fundsReserve","short":"Funds reserved status","definition":"A code, used only on a response to a preauthorization, to indicate whether the benefits payable have been reserved and for whom.","comment":"Fund would be release by a future claim quoting the preAuthRef of this response. Examples of values include: provider, patient, none.","requirements":"Needed to advise the submitting provider on whether the rquest for reservation of funds has been honored.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.fundsReserve","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"FundsReserve"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"example","description":"For whom funds are to be reserved: (Patient, Provider, None).","valueSet":"http://hl7.org/fhir/ValueSet/fundsreserve"}},{"id":"ExplanationOfBenefit.related","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"RelatedClaim"}],"path":"ExplanationOfBenefit.related","short":"Prior or corollary claims","definition":"Other claims which are related to this claim such as prior submissions or claims for related services or for the same event.","comment":"If the current claim represents a claim that has been adjusted and was given a prior claim number, this field represents the prior claim number. If the current claim has been adjusted; i.e., replaced by or merged to another claim number, this data element represents that new number.(111, 112)","requirements":"For workplace or other accidents it is common to relate separate claims arising from the same event.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.related","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.related.id","path":"ExplanationOfBenefit.related.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.related.extension","path":"ExplanationOfBenefit.related.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.related.modifierExtension","path":"ExplanationOfBenefit.related.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.related.claim","path":"ExplanationOfBenefit.related.claim","short":"Reference to the related claim","definition":"Reference to a related claim.","requirements":"For workplace or other accidents it is common to relate separate claims arising from the same event.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.related.claim","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Claim"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.related.relationship","path":"ExplanationOfBenefit.related.relationship","short":"How the reference claim is related","definition":"A code to convey how the claims are related.","comment":"For example, prior claim or umbrella.","requirements":"Some insurers need a declaration of the type of relationship.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.related.relationship","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBRelatedClaimRelationshipCodes"}},{"id":"ExplanationOfBenefit.related.reference","path":"ExplanationOfBenefit.related.reference","short":"File or case reference","definition":"An alternate organizational reference to the case or file to which this particular claim pertains.","comment":"For example, Property/Casualty insurer claim number or Workers Compensation case number.","requirements":"In cases where an event-triggered claim is being submitted to an insurer which requires a reference number to be specified on all exchanges.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.related.reference","min":0,"max":"1"},"type":[{"code":"Identifier"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.prescription","path":"ExplanationOfBenefit.prescription","short":"Prescription authorizing services or products","definition":"Prescription to support the dispensing of pharmacy, device or vision products.","requirements":"Required to authorize the dispensing of controlled substances and devices.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.prescription","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/MedicationRequest","http://hl7.org/fhir/StructureDefinition/VisionPrescription"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.originalPrescription","path":"ExplanationOfBenefit.originalPrescription","short":"Original prescription if superceded by fulfiller","definition":"Original prescription which has been superseded by this prescription to support the dispensing of pharmacy services, medications or products.","comment":"For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new prescription for an alternate medication which has the same therapeutic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.","requirements":"Often required when a fulfiller varies what is fulfilled from that authorized on the original prescription.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.originalPrescription","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/MedicationRequest"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.payee","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Payee"}],"path":"ExplanationOfBenefit.payee","short":"Recipient of benefits payable","definition":"The party to be reimbursed for cost of the products and services according to the terms of the policy.","comment":"Often providers agree to receive the benefits payable to reduce the near-term costs to the patient. The insurer may decline to pay the provider and may choose to pay the subscriber instead.","requirements":"The provider needs to specify who they wish to be reimbursed and the claims processor needs express who they will reimburse.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payee","min":0,"max":"1"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.payee.id","path":"ExplanationOfBenefit.payee.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.payee.extension","path":"ExplanationOfBenefit.payee.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.payee.modifierExtension","path":"ExplanationOfBenefit.payee.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.payee.type","path":"ExplanationOfBenefit.payee.type","short":"Category of recipient","definition":"Type of Party to be reimbursed: Subscriber, provider, other.","comment":"Identifies the type of recipient of the adjudication amount; i.e., provider, subscriber, beneficiary or another recipient. (120)","requirements":"Need to know who should receive payment with the most common situations being the Provider (assignment of benefits) or the Subscriber.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.payee.type","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayeeType"}},{"id":"ExplanationOfBenefit.payee.party","path":"ExplanationOfBenefit.payee.party","short":"Recipient reference","definition":"Reference to the individual or organization to whom any payment will be made.","comment":"Recipient reference (121)","requirements":"Need to provide demographics if the payee is not 'subscriber' nor 'provider'.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.payee.party","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization","http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Patient","http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Practitioner"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.referral","path":"ExplanationOfBenefit.referral","short":"Treatment Referral","definition":"A reference to a referral resource.","comment":"The referral resource which lists the date, practitioner, reason and other supporting information.","requirements":"Some insurers require proof of referral to pay for services or to pay specialist rates for services.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.referral","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/ServiceRequest"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"w5","map":"FiveWs.cause"}]},{"id":"ExplanationOfBenefit.facility","path":"ExplanationOfBenefit.facility","short":"Servicing Facility","definition":"Facility where the services were provided.","requirements":"Insurance adjudication can be dependant on where services were delivered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.facility","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Location"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"workflow","map":"Event.performer.location"},{"identity":"w5","map":"FiveWs.where[x]"}]},{"id":"ExplanationOfBenefit.claim","path":"ExplanationOfBenefit.claim","short":"Claim reference","definition":"The business identifier for the instance of the adjudication request: claim predetermination or preauthorization.","requirements":"To provide a link to the original adjudication request.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.claim","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Claim"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"w5","map":"FiveWs.why[x]"}]},{"id":"ExplanationOfBenefit.claimResponse","path":"ExplanationOfBenefit.claimResponse","short":"Claim response reference","definition":"The business identifier for the instance of the adjudication response: claim, predetermination or preauthorization response.","requirements":"To provide a link to the original adjudication response.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.claimResponse","min":0,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/ClaimResponse"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.outcome","path":"ExplanationOfBenefit.outcome","short":"queued | complete | error | partial","definition":"The outcome of the claim, predetermination, or preauthorization processing.","comment":"Expected value is complete","requirements":"To advise the requestor of an overall processing outcome.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.outcome","min":1,"max":"1"},"type":[{"code":"code"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"RemittanceOutcome"}],"strength":"required","description":"The result of the claim processing.","valueSet":"http://hl7.org/fhir/ValueSet/remittance-outcome|4.0.1"}},{"id":"ExplanationOfBenefit.disposition","path":"ExplanationOfBenefit.disposition","short":"Disposition Message","definition":"A human readable description of the status of the adjudication.","requirements":"Provided for user display.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.disposition","min":0,"max":"1"},"type":[{"code":"string"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.preAuthRef","path":"ExplanationOfBenefit.preAuthRef","short":"Preauthorization reference","definition":"Reference from the Insurer which is used in later communications which refers to this adjudication.","comment":"This value is only present on preauthorization adjudications.","requirements":"On subsequent claims, the insurer may require the provider to quote this value.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.preAuthRef","min":0,"max":"*"},"type":[{"code":"string"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.preAuthRefPeriod","path":"ExplanationOfBenefit.preAuthRefPeriod","short":"Preauthorization in-effect period","definition":"The timeframe during which the supplied preauthorization reference may be quoted on claims to obtain the adjudication as provided.","comment":"This value is only present on preauthorization adjudications.","requirements":"On subsequent claims, the insurer may require the provider to quote this value.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.preAuthRefPeriod","min":0,"max":"*"},"type":[{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.careTeam","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"CareTeam"}],"path":"ExplanationOfBenefit.careTeam","short":"Care Team members","definition":"The members of the team who provided the products and services.","requirements":"Common to identify the responsible and supporting practitioners.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.careTeam","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"EOB-inst-careTeam-practitioner","severity":"error","human":"Institutional EOB: Careteam roles refer to a practitioner","expression":"(\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists() implies\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists().provider.all(resolve() is Practitioner)\n)","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional"},{"key":"EOB-inst-careTeam-organization","severity":"error","human":"Institutional EOB: Careteam roles refer to an organization","expression":"(\nrole.where(coding.where(code in ('performing' )).exists()).exists() implies\nrole.where(coding.where(code in ('performing' )).exists()).exists().provider.all(resolve() is Organization)\n)","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional"},{"key":"EOB-careteam-qualification","severity":"error","human":"Care Team Performing physician's qualifications are from US-Core-Provider-Specialty Value Set","expression":"(\nrole.where(coding.where(code in ('performing' )).exists()).exists() implies\nrole.where(coding.where(code in ('performing' )).exists()).exists().qualification.memberOf('http://hl7.org/fhir/us/core/ValueSet/us-core-provider-specialty')\n)","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.careTeam.id","path":"ExplanationOfBenefit.careTeam.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.careTeam.extension","path":"ExplanationOfBenefit.careTeam.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.careTeam.modifierExtension","path":"ExplanationOfBenefit.careTeam.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.careTeam.sequence","path":"ExplanationOfBenefit.careTeam.sequence","short":"Order of care team","definition":"A number to uniquely identify care team entries.","comment":"careTeam.sequence values uniquely identify careTeam members. They do not necessarily indiate any order in which the patient was seen by the careTeam or identify any level of significance of the careTeam to the patient, etc. Client app implementations should not assign any significance to the sequence values","requirements":"Necessary to maintain the order of the care team and provide a mechanism to link individuals to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.careTeam.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.careTeam.provider","path":"ExplanationOfBenefit.careTeam.provider","short":"Practitioner or organization","definition":"Member of the team who provided the product or service.","comment":"The identifier assigned to the care team. (varies depending on the profile)","requirements":"Often a regulatory requirement to specify the responsible provider.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.careTeam.provider","min":1,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization","http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Practitioner"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"mapping":[{"identity":"w5","map":"FiveWs.actor"}]},{"id":"ExplanationOfBenefit.careTeam.responsible","path":"ExplanationOfBenefit.careTeam.responsible","short":"Indicator of the lead practitioner","definition":"The party who is billing and/or responsible for the claimed products or services.","comment":"Responsible might not be required when there is only a single provider listed.","requirements":"When multiple parties are present it is required to distinguish the lead or responsible individual.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.careTeam.responsible","min":0,"max":"1"},"type":[{"code":"boolean"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.careTeam.role","path":"ExplanationOfBenefit.careTeam.role","short":"Function within the team","definition":"The lead, assisting or supervising practitioner and their discipline if a multidisciplinary team.","comment":"The functional role of a provider on a claim. (165)","requirements":"When multiple parties are present it is required to distinguish the roles performed by each member.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.careTeam.role","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimInstitutionalCareTeamRole"}},{"id":"ExplanationOfBenefit.careTeam.qualification","path":"ExplanationOfBenefit.careTeam.qualification","short":"Practitioner credential or specialization","definition":"The qualification of the practitioner which is applicable for this service.","requirements":"Need to specify which qualification a provider is delivering the product or service under.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.careTeam.qualification","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/core/ValueSet/us-core-provider-specialty"}},{"id":"ExplanationOfBenefit.supportingInfo","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on $this pattern","ordered":false,"rules":"open"},"short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"Defines data elements not available in the base EOB resource","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"InformationCode"}],"strength":"example","description":"The valuset used for additional information codes.","valueSet":"http://hl7.org/fhir/ValueSet/claim-exception"}},{"id":"ExplanationOfBenefit.supportingInfo.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"billingnetworkcontractingstatus","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"Indicates that the Billing Provider has a contract with the Plan (regardless of the network) as of the effective date of service or admission. (101)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"billingnetworkcontractingstatus"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerProviderContractingStatus"}},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"clmrecvddate","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"The date the claim was received by the payer (88)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"clmrecvddate"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"InformationCode"}],"strength":"example","description":"The valuset used for additional information codes.","valueSet":"http://hl7.org/fhir/ValueSet/claim-exception"}},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"typeofbill","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"UB04 (Form Locator 4) type of bill code provides specific information for payer purposes. The first digit of the three-digit number denotes the type of institution, the second digit classifies the type of care being billed, and the third digit identifies the frequency of the bill for a specific course of treatment or inpatient confinement. (17)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"typeofbill"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCTypeOfBill"}},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"pointoforigin","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"Identifies the place where the patient was identified as needing admission to an institution. This is a two position code mapped from the standard values for the UB-04 Source of Admission code (FL-15). (13)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"pointoforigin"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPointOfOriginForAdmissionOrVisit"}},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:admtype","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"admtype","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"Priority of the admission. Information located on (UB04 Form Locator 14). For example, an admission type of elective indicates that the patient's condition permitted time for medical services to be scheduled. (14)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:admtype.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:admtype.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:admtype.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:admtype.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:admtype.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"admtype"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:admtype.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPriorityTypeOfAdmissionOrVisit"}},{"id":"ExplanationOfBenefit.supportingInfo:admtype.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:admtype.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:admtype.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SupportingInformation"}],"path":"ExplanationOfBenefit.supportingInfo","sliceName":"discharge-status","short":"Supporting information","definition":"Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.","comment":"Patient’s status as of the discharge date for a facility stay. Information located on UB04. (Form Locator 17). (117)","requirements":"Typically these information codes are required to support the services rendered or the adjudication of the services rendered.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.id","path":"ExplanationOfBenefit.supportingInfo.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.extension","path":"ExplanationOfBenefit.supportingInfo.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.modifierExtension","path":"ExplanationOfBenefit.supportingInfo.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.sequence","path":"ExplanationOfBenefit.supportingInfo.sequence","short":"Information instance identifier","definition":"A number to uniquely identify supporting information entries.","comment":"Client app implementations should look-up supportingInfo elements based on category values instead of sequence values","requirements":"Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.category","path":"ExplanationOfBenefit.supportingInfo.category","short":"Classification of the supplied information","definition":"The general class of the information supplied: information; exception; accident, employment; onset, etc.","comment":"This may contain a category for the local bill type codes.","requirements":"Required to group or associate information items with common characteristics. For example: admission information or prior treatments.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"discharge-status"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType"}},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.code","path":"ExplanationOfBenefit.supportingInfo.code","short":"Type of information","definition":"System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.","comment":"This may contain the local bill type codes such as the US UB-04 bill type code.","requirements":"Required to identify the kind of additional information.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.code","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPatientDischargeStatus"}},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","short":"When it occurred","definition":"The date when or period to which this information refers.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.value[x]","path":"ExplanationOfBenefit.supportingInfo.value[x]","short":"Data to be provided","definition":"Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.","comment":"Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.","requirements":"To convey the data content to be provided when the information is more than a simple code or period.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.value[x]","min":0,"max":"1"},"type":[{"code":"boolean"},{"code":"string"},{"code":"Quantity"},{"code":"Attachment"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Resource"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.reason","path":"ExplanationOfBenefit.supportingInfo.reason","short":"Explanation for the information","definition":"Provides the reason in the situation where a reason code is required in addition to the content.","comment":"For example: the reason for the additional stay, or why a tooth is missing.","requirements":"Needed when the supporting information has both a date and amount/value and requires explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.supportingInfo.reason","min":0,"max":"1"},"type":[{"code":"Coding"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"MissingReason"}],"strength":"example","description":"Reason codes for the missing teeth.","valueSet":"http://hl7.org/fhir/ValueSet/missing-tooth-reason"}},{"id":"ExplanationOfBenefit.diagnosis","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Diagnosis"}],"path":"ExplanationOfBenefit.diagnosis","short":"Pertinent diagnosis information","definition":"Information about diagnoses relevant to the claim items.","comment":"Diagnosis codes describe an individual's disease or medical condition. (6, 7, 8, 21, 22, 23, 30)","requirements":"Required for the adjudication by provided context for the services and product listed.","min":1,"max":"*","base":{"path":"ExplanationOfBenefit.diagnosis","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.diagnosis.id","path":"ExplanationOfBenefit.diagnosis.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.diagnosis.extension","path":"ExplanationOfBenefit.diagnosis.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.diagnosis.modifierExtension","path":"ExplanationOfBenefit.diagnosis.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.diagnosis.sequence","path":"ExplanationOfBenefit.diagnosis.sequence","short":"Diagnosis instance identifier","definition":"A number to uniquely identify diagnosis entries.","comment":"Diagnosis.sequence values do not necessarily indiate any order in which the diagnosis was reported or identified. client app implementations should not assign any significance to the sequence values. client app implementations should use the values of diagnosis.type to identify primary, secondary, etc.","requirements":"Necessary to maintain the order of the diagnosis items and provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.diagnosis.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.diagnosis.diagnosis[x]","path":"ExplanationOfBenefit.diagnosis.diagnosis[x]","short":"Nature of illness or problem","definition":"The nature of illness or problem in a coded form or as a reference to an external defined Condition.","requirements":"Provides health context for the evaluation of the products and/or services.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.diagnosis.diagnosis[x]","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/CDCICD910CMDiagnosisCodes"}},{"id":"ExplanationOfBenefit.diagnosis.type","path":"ExplanationOfBenefit.diagnosis.type","short":"Timing or nature of the diagnosis","definition":"When the condition was observed or the relative ranking.","comment":"Indicates if the outpatient institutional diagnosis is principal, other, an external cause of injury or a patient reason for visit. (21, 22, 23)","requirements":"Often required to capture a particular diagnosis, for example: primary or discharge.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.diagnosis.type","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimOutpatientInstitutionalDiagnosisType"}},{"id":"ExplanationOfBenefit.diagnosis.onAdmission","path":"ExplanationOfBenefit.diagnosis.onAdmission","short":"Present on admission","definition":"Indication of whether the diagnosis was present on admission to a facility.","requirements":"Many systems need to understand for adjudication if the diagnosis was present a time of admission.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.diagnosis.onAdmission","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"DiagnosisOnAdmission"}],"strength":"example","description":"Present on admission.","valueSet":"http://hl7.org/fhir/ValueSet/ex-diagnosis-on-admission"}},{"id":"ExplanationOfBenefit.diagnosis.packageCode","path":"ExplanationOfBenefit.diagnosis.packageCode","short":"Package billing code","definition":"A package billing code or bundle code used to group products and services to a particular health condition (such as heart attack) which is based on a predetermined grouping code system.","comment":"For example, DRG (Diagnosis Related Group) or a bundled billing code. A patient may have a diagnosis of a Myocardio-infarction and a DRG for HeartAttack would assigned. The Claim item (and possible subsequent claims) would refer to the DRG for those line items that were for services related to the heart attack event.","requirements":"Required to relate the current diagnosis to a package billing code that is then referenced on the individual claim items which are specific to the health condition covered by the package code.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.diagnosis.packageCode","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"DiagnosisRelatedGroup"}],"strength":"example","description":"The DRG codes associated with the diagnosis.","valueSet":"http://hl7.org/fhir/ValueSet/ex-diagnosisrelatedgroup"}},{"id":"ExplanationOfBenefit.procedure","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Procedure"}],"path":"ExplanationOfBenefit.procedure","short":"Clinical procedures performed","definition":"Procedures performed on the patient relevant to the billing items with the claim.","requirements":"The specific clinical invention are sometimes required to be provided to justify billing a greater than customary amount for a service.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.procedure","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.procedure.id","path":"ExplanationOfBenefit.procedure.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.procedure.extension","path":"ExplanationOfBenefit.procedure.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.procedure.modifierExtension","path":"ExplanationOfBenefit.procedure.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.procedure.sequence","path":"ExplanationOfBenefit.procedure.sequence","short":"Procedure instance identifier","definition":"A number to uniquely identify procedure entries.","requirements":"Necessary to provide a mechanism to link to claim details.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.procedure.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.procedure.type","path":"ExplanationOfBenefit.procedure.type","short":"Category of Procedure","definition":"When the condition was observed or the relative ranking.","requirements":"Often required to capture a particular diagnosis, for example: primary or discharge.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.procedure.type","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ProcedureType"}],"strength":"example","description":"Example procedure type codes.","valueSet":"http://hl7.org/fhir/ValueSet/ex-procedure-type"}},{"id":"ExplanationOfBenefit.procedure.date","path":"ExplanationOfBenefit.procedure.date","short":"When the procedure was performed","definition":"Date and optionally time the procedure was performed.","requirements":"Required for auditing purposes.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.procedure.date","min":0,"max":"1"},"type":[{"code":"dateTime"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.procedure.procedure[x]","path":"ExplanationOfBenefit.procedure.procedure[x]","short":"Specific clinical procedure","definition":"The code or reference to a Procedure resource which identifies the clinical intervention performed.","requirements":"This identifies the actual clinical procedure.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.procedure.procedure[x]","min":1,"max":"1"},"type":[{"code":"CodeableConcept"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Procedure"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ICD10_Procedures"}],"strength":"example","description":"ICD10 Procedure codes.","valueSet":"http://hl7.org/fhir/ValueSet/icd-10-procedures"}},{"id":"ExplanationOfBenefit.procedure.udi","path":"ExplanationOfBenefit.procedure.udi","short":"Unique device identifier","definition":"Unique Device Identifiers associated with this line item.","requirements":"The UDI code allows the insurer to obtain device level information on the product supplied.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.procedure.udi","min":0,"max":"*"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Device"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.precedence","path":"ExplanationOfBenefit.precedence","short":"Precedence (primary, secondary, etc.)","definition":"This indicates the relative order of a series of EOBs related to different coverages for the same suite of services.","requirements":"Needed to coordinate between multiple EOBs for the same suite of services.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.precedence","min":0,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.insurance","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Insurance"}],"path":"ExplanationOfBenefit.insurance","short":"Patient insurance information","definition":"Financial instruments for reimbursement for the health care products and services specified on the claim.","comment":"Identity of the payers responsible for the claim. (2, 141). All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. An invariant is defined to enforce the following rule: Will have multiple occurrences on secondary / tertiary, etc. claims. Up to one occurrence, that of the ExplanationOfBenefit.insurer, will have a boolean value = 'True'","requirements":"At least one insurer is required for a claim to be a claim.","min":1,"max":"*","base":{"path":"ExplanationOfBenefit.insurance","min":1,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"EOB-insurance-focal","severity":"error","human":"EOB.insurance: at most one with focal = true","expression":"insurance.select (focal = true).count() < 2","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit"}],"mustSupport":true,"isModifier":false,"isSummary":true,"mapping":[{"identity":"v2","map":"Coverage"}]},{"id":"ExplanationOfBenefit.insurance.id","path":"ExplanationOfBenefit.insurance.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.insurance.extension","path":"ExplanationOfBenefit.insurance.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.insurance.modifierExtension","path":"ExplanationOfBenefit.insurance.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.insurance.focal","path":"ExplanationOfBenefit.insurance.focal","short":"Coverage to be used for adjudication","definition":"A flag to indicate that this Coverage is to be used for adjudication of this claim when set to true.","comment":"A patient may (will) have multiple insurance policies which provide reimbursement for healthcare services and products. For example, a person may also be covered by their spouse's policy and both appear in the list (and may be from the same insurer). This flag will be set to true for only one of the listed policies and that policy will be used for adjudicating this claim. Other claims would be created to request adjudication against the other listed policies. An invariant is defined to enforce the following rule: Will have multiple occurrences on secondary / tertiary, etc. claims. Up to one occurrence, that of the ExplanationOfBenefit.insurer, will have a boolean value = 'True'","requirements":"To identify which coverage in the list is being used to adjudicate this claim.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.insurance.focal","min":1,"max":"1"},"type":[{"code":"boolean"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.insurance.coverage","path":"ExplanationOfBenefit.insurance.coverage","short":"Insurance information","definition":"Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.","comment":"Same as insurance.coverage.organization. Party responsible for reimbursing the provider. When focal = true, Coverage.payer--> Organization.identifier. When focal = false, EOB.insurance.coverage.display = [name of other carrier]","requirements":"Required to allow the adjudicator to locate the correct policy and history within their information system.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.insurance.coverage","min":1,"max":"1"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Coverage"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.insurance.preAuthRef","path":"ExplanationOfBenefit.insurance.preAuthRef","short":"Prior authorization reference number","definition":"Reference numbers previously provided by the insurer to the provider to be quoted on subsequent claims containing services or products related to the prior authorization.","comment":"This value is an alphanumeric string that may be provided over the phone, via text, via paper, or within a ClaimResponse resource and is not a FHIR Identifier.","requirements":"Providers must quote previously issued authorization reference numbers in order to obtain adjudication as previously advised on the Preauthorization.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.insurance.preAuthRef","min":0,"max":"*"},"type":[{"code":"string"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.accident","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Accident"}],"path":"ExplanationOfBenefit.accident","short":"Details of the event","definition":"Details of a accident which resulted in injuries which required the products and services listed in the claim.","requirements":"When healthcare products and services are accident related, benefits may be payable under accident provisions of policies, such as automotive, etc before they are payable under normal health insurance.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.accident","min":0,"max":"1"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.accident.id","path":"ExplanationOfBenefit.accident.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.accident.extension","path":"ExplanationOfBenefit.accident.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.accident.modifierExtension","path":"ExplanationOfBenefit.accident.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.accident.date","path":"ExplanationOfBenefit.accident.date","short":"When the incident occurred","definition":"Date of an accident event related to the products and services contained in the claim.","comment":"The date of the accident has to precede the dates of the products and services but within a reasonable timeframe.","requirements":"Required for audit purposes and adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.accident.date","min":0,"max":"1"},"type":[{"code":"date"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.accident.type","path":"ExplanationOfBenefit.accident.type","short":"The nature of the accident","definition":"The type or context of the accident event for the purposes of selection of potential insurance coverages and determination of coordination between insurers.","requirements":"Coverage may be dependant on the type of accident.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.accident.type","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"AccidentType"}],"strength":"extensible","description":"Type of accident: work place, auto, etc.","valueSet":"http://terminology.hl7.org/ValueSet/v3-ActIncidentCode"}},{"id":"ExplanationOfBenefit.accident.location[x]","path":"ExplanationOfBenefit.accident.location[x]","short":"Where the event occurred","definition":"The physical location of the accident event.","requirements":"Required for audit purposes and determination of applicable insurance liability.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.accident.location[x]","min":0,"max":"1"},"type":[{"code":"Address"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Location"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Item"}],"path":"ExplanationOfBenefit.item","short":"Product or service provided","definition":"A claim line. Either a simple (a product or service) or a 'group' of details which can also be a simple items or groups of sub-details.","comment":"Put the comment here for item","requirements":"The items to be processed for adjudication.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.id","path":"ExplanationOfBenefit.item.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.extension","path":"ExplanationOfBenefit.item.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.modifierExtension","path":"ExplanationOfBenefit.item.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.sequence","path":"ExplanationOfBenefit.item.sequence","short":"Item instance identifier","definition":"A number to uniquely identify item entries.","comment":"Line identification number that represents the number assigned in a source system for identification and processing. (36)","requirements":"Necessary to provide a mechanism to link to items from within the claim and within the adjudication details of the ClaimResponse.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.careTeamSequence","path":"ExplanationOfBenefit.item.careTeamSequence","short":"Applicable care team members","definition":"Care team members related to this service or product.","requirements":"Need to identify the individuals and their roles in the provision of the product or service.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.careTeamSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.diagnosisSequence","path":"ExplanationOfBenefit.item.diagnosisSequence","short":"Applicable diagnoses","definition":"Diagnoses applicable for this service or product.","requirements":"Need to related the product or service to the associated diagnoses.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.diagnosisSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.procedureSequence","path":"ExplanationOfBenefit.item.procedureSequence","short":"Applicable procedures","definition":"Procedures applicable for this service or product.","requirements":"Need to provide any listed specific procedures to support the product or service being claimed.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.procedureSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.informationSequence","path":"ExplanationOfBenefit.item.informationSequence","short":"Applicable exception and supporting information","definition":"Exceptions, special conditions and supporting information applicable for this service or product.","requirements":"Need to reference the supporting information items that relate directly to this product or service.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.informationSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.revenue","path":"ExplanationOfBenefit.item.revenue","short":"Revenue or cost center code","definition":"The type of revenue or cost center providing the product and/or service.","comment":"Code used on the UB-04 (Form Locator 42) to identify a specific accommodation, ancillary service, or billing calculation related to the service being billed (86)","requirements":"Needed in the processing of institutional claims.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.revenue","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCRevenueCodes"}},{"id":"ExplanationOfBenefit.item.category","path":"ExplanationOfBenefit.item.category","short":"Benefit classification","definition":"Code to identify the general type of benefits under which products and services are provided.","comment":"Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.","requirements":"Needed in the processing of institutional claims as this allows the insurer to determine whether a facial X-Ray is for dental, orthopedic, or facial surgery purposes.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.category","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitCategory"}],"strength":"example","description":"Benefit categories such as: oral, medical, vision, oral-basic etc.","valueSet":"http://hl7.org/fhir/ValueSet/ex-benefitcategory"}},{"id":"ExplanationOfBenefit.item.productOrService","path":"ExplanationOfBenefit.item.productOrService","short":"Billing, service, product, or drug code","definition":"When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.","comment":"Medical procedure a patient received from a health care provider. Current coding methods include: CPT-4 and HCFA Common Procedure Coding System Level II - (HCPCSII). (40)","requirements":"Necessary to state what was provided or done.","alias":["Drug Code","Bill Code","Service Code"],"min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.productOrService","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSProcedureCodes"}},{"id":"ExplanationOfBenefit.item.modifier","path":"ExplanationOfBenefit.item.modifier","short":"Product or service billing modifiers","definition":"Item typification or modifiers codes to convey additional context for the product or service.","comment":"Modifier(s) for the procedure represented on this line. Identifies special circumstances related to the performance of the service. (41)","requirements":"To support inclusion of the item for adjudication or to charge an elevated fee.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.modifier","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSModifiers"}},{"id":"ExplanationOfBenefit.item.programCode","path":"ExplanationOfBenefit.item.programCode","short":"Program the product or service is provided under","definition":"Identifies the program under which this may be recovered.","comment":"For example: Neonatal program, child dental program or drug users recovery program.","requirements":"Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.programCode","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ProgramCode"}],"strength":"example","description":"Program specific reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/ex-program-code"}},{"id":"ExplanationOfBenefit.item.serviced[x]","path":"ExplanationOfBenefit.item.serviced[x]","slicing":{"discriminator":[{"type":"type","path":"$this"}],"ordered":false,"rules":"closed"},"short":"Date or dates of service or product delivery","definition":"The date or dates when the service or product was supplied, performed or completed.","requirements":"Needed to determine whether the service or product was provided during the term of the insurance coverage.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.serviced[x]","min":0,"max":"1"},"type":[{"code":"date"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"w5","map":"FiveWs.done[x]"}]},{"id":"ExplanationOfBenefit.item.serviced[x]:servicedDate","path":"ExplanationOfBenefit.item.serviced[x]","sliceName":"servicedDate","short":"Date or dates of service or product delivery","definition":"The date or dates when the service or product was supplied, performed or completed.","requirements":"Needed to determine whether the service or product was provided during the term of the insurance coverage.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.serviced[x]","min":0,"max":"1"},"type":[{"code":"date"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"mapping":[{"identity":"w5","map":"FiveWs.done[x]"}]},{"id":"ExplanationOfBenefit.item.location[x]","path":"ExplanationOfBenefit.item.location[x]","short":"Place of service or where product was supplied","definition":"Where the product or service was provided.","requirements":"The location can alter whether the item was acceptable for insurance purposes or impact the determination of the benefit amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.location[x]","min":0,"max":"1"},"type":[{"code":"CodeableConcept"},{"code":"Address"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Location"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServicePlace"}],"strength":"example","description":"Place where the service is rendered.","valueSet":"http://hl7.org/fhir/ValueSet/service-place"},"mapping":[{"identity":"w5","map":"FiveWs.where[x]"}]},{"id":"ExplanationOfBenefit.item.quantity","path":"ExplanationOfBenefit.item.quantity","short":"Count of products or services","definition":"The number of repetitions of a service or product.","comment":"The quantity of units, times, days, visits, services, or treatments for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (42)","requirements":"Required when the product or service code does not convey the quantity provided.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.quantity","min":0,"max":"1"},"type":[{"code":"Quantity","profile":["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.unitPrice","path":"ExplanationOfBenefit.item.unitPrice","short":"Fee, charge or cost per item","definition":"If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.","requirements":"The amount charged to the patient by the provider for a single unit.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.unitPrice","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.factor","path":"ExplanationOfBenefit.item.factor","short":"Price scaling factor","definition":"A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.","comment":"To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).","requirements":"When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.factor","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.net","path":"ExplanationOfBenefit.item.net","short":"Total item cost","definition":"The quantity times the unit price for an additional service or product or charge.","comment":"For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.","requirements":"Provides the total amount claimed for the group (if a grouper) or the line item.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.net","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.udi","path":"ExplanationOfBenefit.item.udi","short":"Unique device identifier","definition":"Unique Device Identifiers associated with this line item.","requirements":"The UDI code allows the insurer to obtain device level information on the product supplied.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.udi","min":0,"max":"*"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Device"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.bodySite","path":"ExplanationOfBenefit.item.bodySite","short":"Anatomical location","definition":"Physical service site on the patient (limb, tooth, etc.).","comment":"For example: Providing a tooth code, allows an insurer to identify a provider performing a filling on a tooth that was previously removed.","requirements":"Allows insurer to validate specific procedures.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.bodySite","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"OralSites"}],"strength":"example","description":"The code for the teeth, quadrant, sextant and arch.","valueSet":"http://hl7.org/fhir/ValueSet/tooth"}},{"id":"ExplanationOfBenefit.item.subSite","path":"ExplanationOfBenefit.item.subSite","short":"Anatomical sub-location","definition":"A region or surface of the bodySite, e.g. limb region or tooth surface(s).","requirements":"Allows insurer to validate specific procedures.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.subSite","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Surface"}],"strength":"example","description":"The code for the tooth surface and surface combinations.","valueSet":"http://hl7.org/fhir/ValueSet/surface"}},{"id":"ExplanationOfBenefit.item.encounter","path":"ExplanationOfBenefit.item.encounter","short":"Encounters related to this billed item","definition":"A billed item may include goods or services provided in multiple encounters.","requirements":"Used in some jurisdictions to link clinical events to claim items.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.encounter","min":0,"max":"*"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Encounter"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.noteNumber","path":"ExplanationOfBenefit.item.noteNumber","short":"Applicable note numbers","definition":"The numbers associated with notes below which apply to the adjudication of this item.","comment":"References number of the associated processNote entered","requirements":"Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.noteNumber","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Adjudication"}],"path":"ExplanationOfBenefit.item.adjudication","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on value pattern","ordered":false,"rules":"closed"},"short":"Adjudication details","definition":"If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.","requirements":"The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"adjudication-has-amount-type-slice","severity":"error","human":"If Adjudication is present, it must have at least one adjudicationamounttype slice","expression":"(exists() implies where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication.id","path":"ExplanationOfBenefit.item.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication.extension","path":"ExplanationOfBenefit.item.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication.modifierExtension","path":"ExplanationOfBenefit.item.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.adjudication.category","path":"ExplanationOfBenefit.item.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator"}},{"id":"ExplanationOfBenefit.item.adjudication.reason","path":"ExplanationOfBenefit.item.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"For example, may indicate that the funds for this benefit type have been exhausted.","requirements":"To support understanding of variance from adjudication expectations.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"AdjudicationReason"}],"strength":"example","description":"Adjudication reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication-reason"}},{"id":"ExplanationOfBenefit.item.adjudication.amount","path":"ExplanationOfBenefit.item.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication.value","path":"ExplanationOfBenefit.item.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Adjudication"}],"path":"ExplanationOfBenefit.item.adjudication","sliceName":"adjudicationamounttype","short":"Adjudication details","definition":"If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.","comment":"Describes the various amount fields used when payers receive and adjudicate a claim. (187)","requirements":"The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.id","path":"ExplanationOfBenefit.item.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.extension","path":"ExplanationOfBenefit.item.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.modifierExtension","path":"ExplanationOfBenefit.item.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.category","path":"ExplanationOfBenefit.item.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication"}},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.reason","path":"ExplanationOfBenefit.item.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"For example, may indicate that the funds for this benefit type have been exhausted.","requirements":"To support understanding of variance from adjudication expectations.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"AdjudicationReason"}],"strength":"example","description":"Adjudication reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication-reason"}},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.amount","path":"ExplanationOfBenefit.item.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.value","path":"ExplanationOfBenefit.item.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:denialreason","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Adjudication"}],"path":"ExplanationOfBenefit.item.adjudication","sliceName":"denialreason","short":"Adjudication details","definition":"If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.","comment":"Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)","requirements":"The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.id","path":"ExplanationOfBenefit.item.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.extension","path":"ExplanationOfBenefit.item.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.modifierExtension","path":"ExplanationOfBenefit.item.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.category","path":"ExplanationOfBenefit.item.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator","code":"denialreason"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Adjudication"}],"strength":"example","description":"The adjudication codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication"}},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.reason","path":"ExplanationOfBenefit.item.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"For example, may indicate that the funds for this benefit type have been exhausted.","requirements":"To support understanding of variance from adjudication expectations.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes"}},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.amount","path":"ExplanationOfBenefit.item.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.value","path":"ExplanationOfBenefit.item.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Adjudication"}],"path":"ExplanationOfBenefit.item.adjudication","sliceName":"allowedunits","short":"Adjudication details","definition":"If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.","comment":"The quantity of units, times, days, visits, services, or treatments allowed for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (149)","requirements":"The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.id","path":"ExplanationOfBenefit.item.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.extension","path":"ExplanationOfBenefit.item.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.modifierExtension","path":"ExplanationOfBenefit.item.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.category","path":"ExplanationOfBenefit.item.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator","code":"allowedunits"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Adjudication"}],"strength":"example","description":"The adjudication codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication"}},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.reason","path":"ExplanationOfBenefit.item.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"For example, may indicate that the funds for this benefit type have been exhausted.","requirements":"To support understanding of variance from adjudication expectations.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"AdjudicationReason"}],"strength":"example","description":"Adjudication reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication-reason"}},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.amount","path":"ExplanationOfBenefit.item.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.value","path":"ExplanationOfBenefit.item.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Detail"}],"path":"ExplanationOfBenefit.item.detail","short":"Additional items","definition":"Second-tier of goods and services.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.id","path":"ExplanationOfBenefit.item.detail.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.detail.extension","path":"ExplanationOfBenefit.item.detail.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.detail.modifierExtension","path":"ExplanationOfBenefit.item.detail.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.detail.sequence","path":"ExplanationOfBenefit.item.detail.sequence","short":"Product or service provided","definition":"A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.","requirements":"The items to be processed for adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.revenue","path":"ExplanationOfBenefit.item.detail.revenue","short":"Revenue or cost center code","definition":"The type of revenue or cost center providing the product and/or service.","requirements":"Needed in the processing of institutional claims.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.revenue","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"RevenueCenter"}],"strength":"example","description":"Codes for the revenue or cost centers supplying the service and/or products.","valueSet":"http://hl7.org/fhir/ValueSet/ex-revenue-center"}},{"id":"ExplanationOfBenefit.item.detail.category","path":"ExplanationOfBenefit.item.detail.category","short":"Benefit classification","definition":"Code to identify the general type of benefits under which products and services are provided.","comment":"Examples include: Medical Care, Periodontics, Renal Dialysis, Vision Coverage.","requirements":"Needed in the processing of institutional claims as this allows the insurer to determine whether a facial X-Ray is for dental, orthopedic, or facial surgery purposes.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.category","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitCategory"}],"strength":"example","description":"Benefit categories such as: oral, medical, vision, oral-basic etc.","valueSet":"http://hl7.org/fhir/ValueSet/ex-benefitcategory"}},{"id":"ExplanationOfBenefit.item.detail.productOrService","path":"ExplanationOfBenefit.item.detail.productOrService","short":"Billing, service, product, or drug code","definition":"When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.","comment":"If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.","requirements":"Necessary to state what was provided or done.","alias":["Drug Code","Bill Code","Service Code"],"min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.productOrService","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServiceProduct"}],"strength":"example","description":"Allowable service and product codes.","valueSet":"http://hl7.org/fhir/ValueSet/service-uscls"}},{"id":"ExplanationOfBenefit.item.detail.modifier","path":"ExplanationOfBenefit.item.detail.modifier","short":"Service/Product billing modifiers","definition":"Item typification or modifiers codes to convey additional context for the product or service.","comment":"For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.","requirements":"To support inclusion of the item for adjudication or to charge an elevated fee.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.modifier","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Modifiers"}],"strength":"example","description":"Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.","valueSet":"http://hl7.org/fhir/ValueSet/claim-modifiers"}},{"id":"ExplanationOfBenefit.item.detail.programCode","path":"ExplanationOfBenefit.item.detail.programCode","short":"Program the product or service is provided under","definition":"Identifies the program under which this may be recovered.","comment":"For example: Neonatal program, child dental program or drug users recovery program.","requirements":"Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.programCode","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ProgramCode"}],"strength":"example","description":"Program specific reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/ex-program-code"}},{"id":"ExplanationOfBenefit.item.detail.quantity","path":"ExplanationOfBenefit.item.detail.quantity","short":"Count of products or services","definition":"The number of repetitions of a service or product.","requirements":"Required when the product or service code does not convey the quantity provided.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.quantity","min":0,"max":"1"},"type":[{"code":"Quantity","profile":["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.unitPrice","path":"ExplanationOfBenefit.item.detail.unitPrice","short":"Fee, charge or cost per item","definition":"If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.","requirements":"The amount charged to the patient by the provider for a single unit.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.unitPrice","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.factor","path":"ExplanationOfBenefit.item.detail.factor","short":"Price scaling factor","definition":"A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.","comment":"To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).","requirements":"When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.factor","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.net","path":"ExplanationOfBenefit.item.detail.net","short":"Total item cost","definition":"The quantity times the unit price for an additional service or product or charge.","comment":"For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.","requirements":"Provides the total amount claimed for the group (if a grouper) or the line item.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.net","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.udi","path":"ExplanationOfBenefit.item.detail.udi","short":"Unique device identifier","definition":"Unique Device Identifiers associated with this line item.","requirements":"The UDI code allows the insurer to obtain device level information on the product supplied.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.udi","min":0,"max":"*"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Device"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.noteNumber","path":"ExplanationOfBenefit.item.detail.noteNumber","short":"Applicable note numbers","definition":"The numbers associated with notes below which apply to the adjudication of this item.","requirements":"Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.noteNumber","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.adjudication","path":"ExplanationOfBenefit.item.detail.adjudication","short":"Detail level adjudication details","definition":"The adjudication results.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.adjudication","min":0,"max":"*"},"contentReference":"http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"SubDetail"}],"path":"ExplanationOfBenefit.item.detail.subDetail","short":"Additional items","definition":"Third-tier of goods and services.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.subDetail","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.id","path":"ExplanationOfBenefit.item.detail.subDetail.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.detail.subDetail.extension","path":"ExplanationOfBenefit.item.detail.subDetail.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.item.detail.subDetail.modifierExtension","path":"ExplanationOfBenefit.item.detail.subDetail.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.item.detail.subDetail.sequence","path":"ExplanationOfBenefit.item.detail.subDetail.sequence","short":"Product or service provided","definition":"A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.","requirements":"The items to be processed for adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.sequence","min":1,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.revenue","path":"ExplanationOfBenefit.item.detail.subDetail.revenue","short":"Revenue or cost center code","definition":"The type of revenue or cost center providing the product and/or service.","requirements":"Needed in the processing of institutional claims.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.revenue","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"RevenueCenter"}],"strength":"example","description":"Codes for the revenue or cost centers supplying the service and/or products.","valueSet":"http://hl7.org/fhir/ValueSet/ex-revenue-center"}},{"id":"ExplanationOfBenefit.item.detail.subDetail.category","path":"ExplanationOfBenefit.item.detail.subDetail.category","short":"Benefit classification","definition":"Code to identify the general type of benefits under which products and services are provided.","comment":"Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.","requirements":"Needed in the processing of institutional claims as this allows the insurer to determine whether a facial X-Ray is for dental, orthopedic, or facial surgery purposes.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.category","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitCategory"}],"strength":"example","description":"Benefit categories such as: oral, medical, vision, oral-basic etc.","valueSet":"http://hl7.org/fhir/ValueSet/ex-benefitcategory"}},{"id":"ExplanationOfBenefit.item.detail.subDetail.productOrService","path":"ExplanationOfBenefit.item.detail.subDetail.productOrService","short":"Billing, service, product, or drug code","definition":"When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.","comment":"If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.","requirements":"Necessary to state what was provided or done.","alias":["Drug Code","Bill Code","Service Code"],"min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.productOrService","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServiceProduct"}],"strength":"example","description":"Allowable service and product codes.","valueSet":"http://hl7.org/fhir/ValueSet/service-uscls"}},{"id":"ExplanationOfBenefit.item.detail.subDetail.modifier","path":"ExplanationOfBenefit.item.detail.subDetail.modifier","short":"Service/Product billing modifiers","definition":"Item typification or modifiers codes to convey additional context for the product or service.","comment":"For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or outside of office hours.","requirements":"To support inclusion of the item for adjudication or to charge an elevated fee.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.modifier","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Modifiers"}],"strength":"example","description":"Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.","valueSet":"http://hl7.org/fhir/ValueSet/claim-modifiers"}},{"id":"ExplanationOfBenefit.item.detail.subDetail.programCode","path":"ExplanationOfBenefit.item.detail.subDetail.programCode","short":"Program the product or service is provided under","definition":"Identifies the program under which this may be recovered.","comment":"For example: Neonatal program, child dental program or drug users recovery program.","requirements":"Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.programCode","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ProgramCode"}],"strength":"example","description":"Program specific reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/ex-program-code"}},{"id":"ExplanationOfBenefit.item.detail.subDetail.quantity","path":"ExplanationOfBenefit.item.detail.subDetail.quantity","short":"Count of products or services","definition":"The number of repetitions of a service or product.","requirements":"Required when the product or service code does not convey the quantity provided.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.quantity","min":0,"max":"1"},"type":[{"code":"Quantity","profile":["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.unitPrice","path":"ExplanationOfBenefit.item.detail.subDetail.unitPrice","short":"Fee, charge or cost per item","definition":"If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.","requirements":"The amount charged to the patient by the provider for a single unit.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.unitPrice","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.factor","path":"ExplanationOfBenefit.item.detail.subDetail.factor","short":"Price scaling factor","definition":"A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.","comment":"To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).","requirements":"When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.factor","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.net","path":"ExplanationOfBenefit.item.detail.subDetail.net","short":"Total item cost","definition":"The quantity times the unit price for an additional service or product or charge.","comment":"For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.","requirements":"Provides the total amount claimed for the group (if a grouper) or the line item.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.net","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.udi","path":"ExplanationOfBenefit.item.detail.subDetail.udi","short":"Unique device identifier","definition":"Unique Device Identifiers associated with this line item.","requirements":"The UDI code allows the insurer to obtain device level information on the product supplied.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.udi","min":0,"max":"*"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Device"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.noteNumber","path":"ExplanationOfBenefit.item.detail.subDetail.noteNumber","short":"Applicable note numbers","definition":"The numbers associated with notes below which apply to the adjudication of this item.","requirements":"Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.noteNumber","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.item.detail.subDetail.adjudication","path":"ExplanationOfBenefit.item.detail.subDetail.adjudication","short":"Subdetail level adjudication details","definition":"The adjudication results.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.item.detail.subDetail.adjudication","min":0,"max":"*"},"contentReference":"http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"740;600"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"AddedItem"}],"path":"ExplanationOfBenefit.addItem","short":"Insurer added line items","definition":"The first-tier service adjudications for payor added product or service lines.","requirements":"Insurers may redefine the provided product or service or may package and/or decompose groups of products and services. The addItems allows the insurer to provide their line item list with linkage to the submitted items/details/sub-details. In a preauthorization the insurer may use the addItem structure to provide additional information on authorized products and services.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.id","path":"ExplanationOfBenefit.addItem.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.addItem.extension","path":"ExplanationOfBenefit.addItem.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.addItem.modifierExtension","path":"ExplanationOfBenefit.addItem.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.addItem.itemSequence","path":"ExplanationOfBenefit.addItem.itemSequence","short":"Item sequence number","definition":"Claim items which this service line is intended to replace.","requirements":"Provides references to the claim items.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.itemSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detailSequence","path":"ExplanationOfBenefit.addItem.detailSequence","short":"Detail sequence number","definition":"The sequence number of the details within the claim item which this line is intended to replace.","requirements":"Provides references to the claim details within the claim item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detailSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.subDetailSequence","path":"ExplanationOfBenefit.addItem.subDetailSequence","short":"Subdetail sequence number","definition":"The sequence number of the sub-details woithin the details within the claim item which this line is intended to replace.","requirements":"Provides references to the claim sub-details within the claim detail.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.subDetailSequence","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.provider","path":"ExplanationOfBenefit.addItem.provider","short":"Authorized providers","definition":"The providers who are authorized for the services rendered to the patient.","requirements":"Insurer may provide authorization specifically to a restricted set of providers rather than an open authorization.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.provider","min":0,"max":"*"},"type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/Organization"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"w5","map":"FiveWs.source"}]},{"id":"ExplanationOfBenefit.addItem.productOrService","path":"ExplanationOfBenefit.addItem.productOrService","short":"Billing, service, product, or drug code","definition":"When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.","comment":"If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.","requirements":"Necessary to state what was provided or done.","alias":["Drug Code","Bill Code","Service Code"],"min":1,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.productOrService","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServiceProduct"}],"strength":"example","description":"Allowable service and product codes.","valueSet":"http://hl7.org/fhir/ValueSet/service-uscls"}},{"id":"ExplanationOfBenefit.addItem.modifier","path":"ExplanationOfBenefit.addItem.modifier","short":"Service/Product billing modifiers","definition":"Item typification or modifiers codes to convey additional context for the product or service.","comment":"For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.","requirements":"To support inclusion of the item for adjudication or to charge an elevated fee.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.modifier","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Modifiers"}],"strength":"example","description":"Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.","valueSet":"http://hl7.org/fhir/ValueSet/claim-modifiers"}},{"id":"ExplanationOfBenefit.addItem.programCode","path":"ExplanationOfBenefit.addItem.programCode","short":"Program the product or service is provided under","definition":"Identifies the program under which this may be recovered.","comment":"For example: Neonatal program, child dental program or drug users recovery program.","requirements":"Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.programCode","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ProgramCode"}],"strength":"example","description":"Program specific reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/ex-program-code"}},{"id":"ExplanationOfBenefit.addItem.serviced[x]","path":"ExplanationOfBenefit.addItem.serviced[x]","short":"Date or dates of service or product delivery","definition":"The date or dates when the service or product was supplied, performed or completed.","requirements":"Needed to determine whether the service or product was provided during the term of the insurance coverage.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.serviced[x]","min":0,"max":"1"},"type":[{"code":"date"},{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"w5","map":"FiveWs.done[x]"}]},{"id":"ExplanationOfBenefit.addItem.location[x]","path":"ExplanationOfBenefit.addItem.location[x]","short":"Place of service or where product was supplied","definition":"Where the product or service was provided.","requirements":"The location can alter whether the item was acceptable for insurance purposes or impact the determination of the benefit amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.location[x]","min":0,"max":"1"},"type":[{"code":"CodeableConcept"},{"code":"Address"},{"code":"Reference","targetProfile":["http://hl7.org/fhir/StructureDefinition/Location"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServicePlace"}],"strength":"example","description":"Place where the service is rendered.","valueSet":"http://hl7.org/fhir/ValueSet/service-place"},"mapping":[{"identity":"w5","map":"FiveWs.where[x]"}]},{"id":"ExplanationOfBenefit.addItem.quantity","path":"ExplanationOfBenefit.addItem.quantity","short":"Count of products or services","definition":"The number of repetitions of a service or product.","requirements":"Required when the product or service code does not convey the quantity provided.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.quantity","min":0,"max":"1"},"type":[{"code":"Quantity","profile":["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.unitPrice","path":"ExplanationOfBenefit.addItem.unitPrice","short":"Fee, charge or cost per item","definition":"If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.","requirements":"The amount charged to the patient by the provider for a single unit.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.unitPrice","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.factor","path":"ExplanationOfBenefit.addItem.factor","short":"Price scaling factor","definition":"A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.","comment":"To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).","requirements":"When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.factor","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.net","path":"ExplanationOfBenefit.addItem.net","short":"Total item cost","definition":"The quantity times the unit price for an additional service or product or charge.","comment":"For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.","requirements":"Provides the total amount claimed for the group (if a grouper) or the line item.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.net","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.bodySite","path":"ExplanationOfBenefit.addItem.bodySite","short":"Anatomical location","definition":"Physical service site on the patient (limb, tooth, etc.).","comment":"For example, providing a tooth code allows an insurer to identify a provider performing a filling on a tooth that was previously removed.","requirements":"Allows insurer to validate specific procedures.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.bodySite","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"OralSites"}],"strength":"example","description":"The code for the teeth, quadrant, sextant and arch.","valueSet":"http://hl7.org/fhir/ValueSet/tooth"}},{"id":"ExplanationOfBenefit.addItem.subSite","path":"ExplanationOfBenefit.addItem.subSite","short":"Anatomical sub-location","definition":"A region or surface of the bodySite, e.g. limb region or tooth surface(s).","requirements":"Allows insurer to validate specific procedures.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.subSite","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Surface"}],"strength":"example","description":"The code for the tooth surface and surface combinations.","valueSet":"http://hl7.org/fhir/ValueSet/surface"}},{"id":"ExplanationOfBenefit.addItem.noteNumber","path":"ExplanationOfBenefit.addItem.noteNumber","short":"Applicable note numbers","definition":"The numbers associated with notes below which apply to the adjudication of this item.","requirements":"Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.noteNumber","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.adjudication","path":"ExplanationOfBenefit.addItem.adjudication","short":"Added items adjudication","definition":"The adjudication results.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.adjudication","min":0,"max":"*"},"contentReference":"http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"740;600"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"AddedItemDetail"}],"path":"ExplanationOfBenefit.addItem.detail","short":"Insurer added line items","definition":"The second-tier service adjudications for payor added services.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.id","path":"ExplanationOfBenefit.addItem.detail.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.addItem.detail.extension","path":"ExplanationOfBenefit.addItem.detail.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.addItem.detail.modifierExtension","path":"ExplanationOfBenefit.addItem.detail.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.addItem.detail.productOrService","path":"ExplanationOfBenefit.addItem.detail.productOrService","short":"Billing, service, product, or drug code","definition":"When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.","comment":"If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.","requirements":"Necessary to state what was provided or done.","alias":["Drug Code","Bill Code","Service Code"],"min":1,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.productOrService","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServiceProduct"}],"strength":"example","description":"Allowable service and product codes.","valueSet":"http://hl7.org/fhir/ValueSet/service-uscls"}},{"id":"ExplanationOfBenefit.addItem.detail.modifier","path":"ExplanationOfBenefit.addItem.detail.modifier","short":"Service/Product billing modifiers","definition":"Item typification or modifiers codes to convey additional context for the product or service.","comment":"For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.","requirements":"To support inclusion of the item for adjudication or to charge an elevated fee.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.modifier","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Modifiers"}],"strength":"example","description":"Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.","valueSet":"http://hl7.org/fhir/ValueSet/claim-modifiers"}},{"id":"ExplanationOfBenefit.addItem.detail.quantity","path":"ExplanationOfBenefit.addItem.detail.quantity","short":"Count of products or services","definition":"The number of repetitions of a service or product.","requirements":"Required when the product or service code does not convey the quantity provided.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.quantity","min":0,"max":"1"},"type":[{"code":"Quantity","profile":["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.unitPrice","path":"ExplanationOfBenefit.addItem.detail.unitPrice","short":"Fee, charge or cost per item","definition":"If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.","requirements":"The amount charged to the patient by the provider for a single unit.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.unitPrice","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.factor","path":"ExplanationOfBenefit.addItem.detail.factor","short":"Price scaling factor","definition":"A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.","comment":"To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).","requirements":"When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.factor","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.net","path":"ExplanationOfBenefit.addItem.detail.net","short":"Total item cost","definition":"The quantity times the unit price for an additional service or product or charge.","comment":"For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.","requirements":"Provides the total amount claimed for the group (if a grouper) or the line item.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.net","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.noteNumber","path":"ExplanationOfBenefit.addItem.detail.noteNumber","short":"Applicable note numbers","definition":"The numbers associated with notes below which apply to the adjudication of this item.","requirements":"Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.noteNumber","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.adjudication","path":"ExplanationOfBenefit.addItem.detail.adjudication","short":"Added items adjudication","definition":"The adjudication results.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.adjudication","min":0,"max":"*"},"contentReference":"http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"740;600"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"AddedItemDetailSubDetail"}],"path":"ExplanationOfBenefit.addItem.detail.subDetail","short":"Insurer added line items","definition":"The third-tier service adjudications for payor added services.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.id","path":"ExplanationOfBenefit.addItem.detail.subDetail.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.extension","path":"ExplanationOfBenefit.addItem.detail.subDetail.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.modifierExtension","path":"ExplanationOfBenefit.addItem.detail.subDetail.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.productOrService","path":"ExplanationOfBenefit.addItem.detail.subDetail.productOrService","short":"Billing, service, product, or drug code","definition":"When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.","comment":"If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.","requirements":"Necessary to state what was provided or done.","alias":["Drug Code","Bill Code","Service Code"],"min":1,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.productOrService","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"ServiceProduct"}],"strength":"example","description":"Allowable service and product codes.","valueSet":"http://hl7.org/fhir/ValueSet/service-uscls"}},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.modifier","path":"ExplanationOfBenefit.addItem.detail.subDetail.modifier","short":"Service/Product billing modifiers","definition":"Item typification or modifiers codes to convey additional context for the product or service.","comment":"For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.","requirements":"To support inclusion of the item for adjudication or to charge an elevated fee.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.modifier","min":0,"max":"*"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Modifiers"}],"strength":"example","description":"Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.","valueSet":"http://hl7.org/fhir/ValueSet/claim-modifiers"}},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.quantity","path":"ExplanationOfBenefit.addItem.detail.subDetail.quantity","short":"Count of products or services","definition":"The number of repetitions of a service or product.","requirements":"Required when the product or service code does not convey the quantity provided.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.quantity","min":0,"max":"1"},"type":[{"code":"Quantity","profile":["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.unitPrice","path":"ExplanationOfBenefit.addItem.detail.subDetail.unitPrice","short":"Fee, charge or cost per item","definition":"If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.","requirements":"The amount charged to the patient by the provider for a single unit.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.unitPrice","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.factor","path":"ExplanationOfBenefit.addItem.detail.subDetail.factor","short":"Price scaling factor","definition":"A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.","comment":"To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).","requirements":"When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.factor","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.net","path":"ExplanationOfBenefit.addItem.detail.subDetail.net","short":"Total item cost","definition":"The quantity times the unit price for an additional service or product or charge.","comment":"For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.","requirements":"Provides the total amount claimed for the group (if a grouper) or the line item.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.net","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.noteNumber","path":"ExplanationOfBenefit.addItem.detail.subDetail.noteNumber","short":"Applicable note numbers","definition":"The numbers associated with notes below which apply to the adjudication of this item.","requirements":"Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.noteNumber","min":0,"max":"*"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.addItem.detail.subDetail.adjudication","path":"ExplanationOfBenefit.addItem.detail.subDetail.adjudication","short":"Added items adjudication","definition":"The adjudication results.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.addItem.detail.subDetail.adjudication","min":0,"max":"*"},"contentReference":"http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication","path":"ExplanationOfBenefit.adjudication","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on value pattern","ordered":false,"rules":"closed"},"short":"Header-level adjudication","definition":"The adjudication results which are presented at the header level rather than at the line-item or add-item levels.","requirements":"Some insurers will receive line-items but provide the adjudication only at a summary or header-level.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"adjudication-has-amount-type-slice","severity":"error","human":"If Adjudication is present, it must have at least one adjudicationamounttype slice","expression":"(exists() implies where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication.id","path":"ExplanationOfBenefit.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.adjudication.extension","path":"ExplanationOfBenefit.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.adjudication.modifierExtension","path":"ExplanationOfBenefit.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.adjudication.category","path":"ExplanationOfBenefit.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator"}},{"id":"ExplanationOfBenefit.adjudication.reason","path":"ExplanationOfBenefit.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"For example, may indicate that the funds for this benefit type have been exhausted.","requirements":"To support understanding of variance from adjudication expectations.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"AdjudicationReason"}],"strength":"example","description":"Adjudication reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication-reason"}},{"id":"ExplanationOfBenefit.adjudication.amount","path":"ExplanationOfBenefit.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication.value","path":"ExplanationOfBenefit.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype","path":"ExplanationOfBenefit.adjudication","sliceName":"adjudicationamounttype","short":"Header-level adjudication","definition":"The adjudication results which are presented at the header level rather than at the line-item or add-item levels.","comment":"Describes the various amount fields used when payers receive and adjudicate a claim. (187)","requirements":"Some insurers will receive line-items but provide the adjudication only at a summary or header-level.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.id","path":"ExplanationOfBenefit.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.extension","path":"ExplanationOfBenefit.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.modifierExtension","path":"ExplanationOfBenefit.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.category","path":"ExplanationOfBenefit.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication"}},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.reason","path":"ExplanationOfBenefit.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"For example, may indicate that the funds for this benefit type have been exhausted.","requirements":"To support understanding of variance from adjudication expectations.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"AdjudicationReason"}],"strength":"example","description":"Adjudication reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication-reason"}},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.amount","path":"ExplanationOfBenefit.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.value","path":"ExplanationOfBenefit.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication:denialreason","path":"ExplanationOfBenefit.adjudication","sliceName":"denialreason","short":"Header-level adjudication","definition":"The adjudication results which are presented at the header level rather than at the line-item or add-item levels.","comment":"Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)","requirements":"Some insurers will receive line-items but provide the adjudication only at a summary or header-level.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.adjudication","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication:denialreason.id","path":"ExplanationOfBenefit.adjudication.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.adjudication:denialreason.extension","path":"ExplanationOfBenefit.adjudication.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.adjudication:denialreason.modifierExtension","path":"ExplanationOfBenefit.adjudication.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.adjudication:denialreason.category","path":"ExplanationOfBenefit.adjudication.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to enable understanding of the context of the other information in the adjudication.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator","code":"denialreason"}]},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Adjudication"}],"strength":"example","description":"The adjudication codes.","valueSet":"http://hl7.org/fhir/ValueSet/adjudication"}},{"id":"ExplanationOfBenefit.adjudication:denialreason.reason","path":"ExplanationOfBenefit.adjudication.reason","short":"Explanation of adjudication outcome","definition":"A code supporting the understanding of the adjudication result and explaining variance from expected amount.","comment":"Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)","requirements":"To support understanding of variance from adjudication expectations.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.reason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes"}},{"id":"ExplanationOfBenefit.adjudication:denialreason.amount","path":"ExplanationOfBenefit.adjudication.amount","short":"Monetary amount","definition":"Monetary amount associated with the category.","comment":"For example, amount submitted, eligible amount, co-payment, and benefit payable.","requirements":"Most adjuciation categories convey a monetary amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.adjudication:denialreason.value","path":"ExplanationOfBenefit.adjudication.value","short":"Non-monitary value","definition":"A non-monetary value associated with the category. Mutually exclusive to the amount element above.","comment":"For example: eligible percentage or co-payment percentage.","requirements":"Some adjudication categories convey a percentage or a fixed value.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.item.adjudication.value","min":0,"max":"1"},"type":[{"code":"decimal"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.total","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"'360;620"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Total"}],"path":"ExplanationOfBenefit.total","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on value pattern","ordered":false,"rules":"open"},"short":"Adjudication totals","definition":"Categorized monetary totals for the adjudication.","comment":"Totals for amounts submitted, co-pays, benefits payable etc.","requirements":"To provide the requestor with financial totals by category for the adjudication.","min":1,"max":"*","base":{"path":"ExplanationOfBenefit.total","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.total.id","path":"ExplanationOfBenefit.total.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.total.extension","path":"ExplanationOfBenefit.total.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.total.modifierExtension","path":"ExplanationOfBenefit.total.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.total.category","path":"ExplanationOfBenefit.total.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to convey the type of total provided.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.total.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBTotalCategoryDiscriminator"}},{"id":"ExplanationOfBenefit.total.amount","path":"ExplanationOfBenefit.total.amount","short":"Financial total for the category","definition":"Monetary total amount associated with the category.","comment":"Total amount for each category (i.e., submitted, allowed, etc.) (148)","requirements":"Needed to convey the total monetary amount.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.total.amount","min":1,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.total:adjudicationamounttype","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"'360;620"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Total"}],"path":"ExplanationOfBenefit.total","sliceName":"adjudicationamounttype","short":"Adjudication totals","definition":"Categorized monetary totals for the adjudication.","comment":"Describes the various amount fields used when payers receive and adjudicate a claim. (187)","requirements":"To provide the requestor with financial totals by category for the adjudication.","min":1,"max":"*","base":{"path":"ExplanationOfBenefit.total","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.id","path":"ExplanationOfBenefit.total.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.extension","path":"ExplanationOfBenefit.total.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.modifierExtension","path":"ExplanationOfBenefit.total.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.category","path":"ExplanationOfBenefit.total.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to convey the type of total provided.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.total.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication"}},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.amount","path":"ExplanationOfBenefit.total.amount","short":"Financial total for the category","definition":"Monetary total amount associated with the category.","requirements":"Needed to convey the total monetary amount.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.total.amount","min":1,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.total:inoutnetwork","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"'360;620"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Total"}],"path":"ExplanationOfBenefit.total","sliceName":"inoutnetwork","short":"Adjudication totals","definition":"Categorized monetary totals for the adjudication.","comment":"Indicates the in network or out of network payment status of the claim. (142)","requirements":"To provide the requestor with financial totals by category for the adjudication.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.total","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.total:inoutnetwork.id","path":"ExplanationOfBenefit.total.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.total:inoutnetwork.extension","path":"ExplanationOfBenefit.total.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.total:inoutnetwork.modifierExtension","path":"ExplanationOfBenefit.total.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.total:inoutnetwork.category","path":"ExplanationOfBenefit.total.category","short":"Type of adjudication information","definition":"A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.","comment":"For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.","requirements":"Needed to convey the type of total provided.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.total.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerBenefitPaymentStatus"}},{"id":"ExplanationOfBenefit.total:inoutnetwork.amount","path":"ExplanationOfBenefit.total.amount","short":"Financial total for the category","definition":"Monetary total amount associated with the category.","requirements":"Needed to convey the total monetary amount.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.total.amount","min":1,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":true},{"id":"ExplanationOfBenefit.payment","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint","valueString":"360;650"},{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Payment"}],"path":"ExplanationOfBenefit.payment","short":"Payment Details","definition":"Payment details for the adjudication of the claim.","requirements":"Needed to convey references to the financial instrument that has been used if payment has been made.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment","min":0,"max":"1"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.payment.id","path":"ExplanationOfBenefit.payment.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.payment.extension","path":"ExplanationOfBenefit.payment.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.payment.modifierExtension","path":"ExplanationOfBenefit.payment.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.payment.type","path":"ExplanationOfBenefit.payment.type","short":"Partial or complete payment","definition":"Whether this represents partial or complete payment of the benefits payable.","comment":"Indicates whether the claim was paid or denied. (91)","requirements":"To advise the requestor when the insurer believes all payments to have been completed.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment.type","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerClaimPaymentStatusCode"}},{"id":"ExplanationOfBenefit.payment.adjustment","path":"ExplanationOfBenefit.payment.adjustment","short":"Payment adjustment for non-claim issues","definition":"Total amount of all adjustments to this payment included in this transaction which are not related to this claim's adjudication.","comment":"Insurers will deduct amounts owing from the provider (adjustment), such as a prior overpayment, from the amount owing to the provider (benefits payable) when payment is made to the provider.","requirements":"To advise the requestor of adjustments applied to the payment.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment.adjustment","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.payment.adjustmentReason","path":"ExplanationOfBenefit.payment.adjustmentReason","short":"Explanation for the variance","definition":"Reason for the payment adjustment.","requirements":"Needed to clarify the monetary adjustment.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment.adjustmentReason","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"PaymentAdjustmentReason"}],"strength":"example","description":"Payment Adjustment reason codes.","valueSet":"http://hl7.org/fhir/ValueSet/payment-adjustment-reason"}},{"id":"ExplanationOfBenefit.payment.date","path":"ExplanationOfBenefit.payment.date","short":"Expected date of payment","definition":"Estimated date the payment will be issued or the actual issue date of payment.","comment":"The date the claim was paid. (107)","requirements":"To advise the payee when payment can be expected.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment.date","min":0,"max":"1"},"type":[{"code":"date"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.payment.amount","path":"ExplanationOfBenefit.payment.amount","short":"Payable amount after adjustment","definition":"Benefits payable less any payment adjustment.","requirements":"Needed to provide the actual payment amount.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment.amount","min":0,"max":"1"},"type":[{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.payment.identifier","path":"ExplanationOfBenefit.payment.identifier","short":"Business identifier for the payment","definition":"Issuer's unique identifier for the payment instrument.","comment":"For example: EFT number or check number.","requirements":"Enable the receiver to reconcile when payment received.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.payment.identifier","min":0,"max":"1"},"type":[{"code":"Identifier"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.formCode","path":"ExplanationOfBenefit.formCode","short":"Printed form identifier","definition":"A code for the form to be used for printing the content.","comment":"May be needed to identify specific jurisdictional forms.","requirements":"Needed to specify the specific form used for producing output for this response.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.formCode","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Forms"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"example","description":"The forms codes.","valueSet":"http://hl7.org/fhir/ValueSet/forms"}},{"id":"ExplanationOfBenefit.form","path":"ExplanationOfBenefit.form","short":"Printed reference or actual form","definition":"The actual form, by reference or inclusion, for printing the content or an EOB.","comment":"Needed to permit insurers to include the actual form.","requirements":"Needed to include the specific form used for producing output for this response.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.form","min":0,"max":"1"},"type":[{"code":"Attachment"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.processNote","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Note"}],"path":"ExplanationOfBenefit.processNote","short":"Note concerning adjudication","definition":"A note that describes or explains adjudication results in a human readable form.","requirements":"Provides the insurer specific textual explanations associated with the processing.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.processNote","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.processNote.id","path":"ExplanationOfBenefit.processNote.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.processNote.extension","path":"ExplanationOfBenefit.processNote.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.processNote.modifierExtension","path":"ExplanationOfBenefit.processNote.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.processNote.number","path":"ExplanationOfBenefit.processNote.number","short":"Note instance identifier","definition":"A number to uniquely identify a note entry.","requirements":"Necessary to provide a mechanism to link from adjudications.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.processNote.number","min":0,"max":"1"},"type":[{"code":"positiveInt"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.processNote.type","path":"ExplanationOfBenefit.processNote.type","short":"display | print | printoper","definition":"The business purpose of the note text.","requirements":"To convey the expectation for when the text is used.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.processNote.type","min":0,"max":"1"},"type":[{"code":"code"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"NoteType"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"required","description":"The presentation types of notes.","valueSet":"http://hl7.org/fhir/ValueSet/note-type|4.0.1"}},{"id":"ExplanationOfBenefit.processNote.text","path":"ExplanationOfBenefit.processNote.text","short":"Note explanatory text","definition":"The explanation or description associated with the processing.","comment":"Payment denial explanation to a member, typically goes on the EOB when the payment is denied or disallowed (181)","requirements":"Required to provide human readable explanation.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.processNote.text","min":0,"max":"1"},"type":[{"code":"string"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"mustSupport":true,"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.processNote.language","path":"ExplanationOfBenefit.processNote.language","short":"Language of the text","definition":"A code to define the language used in the text of the note.","comment":"Only required if the language is different from the resource language.","requirements":"Note text may vary from the resource defined language.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.processNote.language","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-maxValueSet","valueCanonical":"http://hl7.org/fhir/ValueSet/all-languages"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"Language"},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding","valueBoolean":true}],"strength":"preferred","description":"A human language.","valueSet":"http://hl7.org/fhir/ValueSet/languages"}},{"id":"ExplanationOfBenefit.benefitPeriod","path":"ExplanationOfBenefit.benefitPeriod","short":"When the benefits are applicable","definition":"The term of the benefits documented in this response.","comment":"Not applicable when use=claim.","requirements":"Needed as coverages may be multi-year while benefits tend to be annual therefore a separate expression of the benefit period is needed.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitPeriod","min":0,"max":"1"},"type":[{"code":"Period"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"BenefitBalance"}],"path":"ExplanationOfBenefit.benefitBalance","short":"Balance by Benefit Category","definition":"Balance by Benefit Category.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.benefitBalance","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance.id","path":"ExplanationOfBenefit.benefitBalance.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.benefitBalance.extension","path":"ExplanationOfBenefit.benefitBalance.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.benefitBalance.modifierExtension","path":"ExplanationOfBenefit.benefitBalance.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.benefitBalance.category","path":"ExplanationOfBenefit.benefitBalance.category","short":"Benefit classification","definition":"Code to identify the general type of benefits under which products and services are provided.","comment":"Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.","requirements":"Needed to convey the category of service or product for which eligibility is sought.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.category","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitCategory"}],"strength":"example","description":"Benefit categories such as: oral, medical, vision, oral-basic etc.","valueSet":"http://hl7.org/fhir/ValueSet/ex-benefitcategory"}},{"id":"ExplanationOfBenefit.benefitBalance.excluded","path":"ExplanationOfBenefit.benefitBalance.excluded","short":"Excluded from the plan","definition":"True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.","requirements":"Needed to identify items that are specifically excluded from the coverage.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.excluded","min":0,"max":"1"},"type":[{"code":"boolean"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance.name","path":"ExplanationOfBenefit.benefitBalance.name","short":"Short name for the benefit","definition":"A short name or tag for the benefit.","comment":"For example: MED01, or DENT2.","requirements":"Required to align with other plan names.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.name","min":0,"max":"1"},"type":[{"code":"string"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance.description","path":"ExplanationOfBenefit.benefitBalance.description","short":"Description of the benefit or services covered","definition":"A richer description of the benefit or services covered.","comment":"For example, 'DENT2 covers 100% of basic, 50% of major but excludes Ortho, Implants and Cosmetic services'.","requirements":"Needed for human readable reference.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.description","min":0,"max":"1"},"type":[{"code":"string"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance.network","path":"ExplanationOfBenefit.benefitBalance.network","short":"In or out of network","definition":"Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.","requirements":"Needed as in or out of network providers are treated differently under the coverage.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.network","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitNetwork"}],"strength":"example","description":"Code to classify in or out of network services.","valueSet":"http://hl7.org/fhir/ValueSet/benefit-network"}},{"id":"ExplanationOfBenefit.benefitBalance.unit","path":"ExplanationOfBenefit.benefitBalance.unit","short":"Individual or family","definition":"Indicates if the benefits apply to an individual or to the family.","requirements":"Needed for the understanding of the benefits.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.unit","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitUnit"}],"strength":"example","description":"Unit covered/serviced - individual or family.","valueSet":"http://hl7.org/fhir/ValueSet/benefit-unit"}},{"id":"ExplanationOfBenefit.benefitBalance.term","path":"ExplanationOfBenefit.benefitBalance.term","short":"Annual or lifetime","definition":"The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.","requirements":"Needed for the understanding of the benefits.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.term","min":0,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitTerm"}],"strength":"example","description":"Coverage unit - annual, lifetime.","valueSet":"http://hl7.org/fhir/ValueSet/benefit-term"}},{"id":"ExplanationOfBenefit.benefitBalance.financial","extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name","valueString":"Benefit"}],"path":"ExplanationOfBenefit.benefitBalance.financial","short":"Benefit Summary","definition":"Benefits Used to date.","min":0,"max":"*","base":{"path":"ExplanationOfBenefit.benefitBalance.financial","min":0,"max":"*"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance.financial.id","path":"ExplanationOfBenefit.benefitBalance.financial.id","representation":["xmlAttr"],"short":"Unique id for inter-element referencing","definition":"Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.","min":0,"max":"1","base":{"path":"Element.id","min":0,"max":"1"},"type":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type","valueUrl":"string"}],"code":"http://hl7.org/fhirpath/System.String"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.benefitBalance.financial.extension","path":"ExplanationOfBenefit.benefitBalance.financial.extension","short":"Additional content defined by implementations","definition":"May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","alias":["extensions","user content"],"min":0,"max":"*","base":{"path":"Element.extension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":false,"isSummary":false,"mapping":[{"identity":"rim","map":"n/a"}]},{"id":"ExplanationOfBenefit.benefitBalance.financial.modifierExtension","path":"ExplanationOfBenefit.benefitBalance.financial.modifierExtension","short":"Extensions that cannot be ignored even if unrecognized","definition":"May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).","comment":"There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.","requirements":"Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).","alias":["extensions","user content","modifiers"],"min":0,"max":"*","base":{"path":"BackboneElement.modifierExtension","min":0,"max":"*"},"type":[{"code":"Extension"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"ext-1","severity":"error","human":"Must have either extensions or value[x], not both","expression":"extension.exists() != value.exists()","xpath":"exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])","source":"http://hl7.org/fhir/StructureDefinition/Extension"}],"isModifier":true,"isModifierReason":"Modifier extensions are expected to modify the meaning or interpretation of the element that contains them","isSummary":true,"mapping":[{"identity":"rim","map":"N/A"}]},{"id":"ExplanationOfBenefit.benefitBalance.financial.type","path":"ExplanationOfBenefit.benefitBalance.financial.type","short":"Benefit classification","definition":"Classification of benefit being provided.","comment":"For example: deductible, visits, benefit amount.","requirements":"Needed to convey the nature of the benefit.","min":1,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.financial.type","min":1,"max":"1"},"type":[{"code":"CodeableConcept"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false,"binding":{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName","valueString":"BenefitType"}],"strength":"example","description":"Deductable, visits, co-pay, etc.","valueSet":"http://hl7.org/fhir/ValueSet/benefit-type"}},{"id":"ExplanationOfBenefit.benefitBalance.financial.allowed[x]","path":"ExplanationOfBenefit.benefitBalance.financial.allowed[x]","short":"Benefits allowed","definition":"The quantity of the benefit which is permitted under the coverage.","requirements":"Needed to convey the benefits offered under the coverage.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.financial.allowed[x]","min":0,"max":"1"},"type":[{"code":"unsignedInt"},{"code":"string"},{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false},{"id":"ExplanationOfBenefit.benefitBalance.financial.used[x]","path":"ExplanationOfBenefit.benefitBalance.financial.used[x]","short":"Benefits used","definition":"The quantity of the benefit which have been consumed to date.","requirements":"Needed to convey the benefits consumed to date.","min":0,"max":"1","base":{"path":"ExplanationOfBenefit.benefitBalance.financial.used[x]","min":0,"max":"1"},"type":[{"code":"unsignedInt"},{"code":"Money"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"}],"isModifier":false,"isSummary":false}]},"differential":{"element":[{"id":"ExplanationOfBenefit","path":"ExplanationOfBenefit","constraint":[{"key":"dom-2","severity":"error","human":"If the resource is contained in another resource, it SHALL NOT contain nested Resources","expression":"contained.contained.empty()","xpath":"not(parent::f:contained and f:contained)","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"dom-3","severity":"error","human":"If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource","expression":"contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()","xpath":"not(exists(for $id in f:contained/*/f:id/@value return $contained[not(parent::*/descendant::f:reference/@value=concat('#', $contained/*/id/@value) or descendant::f:reference[@value='#'])]))","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"dom-4","severity":"error","human":"If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated","expression":"contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()","xpath":"not(exists(f:contained/*/f:meta/f:versionId)) and not(exists(f:contained/*/f:meta/f:lastUpdated))","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"dom-5","severity":"error","human":"If a resource is contained in another resource, it SHALL NOT have a security label","expression":"contained.meta.security.empty()","xpath":"not(exists(f:contained/*/f:meta/f:security))","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice","valueBoolean":true},{"url":"http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice-explanation","valueMarkdown":"When a resource has no narrative, only systems that fully understand the data can display the resource to a human safely. Including a human readable representation in the resource makes for a much more robust eco-system and cheaper handling of resources by intermediary systems. Some ecosystems restrict distribution of resources to only those systems that do fully understand the resources, and as a consequence implementers may believe that the narrative is superfluous. However experience shows that such eco-systems often open up to new participants over time."}],"key":"dom-6","severity":"warning","human":"A resource should have narrative for robust management","expression":"text.`div`.exists()","xpath":"exists(f:text/h:div)","source":"http://hl7.org/fhir/StructureDefinition/DomainResource"},{"key":"EOB-institutional-item-or-header-adjudication","severity":"error","human":"Institutional EOB: Should have adjudication at the item or header level, but not both","expression":"(adjudication.exists() != item.adjudication.exists())","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional"}]},{"id":"ExplanationOfBenefit.type","path":"ExplanationOfBenefit.type","patternCodeableConcept":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/claim-type","code":"institutional"}]}},{"id":"ExplanationOfBenefit.created","path":"ExplanationOfBenefit.created","mustSupport":true},{"id":"ExplanationOfBenefit.provider","path":"ExplanationOfBenefit.provider","type":[{"code":"Reference","targetProfile":["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization"]}]},{"id":"ExplanationOfBenefit.careTeam","path":"ExplanationOfBenefit.careTeam","constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"EOB-inst-careTeam-practitioner","severity":"error","human":"Institutional EOB: Careteam roles refer to a practitioner","expression":"(\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists() implies\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists().provider.all(resolve() is Practitioner)\n)","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional"},{"key":"EOB-inst-careTeam-organization","severity":"error","human":"Institutional EOB: Careteam roles refer to an organization","expression":"(\nrole.where(coding.where(code in ('performing' )).exists()).exists() implies\nrole.where(coding.where(code in ('performing' )).exists()).exists().provider.all(resolve() is Organization)\n)","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional"},{"key":"EOB-careteam-qualification","severity":"error","human":"Care Team Performing physician's qualifications are from US-Core-Provider-Specialty Value Set","expression":"(\nrole.where(coding.where(code in ('performing' )).exists()).exists() implies\nrole.where(coding.where(code in ('performing' )).exists()).exists().qualification.memberOf('http://hl7.org/fhir/us/core/ValueSet/us-core-provider-specialty')\n)","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional"}]},{"id":"ExplanationOfBenefit.careTeam.role","path":"ExplanationOfBenefit.careTeam.role","min":1,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimInstitutionalCareTeamRole"}},{"id":"ExplanationOfBenefit.careTeam.qualification","path":"ExplanationOfBenefit.careTeam.qualification","binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/core/ValueSet/us-core-provider-specialty"}},{"id":"ExplanationOfBenefit.supportingInfo","path":"ExplanationOfBenefit.supportingInfo","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on $this pattern","ordered":false,"rules":"open"}},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus","path":"ExplanationOfBenefit.supportingInfo","sliceName":"billingnetworkcontractingstatus","comment":"Indicates that the Billing Provider has a contract with the Plan (regardless of the network) as of the effective date of service or admission. (101)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"billingnetworkcontractingstatus"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.code","path":"ExplanationOfBenefit.supportingInfo.code","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerProviderContractingStatus"}},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate","path":"ExplanationOfBenefit.supportingInfo","sliceName":"clmrecvddate","comment":"The date the claim was received by the payer (88)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"clmrecvddate"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:clmrecvddate.timing[x]","path":"ExplanationOfBenefit.supportingInfo.timing[x]","min":1,"type":[{"code":"date"}],"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill","path":"ExplanationOfBenefit.supportingInfo","sliceName":"typeofbill","comment":"UB04 (Form Locator 4) type of bill code provides specific information for payer purposes. The first digit of the three-digit number denotes the type of institution, the second digit classifies the type of care being billed, and the third digit identifies the frequency of the bill for a specific course of treatment or inpatient confinement. (17)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"typeofbill"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:typeofbill.code","path":"ExplanationOfBenefit.supportingInfo.code","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCTypeOfBill"}},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin","path":"ExplanationOfBenefit.supportingInfo","sliceName":"pointoforigin","comment":"Identifies the place where the patient was identified as needing admission to an institution. This is a two position code mapped from the standard values for the UB-04 Source of Admission code (FL-15). (13)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"pointoforigin"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:pointoforigin.code","path":"ExplanationOfBenefit.supportingInfo.code","mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPointOfOriginForAdmissionOrVisit"}},{"id":"ExplanationOfBenefit.supportingInfo:admtype","path":"ExplanationOfBenefit.supportingInfo","sliceName":"admtype","comment":"Priority of the admission. Information located on (UB04 Form Locator 14). For example, an admission type of elective indicates that the patient's condition permitted time for medical services to be scheduled. (14)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:admtype.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"admtype"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:admtype.code","path":"ExplanationOfBenefit.supportingInfo.code","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPriorityTypeOfAdmissionOrVisit"}},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status","path":"ExplanationOfBenefit.supportingInfo","sliceName":"discharge-status","comment":"Patient’s status as of the discharge date for a facility stay. Information located on UB04. (Form Locator 17). (117)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.category","path":"ExplanationOfBenefit.supportingInfo.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType","code":"discharge-status"}]},"mustSupport":true},{"id":"ExplanationOfBenefit.supportingInfo:discharge-status.code","path":"ExplanationOfBenefit.supportingInfo.code","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPatientDischargeStatus"}},{"id":"ExplanationOfBenefit.diagnosis","path":"ExplanationOfBenefit.diagnosis","comment":"Diagnosis codes describe an individual's disease or medical condition. (6, 7, 8, 21, 22, 23, 30)","min":1},{"id":"ExplanationOfBenefit.diagnosis.sequence","path":"ExplanationOfBenefit.diagnosis.sequence","comment":"Diagnosis.sequence values do not necessarily indiate any order in which the diagnosis was reported or identified. client app implementations should not assign any significance to the sequence values. client app implementations should use the values of diagnosis.type to identify primary, secondary, etc."},{"id":"ExplanationOfBenefit.diagnosis.diagnosis[x]","path":"ExplanationOfBenefit.diagnosis.diagnosis[x]","type":[{"code":"CodeableConcept"}],"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/CDCICD910CMDiagnosisCodes"}},{"id":"ExplanationOfBenefit.diagnosis.type","path":"ExplanationOfBenefit.diagnosis.type","comment":"Indicates if the outpatient institutional diagnosis is principal, other, an external cause of injury or a patient reason for visit. (21, 22, 23)","min":1,"max":"1","mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimOutpatientInstitutionalDiagnosisType"}},{"id":"ExplanationOfBenefit.item","path":"ExplanationOfBenefit.item","comment":"Put the comment here for item"},{"id":"ExplanationOfBenefit.item.revenue","path":"ExplanationOfBenefit.item.revenue","comment":"Code used on the UB-04 (Form Locator 42) to identify a specific accommodation, ancillary service, or billing calculation related to the service being billed (86)","mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCRevenueCodes"}},{"id":"ExplanationOfBenefit.item.productOrService","path":"ExplanationOfBenefit.item.productOrService","comment":"Medical procedure a patient received from a health care provider. Current coding methods include: CPT-4 and HCFA Common Procedure Coding System Level II - (HCPCSII). (40)","mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSProcedureCodes"}},{"id":"ExplanationOfBenefit.item.modifier","path":"ExplanationOfBenefit.item.modifier","comment":"Modifier(s) for the procedure represented on this line. Identifies special circumstances related to the performance of the service. (41)","mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSModifiers"}},{"id":"ExplanationOfBenefit.item.serviced[x]","path":"ExplanationOfBenefit.item.serviced[x]","slicing":{"discriminator":[{"type":"type","path":"$this"}],"ordered":false,"rules":"open"},"type":[{"code":"date"}]},{"id":"ExplanationOfBenefit.item.servicedDate","path":"ExplanationOfBenefit.item.servicedDate","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.item.quantity","path":"ExplanationOfBenefit.item.quantity","comment":"The quantity of units, times, days, visits, services, or treatments for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (42)","mustSupport":true},{"id":"ExplanationOfBenefit.item.adjudication","path":"ExplanationOfBenefit.item.adjudication","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on value pattern","ordered":false,"rules":"closed"},"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"adjudication-has-amount-type-slice","severity":"error","human":"If Adjudication is present, it must have at least one adjudicationamounttype slice","expression":"(exists() implies where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional"}],"mustSupport":true},{"id":"ExplanationOfBenefit.item.adjudication.category","path":"ExplanationOfBenefit.item.adjudication.category","binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator"}},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype","path":"ExplanationOfBenefit.item.adjudication","sliceName":"adjudicationamounttype","comment":"Describes the various amount fields used when payers receive and adjudicate a claim. (187)","min":0,"max":"*","mustSupport":true},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.category","path":"ExplanationOfBenefit.item.adjudication.category","binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication"}},{"id":"ExplanationOfBenefit.item.adjudication:adjudicationamounttype.amount","path":"ExplanationOfBenefit.item.adjudication.amount","mustSupport":true},{"id":"ExplanationOfBenefit.item.adjudication:denialreason","path":"ExplanationOfBenefit.item.adjudication","sliceName":"denialreason","comment":"Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)","min":0,"max":"*","mustSupport":true},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.category","path":"ExplanationOfBenefit.item.adjudication.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator","code":"denialreason"}]}},{"id":"ExplanationOfBenefit.item.adjudication:denialreason.reason","path":"ExplanationOfBenefit.item.adjudication.reason","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes"}},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits","path":"ExplanationOfBenefit.item.adjudication","sliceName":"allowedunits","comment":"The quantity of units, times, days, visits, services, or treatments allowed for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (149)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.category","path":"ExplanationOfBenefit.item.adjudication.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator","code":"allowedunits"}]}},{"id":"ExplanationOfBenefit.item.adjudication:allowedunits.value","path":"ExplanationOfBenefit.item.adjudication.value","mustSupport":true},{"id":"ExplanationOfBenefit.adjudication","path":"ExplanationOfBenefit.adjudication","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on value pattern","ordered":false,"rules":"closed"},"type":[{"code":"BackboneElement"}],"constraint":[{"key":"ele-1","severity":"error","human":"All FHIR elements must have a @value or children","expression":"hasValue() or (children().count() > id.count())","xpath":"@value|f:*|h:div","source":"http://hl7.org/fhir/StructureDefinition/Element"},{"key":"adjudication-has-amount-type-slice","severity":"error","human":"If Adjudication is present, it must have at least one adjudicationamounttype slice","expression":"(exists() implies where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())","source":"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional"}],"mustSupport":true},{"id":"ExplanationOfBenefit.adjudication.category","path":"ExplanationOfBenefit.adjudication.category","mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator"}},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype","path":"ExplanationOfBenefit.adjudication","sliceName":"adjudicationamounttype","comment":"Describes the various amount fields used when payers receive and adjudicate a claim. (187)","min":0,"max":"*","mustSupport":true},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.category","path":"ExplanationOfBenefit.adjudication.category","binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication"}},{"id":"ExplanationOfBenefit.adjudication:adjudicationamounttype.amount","path":"ExplanationOfBenefit.adjudication.amount","min":1,"mustSupport":true},{"id":"ExplanationOfBenefit.adjudication:denialreason","path":"ExplanationOfBenefit.adjudication","sliceName":"denialreason","comment":"Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)","min":0,"max":"*","mustSupport":true},{"id":"ExplanationOfBenefit.adjudication:denialreason.category","path":"ExplanationOfBenefit.adjudication.category","patternCodeableConcept":{"coding":[{"system":"http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator","code":"denialreason"}]}},{"id":"ExplanationOfBenefit.adjudication:denialreason.reason","path":"ExplanationOfBenefit.adjudication.reason","comment":"Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)","min":1,"mustSupport":true,"binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes"}},{"id":"ExplanationOfBenefit.total","path":"ExplanationOfBenefit.total","slicing":{"discriminator":[{"type":"pattern","path":"category"}],"description":"Slice based on value pattern","ordered":false,"rules":"open"}},{"id":"ExplanationOfBenefit.total.category","path":"ExplanationOfBenefit.total.category","mustSupport":true,"binding":{"strength":"extensible","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBTotalCategoryDiscriminator"}},{"id":"ExplanationOfBenefit.total.amount","path":"ExplanationOfBenefit.total.amount","comment":"Total amount for each category (i.e., submitted, allowed, etc.) (148)"},{"id":"ExplanationOfBenefit.total:adjudicationamounttype","path":"ExplanationOfBenefit.total","sliceName":"adjudicationamounttype","comment":"Describes the various amount fields used when payers receive and adjudicate a claim. (187)","min":1,"max":"*","mustSupport":true},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.category","path":"ExplanationOfBenefit.total.category","binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication"}},{"id":"ExplanationOfBenefit.total:adjudicationamounttype.amount","path":"ExplanationOfBenefit.total.amount","mustSupport":true},{"id":"ExplanationOfBenefit.total:inoutnetwork","path":"ExplanationOfBenefit.total","sliceName":"inoutnetwork","comment":"Indicates the in network or out of network payment status of the claim. (142)","min":0,"max":"1","mustSupport":true},{"id":"ExplanationOfBenefit.total:inoutnetwork.category","path":"ExplanationOfBenefit.total.category","binding":{"strength":"required","valueSet":"http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerBenefitPaymentStatus"}},{"id":"ExplanationOfBenefit.payment.date","path":"ExplanationOfBenefit.payment.date","mustSupport":true},{"id":"ExplanationOfBenefit.processNote.text","path":"ExplanationOfBenefit.processNote.text","mustSupport":true}]}} \ No newline at end of file +{ + "resourceType": "StructureDefinition", + "id": "C4BB-ExplanationOfBenefit-Outpatient-Institutional", + "text": { + "status": "extensions", + "div": "
    \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
    NameFlagsCard.TypeDescription & Constraints\"doco\"
    \".\"\".\" ExplanationOfBenefit I0..*C4BBExplanationOfBenefitExplanation of Benefit resource
    EOB-institutional-item-or-header-adjudication: Institutional EOB: Should have adjudication at the item or header level, but not both
    \".\"\".\"\".\" type 1..1CodeableConceptCategory or discipline
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://terminology.hl7.org/CodeSystem/claim-type
    \".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: institutional
    \".\"\".\"\".\" created S1..1dateTimeResponse creation date
    \".\"\".\"\".\" provider 1..1Reference(C4BB Organization)Party responsible for the claim
    \".\"\".\"\".\" careTeam I0..*BackboneElementCare Team members
    EOB-inst-careTeam-practitioner: Institutional EOB: Careteam roles refer to a practitioner
    EOB-inst-careTeam-organization: Institutional EOB: Careteam roles refer to an organization
    EOB-careteam-qualification: Care Team Performing physician's qualifications are from US-Core-Provider-Specialty Value Set
    \".\"\".\"\".\"\".\" role 1..1CodeableConceptFunction within the team
    Binding: C4BB Claim Institutional Care Team Role (required)
    \".\"\".\"\".\"\".\" qualification 0..1CodeableConceptPractitioner credential or specialization
    Binding: US Core Provider Speciality (NUCC) (required)
    \".\"\".\"\".\" supportingInfo 0..*(Slice Definition)Supporting information
    Slice: Unordered, Open by pattern:category
    \".\"\".\"\".\"\".\" supportingInfo:billingnetworkcontractingstatus S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: billingnetworkcontractingstatus
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: C4BB Payer Provider Contracting Status (required)
    \".\"\".\"\".\"\".\" supportingInfo:clmrecvddate S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: clmrecvddate
    \".\"\".\"\".\"\".\"\".\" timing[x] S1..1dateWhen it occurred
    \".\"\".\"\".\"\".\" supportingInfo:typeofbill S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: typeofbill
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Type of Bill Codes (required)
    \".\"\".\"\".\"\".\" supportingInfo:pointoforigin S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: pointoforigin
    \".\"\".\"\".\"\".\"\".\" code S0..1CodeableConceptType of information
    Binding: NUBC Point Of Origin (required)
    \".\"\".\"\".\"\".\" supportingInfo:admtype S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: admtype
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Priority (Type) of Admission or Visit (required)
    \".\"\".\"\".\"\".\" supportingInfo:discharge-status S0..1BackboneElementSupporting information
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptClassification of the supplied information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: discharge-status
    \".\"\".\"\".\"\".\"\".\" code S1..1CodeableConceptType of information
    Binding: NUBC Patient Discharge Status Codes (required)
    \".\"\".\"\".\" diagnosis 1..*BackboneElementPertinent diagnosis information
    \".\"\".\"\".\"\".\" sequence 1..1positiveIntDiagnosis instance identifier
    \".\"\".\"\".\"\".\" diagnosis[x] S1..1CodeableConceptNature of illness or problem
    Binding: Diagnosis Codes - International Classification of Diseases, Clinical Modification (ICD-9-CM, ICD-10-CM) (required)
    \".\"\".\"\".\"\".\" type S1..1CodeableConceptTiming or nature of the diagnosis
    Binding: C4BB Claim Outpatient Institutional Diagnosis Type (required)
    \".\"\".\"\".\" item 0..*BackboneElementProduct or service provided
    \".\"\".\"\".\"\".\" revenue S0..1CodeableConceptRevenue or cost center code
    Binding: NUBC Revenue Codes (required)
    \".\"\".\"\".\"\".\" productOrService S1..1CodeableConceptBilling, service, product, or drug code
    Binding: Current Procedural Terminology (CPT) - Healthcare Common Procedure Coding System (HCPCS) level II alphanumeric codes - Procedure Codes (required)
    \".\"\".\"\".\"\".\" modifier S0..*CodeableConceptProduct or service billing modifiers
    Binding: Current Procedural Terminology (CPT) - Healthcare Common Procedure Coding System (HCPCS) level II alphanumeric codes - Procedure Modifier Codes (required)
    \".\"\".\"\".\"\".\" serviced[x] 0..1(Slice Definition)Date or dates of service or product delivery
    Slice: Unordered, Open by type:$this
    \".\"\".\"\".\"\".\" servicedDate S0..1dateDate or dates of service or product delivery
    \".\"\".\"\".\"\".\" quantity S0..1SimpleQuantityCount of products or services
    \".\"\".\"\".\"\".\" adjudication SI0..*(Slice Definition)Adjudication details
    Slice: Unordered, Closed by pattern:category
    adjudication-has-amount-type-slice: If Adjudication is present, it must have at least one adjudicationamounttype slice
    \".\"\".\"\".\"\".\"\".\" adjudication:All Slices Content/Rules for all slices
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication Category Discriminator (required)
    \".\"\".\"\".\"\".\"\".\" adjudication:adjudicationamounttype S0..*BackboneElementAdjudication details
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication (required)
    \".\"\".\"\".\"\".\"\".\"\".\" amount S0..1MoneyMonetary amount
    \".\"\".\"\".\"\".\"\".\" adjudication:denialreason S0..*BackboneElementAdjudication details
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: denialreason
    \".\"\".\"\".\"\".\"\".\"\".\" reason S1..1CodeableConceptExplanation of adjudication outcome
    Binding: X12 Claim Adjustment Reason Codes - Remittance Advice Remark Codes (required)
    \".\"\".\"\".\"\".\"\".\" adjudication:allowedunits S0..1BackboneElementAdjudication details
    \".\"\".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator
    \".\"\".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: allowedunits
    \".\"\".\"\".\"\".\"\".\"\".\" value S0..1decimalNon-monitary value
    \".\"\".\"\".\" adjudication SI0..*(Slice Definition)Header-level adjudication
    Slice: Unordered, Closed by pattern:category
    adjudication-has-amount-type-slice: If Adjudication is present, it must have at least one adjudicationamounttype slice
    \".\"\".\"\".\"\".\" adjudication:All Slices Content/Rules for all slices
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication Category Discriminator (required)
    \".\"\".\"\".\"\".\" adjudication:adjudicationamounttype S0..*BackboneElementHeader-level adjudication
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication (required)
    \".\"\".\"\".\"\".\"\".\" amount S1..1MoneyMonetary amount
    \".\"\".\"\".\"\".\" adjudication:denialreason S0..*BackboneElementHeader-level adjudication
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Required Pattern: At least the following
    \".\"\".\"\".\"\".\"\".\"\".\" coding1..*CodingCode defined by a terminology system
    Fixed Value: (complex)
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" system1..1uriIdentity of the terminology system
    Fixed Value: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator
    \".\"\".\"\".\"\".\"\".\"\".\"\".\" code1..1codeSymbol in syntax defined by the system
    Fixed Value: denialreason
    \".\"\".\"\".\"\".\"\".\" reason S1..1CodeableConceptExplanation of adjudication outcome
    Binding: X12 Claim Adjustment Reason Codes - Remittance Advice Remark Codes (required)
    \".\"\".\"\".\" total 1..*(Slice Definition)Adjudication totals
    Slice: Unordered, Open by pattern:category
    \".\"\".\"\".\"\".\" total:All Slices Content/Rules for all slices
    \".\"\".\"\".\"\".\"\".\" category S1..1CodeableConceptType of adjudication information
    Binding: C4BB Total Category Discriminator (extensible)
    \".\"\".\"\".\"\".\"\".\" amount 1..1MoneyFinancial total for the category
    \".\"\".\"\".\"\".\" total:adjudicationamounttype S1..*BackboneElementAdjudication totals
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Adjudication (required)
    \".\"\".\"\".\"\".\"\".\" amount S1..1MoneyFinancial total for the category
    \".\"\".\"\".\"\".\" total:inoutnetwork S0..1BackboneElementAdjudication totals
    \".\"\".\"\".\"\".\"\".\" category 1..1CodeableConceptType of adjudication information
    Binding: C4BB Payer Benefit Payment Status (required)
    \".\"\".\"\".\" payment
    \".\"\".\"\".\"\".\" date S0..1dateExpected date of payment
    \".\"\".\"\".\" processNote
    \".\"\".\"\".\"\".\" text S0..1stringNote explanatory text

    \"doco\" Documentation for this format
    " + }, + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-category", + "valueString": "Financial.General" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-security-category", + "valueCode": "patient" + } + ], + "url": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional", + "version": "1.0.0", + "name": "C4BBExplanationOfBenefitOutpatientInstitutional", + "title": "C4BB ExplanationOfBenefit Outpatient Institutional", + "status": "active", + "date": "2020-11-23T16:49:10+00:00", + "publisher": "HL7 Financial Management Working Group", + "contact": [ + { + "name": "HL7 Financial Management Working Group", + "telecom": [ + { + "system": "url", + "value": "http://www.hl7.org/Special/committees/fm/index.cfm" + }, + { + "system": "email", + "value": "fm@lists.HL7.org" + } + ] + } + ], + "description": "This profile is used for Explanation of Benefits (EOBs) based on claims submitted by clinics, hospitals, skilled nursing facilities and other institutions for outpatient services, which may include including the use of equipment and supplies, laboratory services, radiology services and other charges. Outpatient claims are submitted for services rendered at an institution that are not part of an overnight stay. \nThe claims data is based on the institutional claim form UB-04, submission standards adopted by the Department of Health and Human Services.", + "jurisdiction": [ + { + "coding": [ + { + "system": "urn:iso:std:iso:3166", + "code": "US" + } + ] + } + ], + "fhirVersion": "4.0.1", + "mapping": [ + { + "identity": "workflow", + "uri": "http://hl7.org/fhir/workflow", + "name": "Workflow Pattern" + }, + { + "identity": "w5", + "uri": "http://hl7.org/fhir/fivews", + "name": "FiveWs Pattern Mapping" + }, + { + "identity": "v2", + "uri": "http://hl7.org/v2", + "name": "HL7 v2 Mapping" + }, + { + "identity": "rim", + "uri": "http://hl7.org/v3", + "name": "RIM Mapping" + } + ], + "kind": "resource", + "abstract": false, + "type": "ExplanationOfBenefit", + "baseDefinition": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit", + "derivation": "constraint", + "snapshot": { + "element": [ + { + "id": "ExplanationOfBenefit", + "path": "ExplanationOfBenefit", + "short": "Explanation of Benefit resource", + "definition": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", + "alias": [ + "EOB" + ], + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit", + "min": 0, + "max": "*" + }, + "constraint": [ + { + "key": "dom-2", + "severity": "error", + "human": "If the resource is contained in another resource, it SHALL NOT contain nested Resources", + "expression": "contained.contained.empty()", + "xpath": "not(parent::f:contained and f:contained)", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "dom-3", + "severity": "error", + "human": "If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource", + "expression": "contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()", + "xpath": "not(exists(for $id in f:contained/*/f:id/@value return $contained[not(parent::*/descendant::f:reference/@value=concat('#', $contained/*/id/@value) or descendant::f:reference[@value='#'])]))", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "dom-4", + "severity": "error", + "human": "If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated", + "expression": "contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()", + "xpath": "not(exists(f:contained/*/f:meta/f:versionId)) and not(exists(f:contained/*/f:meta/f:lastUpdated))", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "dom-5", + "severity": "error", + "human": "If a resource is contained in another resource, it SHALL NOT have a security label", + "expression": "contained.meta.security.empty()", + "xpath": "not(exists(f:contained/*/f:meta/f:security))", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice", + "valueBoolean": true + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice-explanation", + "valueMarkdown": "When a resource has no narrative, only systems that fully understand the data can display the resource to a human safely. Including a human readable representation in the resource makes for a much more robust eco-system and cheaper handling of resources by intermediary systems. Some ecosystems restrict distribution of resources to only those systems that do fully understand the resources, and as a consequence implementers may believe that the narrative is superfluous. However experience shows that such eco-systems often open up to new participants over time." + } + ], + "key": "dom-6", + "severity": "warning", + "human": "A resource should have narrative for robust management", + "expression": "text.`div`.exists()", + "xpath": "exists(f:text/h:div)", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "EOB-institutional-item-or-header-adjudication", + "severity": "error", + "human": "Institutional EOB: Should have adjudication at the item or header level, but not both", + "expression": "(adjudication.exists() != item.adjudication.exists())", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional" + }, + { + "key": "adjudication-has-amount-type-slice", + "severity": "error", + "human": "If Adjudication is present, it must have at least one adjudicationamounttype slice", + "expression": "adjudication.exists() implies (adjudication.where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "Entity. Role, or Act" + }, + { + "identity": "workflow", + "map": "Event" + } + ] + }, + { + "id": "ExplanationOfBenefit.id", + "path": "ExplanationOfBenefit.id", + "short": "Logical id of this artifact", + "definition": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", + "comment": "The only time that a resource does not have an id is when it is being submitted to the server using a create operation.", + "min": 0, + "max": "1", + "base": { + "path": "Resource.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.meta", + "path": "ExplanationOfBenefit.meta", + "short": "Metadata about the resource", + "definition": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", + "min": 1, + "max": "1", + "base": { + "path": "Resource.meta", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Meta" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.meta.id", + "path": "ExplanationOfBenefit.meta.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.meta.extension", + "path": "ExplanationOfBenefit.meta.extension", + "slicing": { + "discriminator": [ + { + "type": "value", + "path": "url" + } + ], + "description": "Extensions are always sliced by (at least) url", + "rules": "open" + }, + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.meta.versionId", + "path": "ExplanationOfBenefit.meta.versionId", + "short": "Version specific identifier", + "definition": "The version specific identifier, as it appears in the version portion of the URL. This value changes when the resource is created, updated, or deleted.", + "comment": "The server assigns this value, and ignores what the client specifies, except in the case that the server is imposing version integrity on updates/deletes.", + "min": 0, + "max": "1", + "base": { + "path": "Meta.versionId", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "id" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.meta.lastUpdated", + "path": "ExplanationOfBenefit.meta.lastUpdated", + "short": "When the resource version last changed", + "definition": "When the resource last changed - e.g. when the version changed.", + "comment": "Defines the date the Resource was created or updated, whichever comes last (163). Payers SHALL provide the last time the data was updated or the date of creation in the payer’s system of record, whichever comes last", + "min": 1, + "max": "1", + "base": { + "path": "Meta.lastUpdated", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "instant" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.meta.source", + "path": "ExplanationOfBenefit.meta.source", + "short": "Identifies where the resource comes from", + "definition": "A uri that identifies the source system of the resource. This provides a minimal amount of [Provenance](http://hl7.org/fhir/R4/provenance.html#) information that can be used to track or differentiate the source of information in the resource. The source may identify another FHIR server, document, message, database, etc.", + "comment": "In the provenance resource, this corresponds to Provenance.entity.what[x]. The exact use of the source (and the implied Provenance.entity.role) is left to implementer discretion. Only one nominated source is allowed; for additional provenance details, a full Provenance resource should be used. \n\nThis element can be used to indicate where the current master source of a resource that has a canonical URL if the resource is no longer hosted at the canonical URL.", + "min": 0, + "max": "1", + "base": { + "path": "Meta.source", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "uri" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.meta.profile", + "path": "ExplanationOfBenefit.meta.profile", + "short": "Profiles this resource claims to conform to", + "definition": "A list of profiles (references to [StructureDefinition](http://hl7.org/fhir/R4/structuredefinition.html#) resources) that this resource claims to conform to. The URL is a reference to [StructureDefinition.url](http://hl7.org/fhir/R4/structuredefinition-definitions.html#StructureDefinition.url).", + "comment": "CPCDS data element (190)", + "min": 1, + "max": "*", + "base": { + "path": "Meta.profile", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "canonical", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/StructureDefinition" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.meta.security", + "path": "ExplanationOfBenefit.meta.security", + "short": "Security Labels applied to this resource", + "definition": "Security labels applied to this resource. These tags connect specific resources to the overall security policy and infrastructure.", + "comment": "The security labels can be updated without changing the stated version of the resource. The list of security labels is a set. Uniqueness is based the system/code, and version and display are ignored.", + "min": 0, + "max": "*", + "base": { + "path": "Meta.security", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "SecurityLabels" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "extensible", + "description": "Security Labels from the Healthcare Privacy and Security Classification System.", + "valueSet": "http://hl7.org/fhir/ValueSet/security-labels" + } + }, + { + "id": "ExplanationOfBenefit.meta.tag", + "path": "ExplanationOfBenefit.meta.tag", + "short": "Tags applied to this resource", + "definition": "Tags applied to this resource. Tags are intended to be used to identify and relate resources to process and workflow, and applications are not required to consider the tags when interpreting the meaning of a resource.", + "comment": "The tags can be updated without changing the stated version of the resource. The list of tags is a set. Uniqueness is based the system/code, and version and display are ignored.", + "min": 0, + "max": "*", + "base": { + "path": "Meta.tag", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Tags" + } + ], + "strength": "example", + "description": "Codes that represent various types of tags, commonly workflow-related; e.g. \"Needs review by Dr. Jones\".", + "valueSet": "http://hl7.org/fhir/ValueSet/common-tags" + } + }, + { + "id": "ExplanationOfBenefit.implicitRules", + "path": "ExplanationOfBenefit.implicitRules", + "short": "A set of rules under which this content was created", + "definition": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", + "comment": "Asserting this rule set restricts the content to be only understood by a limited set of trading partners. This inherently limits the usefulness of the data in the long term. However, the existing health eco-system is highly fractured, and not yet ready to define, collect, and exchange data in a generally computable sense. Wherever possible, implementers and/or specification writers should avoid using this element. Often, when used, the URL is a reference to an implementation guide that defines these special rules as part of it's narrative along with other profiles, value sets, etc.", + "min": 0, + "max": "1", + "base": { + "path": "Resource.implicitRules", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "uri" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": true, + "isModifierReason": "This element is labeled as a modifier because the implicit rules may provide additional knowledge about the resource that modifies it's meaning or interpretation", + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.language", + "path": "ExplanationOfBenefit.language", + "short": "Language of the resource content", + "definition": "The base language in which the resource is written.", + "comment": "Language is provided to support indexing and accessibility (typically, services such as text to speech use the language tag). The html language tag in the narrative applies to the narrative. The language tag on the resource may be used to specify the language of other presentations generated from the data in the resource. Not all the content has to be in the base language. The Resource.language should not be assumed to apply to the narrative automatically. If a language is specified, it should it also be specified on the div element in the html (see rules in HTML5 for information about the relationship between xml:lang and the html lang attribute).", + "min": 0, + "max": "1", + "base": { + "path": "Resource.language", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "code" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-maxValueSet", + "valueCanonical": "http://hl7.org/fhir/ValueSet/all-languages" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Language" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "preferred", + "description": "A human language.", + "valueSet": "http://hl7.org/fhir/ValueSet/languages" + } + }, + { + "id": "ExplanationOfBenefit.text", + "path": "ExplanationOfBenefit.text", + "short": "Text summary of the resource, for human interpretation", + "definition": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", + "comment": "Contained resources do not have narrative. Resources that are not contained SHOULD have a narrative. In some cases, a resource may only have text with little or no additional discrete data (as long as all minOccurs=1 elements are satisfied). This may be necessary for data from legacy systems where information is captured as a \"text blob\" or where text is additionally entered raw or narrated and encoded information is added later.", + "alias": [ + "narrative", + "html", + "xhtml", + "display" + ], + "min": 0, + "max": "1", + "base": { + "path": "DomainResource.text", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Narrative" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "Act.text?" + } + ] + }, + { + "id": "ExplanationOfBenefit.contained", + "path": "ExplanationOfBenefit.contained", + "short": "Contained, inline Resources", + "definition": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", + "comment": "This should never be done when the content can be identified properly, as once identification is lost, it is extremely difficult (and context dependent) to restore it again. Contained resources may have profiles and tags In their meta elements, but SHALL NOT have security labels.", + "alias": [ + "inline resources", + "anonymous resources", + "contained resources" + ], + "min": 0, + "max": "*", + "base": { + "path": "DomainResource.contained", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Resource" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.extension", + "path": "ExplanationOfBenefit.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "DomainResource.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.modifierExtension", + "path": "ExplanationOfBenefit.modifierExtension", + "short": "Extensions that cannot be ignored", + "definition": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "DomainResource.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the resource that contains them", + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier", + "path": "ExplanationOfBenefit.identifier", + "short": "Business Identifier for the resource", + "definition": "A unique identifier assigned to this explanation of benefit.", + "comment": "Identifier assigned by a payer for a claim received from a provider or subscriber. It is not the same identifier as that assigned by a provider. (35)", + "requirements": "Allows EOBs to be distinguished and referenced.", + "min": 1, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.identifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Identifier" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "workflow", + "map": "Event.identifier" + }, + { + "identity": "w5", + "map": "FiveWs.identifier" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.id", + "path": "ExplanationOfBenefit.identifier.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.extension", + "path": "ExplanationOfBenefit.identifier.extension", + "slicing": { + "discriminator": [ + { + "type": "value", + "path": "url" + } + ], + "description": "Extensions are always sliced by (at least) url", + "rules": "open" + }, + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.use", + "path": "ExplanationOfBenefit.identifier.use", + "short": "usual | official | temp | secondary | old (If known)", + "definition": "The purpose of this identifier.", + "comment": "Applications can assume that an identifier is permanent unless it explicitly says that it is temporary.", + "requirements": "Allows the appropriate identifier for a particular context of use to be selected from among a set of identifiers.", + "min": 0, + "max": "1", + "base": { + "path": "Identifier.use", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "code" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": true, + "isModifierReason": "This is labeled as \"Is Modifier\" because applications should not mistake a temporary id for a permanent one.", + "isSummary": true, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "IdentifierUse" + } + ], + "strength": "required", + "description": "Identifies the purpose for this identifier, if known .", + "valueSet": "http://hl7.org/fhir/ValueSet/identifier-use|4.0.1" + }, + "mapping": [ + { + "identity": "v2", + "map": "N/A" + }, + { + "identity": "rim", + "map": "Role.code or implied by context" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.type", + "path": "ExplanationOfBenefit.identifier.type", + "short": "Description of identifier", + "definition": "A coded type for the identifier that can be used to determine which identifier to use for a specific purpose.", + "comment": "Indicates that the claim identifier is that assigned by a payer for a claim received from a provider or subscriber. (183)", + "requirements": "Allows users to make use of identifiers when the identifier system is not known.", + "min": 1, + "max": "1", + "base": { + "path": "Identifier.type", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimIdentifierType" + }, + "mapping": [ + { + "identity": "v2", + "map": "CX.5" + }, + { + "identity": "rim", + "map": "Role.code or implied by context" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.system", + "path": "ExplanationOfBenefit.identifier.system", + "short": "The namespace for the identifier value", + "definition": "Establishes the namespace for the value - that is, a URL that describes a set values that are unique.", + "comment": "Identifier.system is always case sensitive.", + "requirements": "There are many sets of identifiers. To perform matching of two identifiers, we need to know what set we're dealing with. The system identifies a particular set of unique identifiers.", + "min": 0, + "max": "1", + "base": { + "path": "Identifier.system", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "uri" + } + ], + "example": [ + { + "label": "General", + "valueUri": "http://www.acme.com/identifiers/patient" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "CX.4 / EI-2-4" + }, + { + "identity": "rim", + "map": "II.root or Role.id.root" + }, + { + "identity": "servd", + "map": "./IdentifierType" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.value", + "path": "ExplanationOfBenefit.identifier.value", + "short": "The value that is unique", + "definition": "The portion of the identifier typically relevant to the user and which is unique within the context of the system.", + "comment": "If the value is a full URI, then the system SHALL be urn:ietf:rfc:3986. The value's primary purpose is computational mapping. As a result, it may be normalized for comparison purposes (e.g. removing non-significant whitespace, dashes, etc.) A value formatted for human display can be conveyed using the [Rendered Value extension](http://hl7.org/fhir/R4/extension-rendered-value.html). Identifier.value is to be treated as case sensitive unless knowledge of the Identifier.system allows the processer to be confident that non-case-sensitive processing is safe.", + "min": 0, + "max": "1", + "base": { + "path": "Identifier.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "string" + } + ], + "example": [ + { + "label": "General", + "valueString": "123456" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "CX.1 / EI.1" + }, + { + "identity": "rim", + "map": "II.extension or II.root if system indicates OID or GUID (Or Role.id.extension or root)" + }, + { + "identity": "servd", + "map": "./Value" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.period", + "path": "ExplanationOfBenefit.identifier.period", + "short": "Time period when id is/was valid for use", + "definition": "Time period during which identifier is/was valid for use.", + "min": 0, + "max": "1", + "base": { + "path": "Identifier.period", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "CX.7 + CX.8" + }, + { + "identity": "rim", + "map": "Role.effectiveTime or implied by context" + }, + { + "identity": "servd", + "map": "./StartDate and ./EndDate" + } + ] + }, + { + "id": "ExplanationOfBenefit.identifier.assigner", + "path": "ExplanationOfBenefit.identifier.assigner", + "short": "Organization that issued id (may be just text)", + "definition": "Organization that issued/manages the identifier.", + "comment": "The Identifier.assigner may omit the .reference element and only contain a .display element reflecting the name or other textual information about the assigning organization.", + "min": 0, + "max": "1", + "base": { + "path": "Identifier.assigner", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Organization" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "CX.4 / (CX.4,CX.9,CX.10)" + }, + { + "identity": "rim", + "map": "II.assigningAuthorityName but note that this is an improper use by the definition of the field. Also Role.scoper" + }, + { + "identity": "servd", + "map": "./IdentifierIssuingAuthority" + } + ] + }, + { + "id": "ExplanationOfBenefit.status", + "path": "ExplanationOfBenefit.status", + "short": "active | cancelled | draft | entered-in-error", + "definition": "The status of the resource instance.", + "comment": "Claim processing status code (140). Expected values are active or cancelled. To comply with the CMS rule, draft EOBs are not required", + "requirements": "Need to track the status of the resource as 'draft' resources may undergo further edits while 'active' resources are immutable and may only have their status changed to 'cancelled'.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.status", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "code" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": true, + "isModifierReason": "This element is labeled as a modifier because it is a status element that contains status entered-in-error which means that the resource should not be treated as valid", + "isSummary": true, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ExplanationOfBenefitStatus" + } + ], + "strength": "required", + "description": "A code specifying the state of the resource instance.", + "valueSet": "http://hl7.org/fhir/ValueSet/explanationofbenefit-status|4.0.1" + }, + "mapping": [ + { + "identity": "workflow", + "map": "Event.status" + }, + { + "identity": "w5", + "map": "FiveWs.status" + } + ] + }, + { + "id": "ExplanationOfBenefit.type", + "path": "ExplanationOfBenefit.type", + "short": "Category or discipline", + "definition": "The category of claim, e.g. oral, pharmacy, vision, institutional, professional.", + "comment": "Specifies the type of claim. (e.g., inpatient insitutional, outpatient institutional, physician, etc.) (16). Defines the Claims profiles. Values from Claim Type Codes are required; a data absent reason is not allowed", + "requirements": "Claim type determine the general sets of business rules applied for information requirements and adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.type", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/claim-type", + "code": "institutional" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-type" + }, + "mapping": [ + { + "identity": "workflow", + "map": "Event.code" + }, + { + "identity": "w5", + "map": "FiveWs.class" + } + ] + }, + { + "id": "ExplanationOfBenefit.subType", + "path": "ExplanationOfBenefit.subType", + "short": "More granular claim type", + "definition": "A finer grained suite of claim type codes which may convey additional information such as Inpatient vs Outpatient and/or a specialty service.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Some jurisdictions need a finer grained claim type for routing and adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.subType", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ClaimSubType" + } + ], + "strength": "example", + "description": "A more granular claim typecode.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-subtype" + }, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.class" + } + ] + }, + { + "id": "ExplanationOfBenefit.use", + "path": "ExplanationOfBenefit.use", + "short": "claim | preauthorization | predetermination", + "definition": "A code to indicate whether the nature of the request is: to request adjudication of products and services previously rendered; or requesting authorization and adjudication for provision in the future; or requesting the non-binding adjudication of the listed products and services which could be provided in the future.", + "comment": "Expected value is claim. The CMS rule applies to adjudicated claims; it does not require preauthorizations or predeterminations", + "requirements": "This element is required to understand the nature of the request for adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.use", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "code" + } + ], + "patternCode": "claim", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Use" + } + ], + "strength": "required", + "description": "Complete, proposed, exploratory, other.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-use|4.0.1" + }, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.class" + } + ] + }, + { + "id": "ExplanationOfBenefit.patient", + "path": "ExplanationOfBenefit.patient", + "short": "The recipient of the products and services", + "definition": "The party to whom the professional services and/or products have been supplied or are being considered and for whom actual for forecast reimbursement is sought.", + "comment": "Identifier for a member assigned by the Payer. If members receive ID cards, that is the identifier that should be provided. (1). The patient must be supplied to the insurer so that confirmation of coverage and service history may be considered as part of the authorization and/or adjudiction. Additional required path:EOB.insurance.coverage(Coverage).beneficiary(Patient).identifier", + "requirements": "The patient must be supplied to the insurer so that confirmation of coverage and service history may be considered as part of the authorization and/or adjudiction.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.patient", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Patient" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "workflow", + "map": "Event.subject" + }, + { + "identity": "w5", + "map": "FiveWs.subject[x]" + }, + { + "identity": "w5", + "map": "FiveWs.subject" + } + ] + }, + { + "id": "ExplanationOfBenefit.billablePeriod", + "path": "ExplanationOfBenefit.billablePeriod", + "short": "Relevant time frame for the claim", + "definition": "The period for which charges are being submitted.", + "comment": "Typically this would be today or in the past for a claim, and today or in the future for preauthorizations and prodeterminations. Typically line item dates of service should fall within the billing period if one is specified.", + "requirements": "A number jurisdictions required the submission of the billing period when submitting claims for example for hospital stays or long-term care.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.billablePeriod", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.done[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.billablePeriod.id", + "path": "ExplanationOfBenefit.billablePeriod.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.billablePeriod.extension", + "path": "ExplanationOfBenefit.billablePeriod.extension", + "slicing": { + "discriminator": [ + { + "type": "value", + "path": "url" + } + ], + "description": "Extensions are always sliced by (at least) url", + "rules": "open" + }, + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.billablePeriod.start", + "path": "ExplanationOfBenefit.billablePeriod.start", + "short": "Starting time with inclusive boundary", + "definition": "The start of the period. The boundary is inclusive.", + "comment": "The first day on the billing statement covering services rendered to the beneficiary (i.e. 'Statement Covers From Date’). (177)", + "min": 0, + "max": "1", + "base": { + "path": "Period.start", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "dateTime" + } + ], + "condition": [ + "per-1" + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "DR.1" + }, + { + "identity": "rim", + "map": "./low" + } + ] + }, + { + "id": "ExplanationOfBenefit.billablePeriod.end", + "path": "ExplanationOfBenefit.billablePeriod.end", + "short": "End time with inclusive boundary, if not ongoing", + "definition": "The end of the period. If the end of the period is missing, it means no end was known or planned at the time the instance was created. The start may be in the past, and the end date in the future, which means that period is expected/planned to end at that time.", + "comment": "The last day on the billing statement covering services rendered to the beneficiary (i.e. 'Statement Covers Thru Date’). (178)", + "min": 0, + "max": "1", + "base": { + "path": "Period.end", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "dateTime" + } + ], + "meaningWhenMissing": "If the end of the period is missing, it means that the period is ongoing", + "condition": [ + "per-1" + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "DR.2" + }, + { + "identity": "rim", + "map": "./high" + } + ] + }, + { + "id": "ExplanationOfBenefit.created", + "path": "ExplanationOfBenefit.created", + "short": "Response creation date", + "definition": "The date this resource was created.", + "comment": "Date the claim was adjudicated (179)", + "requirements": "Need to record a timestamp for use by both the recipient and the issuer.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.created", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "dateTime" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "workflow", + "map": "Event.occurrence[x]" + }, + { + "identity": "w5", + "map": "FiveWs.recorded" + } + ] + }, + { + "id": "ExplanationOfBenefit.enterer", + "path": "ExplanationOfBenefit.enterer", + "short": "Author of the claim", + "definition": "Individual who created the claim, predetermination or preauthorization.", + "requirements": "Some jurisdictions require the contact information for personnel completing claims.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.enterer", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Practitioner", + "http://hl7.org/fhir/StructureDefinition/PractitionerRole" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "workflow", + "map": "Event.performer.agent" + }, + { + "identity": "w5", + "map": "FiveWs.author" + } + ] + }, + { + "id": "ExplanationOfBenefit.insurer", + "path": "ExplanationOfBenefit.insurer", + "short": "Party responsible for reimbursement", + "definition": "The party responsible for authorization, adjudication and reimbursement.", + "comment": "Code of the payer responsible for the claim (2, 5). Same as insurance.coverage.organization. Party responsible for reimbursing the provider", + "requirements": "To be a valid claim, preauthorization or predetermination there must be a party who is responsible for adjudicating the contents against a policy which provides benefits for the patient.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.insurer", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "workflow", + "map": "Event.performer.agent" + }, + { + "identity": "w5", + "map": "FiveWs.author" + } + ] + }, + { + "id": "ExplanationOfBenefit.provider", + "path": "ExplanationOfBenefit.provider", + "short": "Party responsible for the claim", + "definition": "The provider which is responsible for the claim, predetermination or preauthorization.", + "comment": "The identifier assigned to the Billing Provider. (94)", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.provider", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.source" + } + ] + }, + { + "id": "ExplanationOfBenefit.priority", + "path": "ExplanationOfBenefit.priority", + "short": "Desired processing urgency", + "definition": "The provider-required urgency of processing the request. Typical values include: stat, routine deferred.", + "comment": "If a claim processor is unable to complete the processing as per the priority then they should generate and error and not process the request.", + "requirements": "The provider may need to indicate their processing requirements so that the processor can indicate if they are unable to comply.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.priority", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/ValueSet/process-priority" + }, + "mapping": [ + { + "identity": "v2", + "map": "Request.priority" + } + ] + }, + { + "id": "ExplanationOfBenefit.fundsReserveRequested", + "path": "ExplanationOfBenefit.fundsReserveRequested", + "short": "For whom to reserve funds", + "definition": "A code to indicate whether and for whom funds are to be reserved for future claims.", + "comment": "This field is only used for preauthorizations.", + "requirements": "In the case of a Pre-Determination/Pre-Authorization the provider may request that funds in the amount of the expected Benefit be reserved ('Patient' or 'Provider') to pay for the Benefits determined on the subsequent claim(s). 'None' explicitly indicates no funds reserving is requested.", + "alias": [ + "Fund pre-allocation" + ], + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.fundsReserveRequested", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "FundsReserve" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "example", + "description": "For whom funds are to be reserved: (Patient, Provider, None).", + "valueSet": "http://hl7.org/fhir/ValueSet/fundsreserve" + } + }, + { + "id": "ExplanationOfBenefit.fundsReserve", + "path": "ExplanationOfBenefit.fundsReserve", + "short": "Funds reserved status", + "definition": "A code, used only on a response to a preauthorization, to indicate whether the benefits payable have been reserved and for whom.", + "comment": "Fund would be release by a future claim quoting the preAuthRef of this response. Examples of values include: provider, patient, none.", + "requirements": "Needed to advise the submitting provider on whether the rquest for reservation of funds has been honored.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.fundsReserve", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "FundsReserve" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "example", + "description": "For whom funds are to be reserved: (Patient, Provider, None).", + "valueSet": "http://hl7.org/fhir/ValueSet/fundsreserve" + } + }, + { + "id": "ExplanationOfBenefit.related", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "RelatedClaim" + } + ], + "path": "ExplanationOfBenefit.related", + "short": "Prior or corollary claims", + "definition": "Other claims which are related to this claim such as prior submissions or claims for related services or for the same event.", + "comment": "If the current claim represents a claim that has been adjusted and was given a prior claim number, this field represents the prior claim number. If the current claim has been adjusted; i.e., replaced by or merged to another claim number, this data element represents that new number.(111, 112)", + "requirements": "For workplace or other accidents it is common to relate separate claims arising from the same event.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.related", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.related.id", + "path": "ExplanationOfBenefit.related.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.related.extension", + "path": "ExplanationOfBenefit.related.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.related.modifierExtension", + "path": "ExplanationOfBenefit.related.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.related.claim", + "path": "ExplanationOfBenefit.related.claim", + "short": "Reference to the related claim", + "definition": "Reference to a related claim.", + "requirements": "For workplace or other accidents it is common to relate separate claims arising from the same event.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.related.claim", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Claim" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.related.relationship", + "path": "ExplanationOfBenefit.related.relationship", + "short": "How the reference claim is related", + "definition": "A code to convey how the claims are related.", + "comment": "For example, prior claim or umbrella.", + "requirements": "Some insurers need a declaration of the type of relationship.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.related.relationship", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBRelatedClaimRelationshipCodes" + } + }, + { + "id": "ExplanationOfBenefit.related.reference", + "path": "ExplanationOfBenefit.related.reference", + "short": "File or case reference", + "definition": "An alternate organizational reference to the case or file to which this particular claim pertains.", + "comment": "For example, Property/Casualty insurer claim number or Workers Compensation case number.", + "requirements": "In cases where an event-triggered claim is being submitted to an insurer which requires a reference number to be specified on all exchanges.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.related.reference", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Identifier" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.prescription", + "path": "ExplanationOfBenefit.prescription", + "short": "Prescription authorizing services or products", + "definition": "Prescription to support the dispensing of pharmacy, device or vision products.", + "requirements": "Required to authorize the dispensing of controlled substances and devices.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.prescription", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/MedicationRequest", + "http://hl7.org/fhir/StructureDefinition/VisionPrescription" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.originalPrescription", + "path": "ExplanationOfBenefit.originalPrescription", + "short": "Original prescription if superceded by fulfiller", + "definition": "Original prescription which has been superseded by this prescription to support the dispensing of pharmacy services, medications or products.", + "comment": "For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new prescription for an alternate medication which has the same therapeutic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.", + "requirements": "Often required when a fulfiller varies what is fulfilled from that authorized on the original prescription.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.originalPrescription", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/MedicationRequest" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.payee", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Payee" + } + ], + "path": "ExplanationOfBenefit.payee", + "short": "Recipient of benefits payable", + "definition": "The party to be reimbursed for cost of the products and services according to the terms of the policy.", + "comment": "Often providers agree to receive the benefits payable to reduce the near-term costs to the patient. The insurer may decline to pay the provider and may choose to pay the subscriber instead.", + "requirements": "The provider needs to specify who they wish to be reimbursed and the claims processor needs express who they will reimburse.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payee", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.payee.id", + "path": "ExplanationOfBenefit.payee.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.payee.extension", + "path": "ExplanationOfBenefit.payee.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.payee.modifierExtension", + "path": "ExplanationOfBenefit.payee.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.payee.type", + "path": "ExplanationOfBenefit.payee.type", + "short": "Category of recipient", + "definition": "Type of Party to be reimbursed: Subscriber, provider, other.", + "comment": "Identifies the type of recipient of the adjudication amount; i.e., provider, subscriber, beneficiary or another recipient. (120)", + "requirements": "Need to know who should receive payment with the most common situations being the Provider (assignment of benefits) or the Subscriber.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payee.type", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayeeType" + } + }, + { + "id": "ExplanationOfBenefit.payee.party", + "path": "ExplanationOfBenefit.payee.party", + "short": "Recipient reference", + "definition": "Reference to the individual or organization to whom any payment will be made.", + "comment": "Recipient reference (121)", + "requirements": "Need to provide demographics if the payee is not 'subscriber' nor 'provider'.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payee.party", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization", + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Patient", + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Practitioner" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.referral", + "path": "ExplanationOfBenefit.referral", + "short": "Treatment Referral", + "definition": "A reference to a referral resource.", + "comment": "The referral resource which lists the date, practitioner, reason and other supporting information.", + "requirements": "Some insurers require proof of referral to pay for services or to pay specialist rates for services.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.referral", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/ServiceRequest" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.cause" + } + ] + }, + { + "id": "ExplanationOfBenefit.facility", + "path": "ExplanationOfBenefit.facility", + "short": "Servicing Facility", + "definition": "Facility where the services were provided.", + "requirements": "Insurance adjudication can be dependant on where services were delivered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.facility", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Location" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "workflow", + "map": "Event.performer.location" + }, + { + "identity": "w5", + "map": "FiveWs.where[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.claim", + "path": "ExplanationOfBenefit.claim", + "short": "Claim reference", + "definition": "The business identifier for the instance of the adjudication request: claim predetermination or preauthorization.", + "requirements": "To provide a link to the original adjudication request.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.claim", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Claim" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.why[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.claimResponse", + "path": "ExplanationOfBenefit.claimResponse", + "short": "Claim response reference", + "definition": "The business identifier for the instance of the adjudication response: claim, predetermination or preauthorization response.", + "requirements": "To provide a link to the original adjudication response.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.claimResponse", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/ClaimResponse" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.outcome", + "path": "ExplanationOfBenefit.outcome", + "short": "queued | complete | error | partial", + "definition": "The outcome of the claim, predetermination, or preauthorization processing.", + "comment": "Expected value is complete", + "requirements": "To advise the requestor of an overall processing outcome.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.outcome", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "code" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "RemittanceOutcome" + } + ], + "strength": "required", + "description": "The result of the claim processing.", + "valueSet": "http://hl7.org/fhir/ValueSet/remittance-outcome|4.0.1" + } + }, + { + "id": "ExplanationOfBenefit.disposition", + "path": "ExplanationOfBenefit.disposition", + "short": "Disposition Message", + "definition": "A human readable description of the status of the adjudication.", + "requirements": "Provided for user display.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.disposition", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "string" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.preAuthRef", + "path": "ExplanationOfBenefit.preAuthRef", + "short": "Preauthorization reference", + "definition": "Reference from the Insurer which is used in later communications which refers to this adjudication.", + "comment": "This value is only present on preauthorization adjudications.", + "requirements": "On subsequent claims, the insurer may require the provider to quote this value.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.preAuthRef", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "string" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.preAuthRefPeriod", + "path": "ExplanationOfBenefit.preAuthRefPeriod", + "short": "Preauthorization in-effect period", + "definition": "The timeframe during which the supplied preauthorization reference may be quoted on claims to obtain the adjudication as provided.", + "comment": "This value is only present on preauthorization adjudications.", + "requirements": "On subsequent claims, the insurer may require the provider to quote this value.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.preAuthRefPeriod", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.careTeam", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "CareTeam" + } + ], + "path": "ExplanationOfBenefit.careTeam", + "short": "Care Team members", + "definition": "The members of the team who provided the products and services.", + "requirements": "Common to identify the responsible and supporting practitioners.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.careTeam", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "EOB-inst-careTeam-practitioner", + "severity": "error", + "human": "Institutional EOB: Careteam roles refer to a practitioner", + "expression": "(\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists() implies\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists().provider.all(resolve() is Practitioner)\n)", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional" + }, + { + "key": "EOB-inst-careTeam-organization", + "severity": "error", + "human": "Institutional EOB: Careteam roles refer to an organization", + "expression": "(\nrole.where(coding.where(code in ('performing' )).exists()).exists() implies\nrole.where(coding.where(code in ('performing' )).exists()).exists().provider.all(resolve() is Organization)\n)", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional" + }, + { + "key": "EOB-careteam-qualification", + "severity": "error", + "human": "Care Team Performing physician's qualifications are from US-Core-Provider-Specialty Value Set", + "expression": "(\nrole.where(coding.where(code in ('performing' )).exists()).exists() implies\nrole.where(coding.where(code in ('performing' )).exists()).exists().qualification.memberOf('http://hl7.org/fhir/us/core/ValueSet/us-core-provider-specialty')\n)", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.careTeam.id", + "path": "ExplanationOfBenefit.careTeam.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.careTeam.extension", + "path": "ExplanationOfBenefit.careTeam.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.careTeam.modifierExtension", + "path": "ExplanationOfBenefit.careTeam.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.careTeam.sequence", + "path": "ExplanationOfBenefit.careTeam.sequence", + "short": "Order of care team", + "definition": "A number to uniquely identify care team entries.", + "comment": "careTeam.sequence values uniquely identify careTeam members. They do not necessarily indiate any order in which the patient was seen by the careTeam or identify any level of significance of the careTeam to the patient, etc. Client app implementations should not assign any significance to the sequence values", + "requirements": "Necessary to maintain the order of the care team and provide a mechanism to link individuals to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.careTeam.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.careTeam.provider", + "path": "ExplanationOfBenefit.careTeam.provider", + "short": "Practitioner or organization", + "definition": "Member of the team who provided the product or service.", + "comment": "The identifier assigned to the care team. (varies depending on the profile)", + "requirements": "Often a regulatory requirement to specify the responsible provider.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.careTeam.provider", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization", + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Practitioner" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.actor" + } + ] + }, + { + "id": "ExplanationOfBenefit.careTeam.responsible", + "path": "ExplanationOfBenefit.careTeam.responsible", + "short": "Indicator of the lead practitioner", + "definition": "The party who is billing and/or responsible for the claimed products or services.", + "comment": "Responsible might not be required when there is only a single provider listed.", + "requirements": "When multiple parties are present it is required to distinguish the lead or responsible individual.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.careTeam.responsible", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.careTeam.role", + "path": "ExplanationOfBenefit.careTeam.role", + "short": "Function within the team", + "definition": "The lead, assisting or supervising practitioner and their discipline if a multidisciplinary team.", + "comment": "The functional role of a provider on a claim. (165)", + "requirements": "When multiple parties are present it is required to distinguish the roles performed by each member.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.careTeam.role", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimInstitutionalCareTeamRole" + } + }, + { + "id": "ExplanationOfBenefit.careTeam.qualification", + "path": "ExplanationOfBenefit.careTeam.qualification", + "short": "Practitioner credential or specialization", + "definition": "The qualification of the practitioner which is applicable for this service.", + "requirements": "Need to specify which qualification a provider is delivering the product or service under.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.careTeam.qualification", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/core/ValueSet/us-core-provider-specialty" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on $this pattern", + "ordered": false, + "rules": "open" + }, + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "Defines data elements not available in the base EOB resource", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "InformationCode" + } + ], + "strength": "example", + "description": "The valuset used for additional information codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-exception" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "billingnetworkcontractingstatus", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "Indicates that the Billing Provider has a contract with the Plan (regardless of the network) as of the effective date of service or admission. (101)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "billingnetworkcontractingstatus" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerProviderContractingStatus" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "clmrecvddate", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "The date the claim was received by the payer (88)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "clmrecvddate" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "InformationCode" + } + ], + "strength": "example", + "description": "The valuset used for additional information codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-exception" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "typeofbill", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "UB04 (Form Locator 4) type of bill code provides specific information for payer purposes. The first digit of the three-digit number denotes the type of institution, the second digit classifies the type of care being billed, and the third digit identifies the frequency of the bill for a specific course of treatment or inpatient confinement. (17)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "typeofbill" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCTypeOfBill" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "pointoforigin", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "Identifies the place where the patient was identified as needing admission to an institution. This is a two position code mapped from the standard values for the UB-04 Source of Admission code (FL-15). (13)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "pointoforigin" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPointOfOriginForAdmissionOrVisit" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "admtype", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "Priority of the admission. Information located on (UB04 Form Locator 14). For example, an admission type of elective indicates that the patient's condition permitted time for medical services to be scheduled. (14)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "admtype" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPriorityTypeOfAdmissionOrVisit" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SupportingInformation" + } + ], + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "discharge-status", + "short": "Supporting information", + "definition": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", + "comment": "Patient’s status as of the discharge date for a facility stay. Information located on UB04. (Form Locator 17). (117)", + "requirements": "Typically these information codes are required to support the services rendered or the adjudication of the services rendered.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.id", + "path": "ExplanationOfBenefit.supportingInfo.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.extension", + "path": "ExplanationOfBenefit.supportingInfo.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.modifierExtension", + "path": "ExplanationOfBenefit.supportingInfo.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.sequence", + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "short": "Information instance identifier", + "definition": "A number to uniquely identify supporting information entries.", + "comment": "Client app implementations should look-up supportingInfo elements based on category values instead of sequence values", + "requirements": "Necessary to maintain the order of the supporting information items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "short": "Classification of the supplied information", + "definition": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", + "comment": "This may contain a category for the local bill type codes.", + "requirements": "Required to group or associate information items with common characteristics. For example: admission information or prior treatments.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "discharge-status" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBSupportingInfoType" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "short": "Type of information", + "definition": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", + "comment": "This may contain the local bill type codes such as the US UB-04 bill type code.", + "requirements": "Required to identify the kind of additional information.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPatientDischargeStatus" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "short": "When it occurred", + "definition": "The date when or period to which this information refers.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.value[x]", + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "short": "Data to be provided", + "definition": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", + "comment": "Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.", + "requirements": "To convey the data content to be provided when the information is more than a simple code or period.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.value[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + }, + { + "code": "string" + }, + { + "code": "Quantity" + }, + { + "code": "Attachment" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Resource" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.reason", + "path": "ExplanationOfBenefit.supportingInfo.reason", + "short": "Explanation for the information", + "definition": "Provides the reason in the situation where a reason code is required in addition to the content.", + "comment": "For example: the reason for the additional stay, or why a tooth is missing.", + "requirements": "Needed when the supporting information has both a date and amount/value and requires explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.supportingInfo.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Coding" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "MissingReason" + } + ], + "strength": "example", + "description": "Reason codes for the missing teeth.", + "valueSet": "http://hl7.org/fhir/ValueSet/missing-tooth-reason" + } + }, + { + "id": "ExplanationOfBenefit.diagnosis", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Diagnosis" + } + ], + "path": "ExplanationOfBenefit.diagnosis", + "short": "Pertinent diagnosis information", + "definition": "Information about diagnoses relevant to the claim items.", + "comment": "Diagnosis codes describe an individual's disease or medical condition. (6, 7, 8, 21, 22, 23, 30)", + "requirements": "Required for the adjudication by provided context for the services and product listed.", + "min": 1, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.diagnosis", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.diagnosis.id", + "path": "ExplanationOfBenefit.diagnosis.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.diagnosis.extension", + "path": "ExplanationOfBenefit.diagnosis.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.diagnosis.modifierExtension", + "path": "ExplanationOfBenefit.diagnosis.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.diagnosis.sequence", + "path": "ExplanationOfBenefit.diagnosis.sequence", + "short": "Diagnosis instance identifier", + "definition": "A number to uniquely identify diagnosis entries.", + "comment": "Diagnosis.sequence values do not necessarily indiate any order in which the diagnosis was reported or identified. client app implementations should not assign any significance to the sequence values. client app implementations should use the values of diagnosis.type to identify primary, secondary, etc.", + "requirements": "Necessary to maintain the order of the diagnosis items and provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.diagnosis.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.diagnosis.diagnosis[x]", + "path": "ExplanationOfBenefit.diagnosis.diagnosis[x]", + "short": "Nature of illness or problem", + "definition": "The nature of illness or problem in a coded form or as a reference to an external defined Condition.", + "requirements": "Provides health context for the evaluation of the products and/or services.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.diagnosis.diagnosis[x]", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/CDCICD910CMDiagnosisCodes" + } + }, + { + "id": "ExplanationOfBenefit.diagnosis.type", + "path": "ExplanationOfBenefit.diagnosis.type", + "short": "Timing or nature of the diagnosis", + "definition": "When the condition was observed or the relative ranking.", + "comment": "Indicates if the outpatient institutional diagnosis is principal, other, an external cause of injury or a patient reason for visit. (21, 22, 23)", + "requirements": "Often required to capture a particular diagnosis, for example: primary or discharge.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.diagnosis.type", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimOutpatientInstitutionalDiagnosisType" + } + }, + { + "id": "ExplanationOfBenefit.diagnosis.onAdmission", + "path": "ExplanationOfBenefit.diagnosis.onAdmission", + "short": "Present on admission", + "definition": "Indication of whether the diagnosis was present on admission to a facility.", + "requirements": "Many systems need to understand for adjudication if the diagnosis was present a time of admission.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.diagnosis.onAdmission", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "DiagnosisOnAdmission" + } + ], + "strength": "example", + "description": "Present on admission.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-diagnosis-on-admission" + } + }, + { + "id": "ExplanationOfBenefit.diagnosis.packageCode", + "path": "ExplanationOfBenefit.diagnosis.packageCode", + "short": "Package billing code", + "definition": "A package billing code or bundle code used to group products and services to a particular health condition (such as heart attack) which is based on a predetermined grouping code system.", + "comment": "For example, DRG (Diagnosis Related Group) or a bundled billing code. A patient may have a diagnosis of a Myocardio-infarction and a DRG for HeartAttack would assigned. The Claim item (and possible subsequent claims) would refer to the DRG for those line items that were for services related to the heart attack event.", + "requirements": "Required to relate the current diagnosis to a package billing code that is then referenced on the individual claim items which are specific to the health condition covered by the package code.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.diagnosis.packageCode", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "DiagnosisRelatedGroup" + } + ], + "strength": "example", + "description": "The DRG codes associated with the diagnosis.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-diagnosisrelatedgroup" + } + }, + { + "id": "ExplanationOfBenefit.procedure", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Procedure" + } + ], + "path": "ExplanationOfBenefit.procedure", + "short": "Clinical procedures performed", + "definition": "Procedures performed on the patient relevant to the billing items with the claim.", + "requirements": "The specific clinical invention are sometimes required to be provided to justify billing a greater than customary amount for a service.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.procedure", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.procedure.id", + "path": "ExplanationOfBenefit.procedure.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.procedure.extension", + "path": "ExplanationOfBenefit.procedure.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.procedure.modifierExtension", + "path": "ExplanationOfBenefit.procedure.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.procedure.sequence", + "path": "ExplanationOfBenefit.procedure.sequence", + "short": "Procedure instance identifier", + "definition": "A number to uniquely identify procedure entries.", + "requirements": "Necessary to provide a mechanism to link to claim details.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.procedure.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.procedure.type", + "path": "ExplanationOfBenefit.procedure.type", + "short": "Category of Procedure", + "definition": "When the condition was observed or the relative ranking.", + "requirements": "Often required to capture a particular diagnosis, for example: primary or discharge.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.procedure.type", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ProcedureType" + } + ], + "strength": "example", + "description": "Example procedure type codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-procedure-type" + } + }, + { + "id": "ExplanationOfBenefit.procedure.date", + "path": "ExplanationOfBenefit.procedure.date", + "short": "When the procedure was performed", + "definition": "Date and optionally time the procedure was performed.", + "requirements": "Required for auditing purposes.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.procedure.date", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "dateTime" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.procedure.procedure[x]", + "path": "ExplanationOfBenefit.procedure.procedure[x]", + "short": "Specific clinical procedure", + "definition": "The code or reference to a Procedure resource which identifies the clinical intervention performed.", + "requirements": "This identifies the actual clinical procedure.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.procedure.procedure[x]", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Procedure" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ICD10_Procedures" + } + ], + "strength": "example", + "description": "ICD10 Procedure codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/icd-10-procedures" + } + }, + { + "id": "ExplanationOfBenefit.procedure.udi", + "path": "ExplanationOfBenefit.procedure.udi", + "short": "Unique device identifier", + "definition": "Unique Device Identifiers associated with this line item.", + "requirements": "The UDI code allows the insurer to obtain device level information on the product supplied.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.procedure.udi", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Device" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.precedence", + "path": "ExplanationOfBenefit.precedence", + "short": "Precedence (primary, secondary, etc.)", + "definition": "This indicates the relative order of a series of EOBs related to different coverages for the same suite of services.", + "requirements": "Needed to coordinate between multiple EOBs for the same suite of services.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.precedence", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.insurance", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Insurance" + } + ], + "path": "ExplanationOfBenefit.insurance", + "short": "Patient insurance information", + "definition": "Financial instruments for reimbursement for the health care products and services specified on the claim.", + "comment": "Identity of the payers responsible for the claim. (2, 141). All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. An invariant is defined to enforce the following rule: Will have multiple occurrences on secondary / tertiary, etc. claims. Up to one occurrence, that of the ExplanationOfBenefit.insurer, will have a boolean value = 'True'", + "requirements": "At least one insurer is required for a claim to be a claim.", + "min": 1, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.insurance", + "min": 1, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "EOB-insurance-focal", + "severity": "error", + "human": "EOB.insurance: at most one with focal = true", + "expression": "insurance.select (focal = true).count() < 2", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "mapping": [ + { + "identity": "v2", + "map": "Coverage" + } + ] + }, + { + "id": "ExplanationOfBenefit.insurance.id", + "path": "ExplanationOfBenefit.insurance.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.insurance.extension", + "path": "ExplanationOfBenefit.insurance.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.insurance.modifierExtension", + "path": "ExplanationOfBenefit.insurance.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.insurance.focal", + "path": "ExplanationOfBenefit.insurance.focal", + "short": "Coverage to be used for adjudication", + "definition": "A flag to indicate that this Coverage is to be used for adjudication of this claim when set to true.", + "comment": "A patient may (will) have multiple insurance policies which provide reimbursement for healthcare services and products. For example, a person may also be covered by their spouse's policy and both appear in the list (and may be from the same insurer). This flag will be set to true for only one of the listed policies and that policy will be used for adjudicating this claim. Other claims would be created to request adjudication against the other listed policies. An invariant is defined to enforce the following rule: Will have multiple occurrences on secondary / tertiary, etc. claims. Up to one occurrence, that of the ExplanationOfBenefit.insurer, will have a boolean value = 'True'", + "requirements": "To identify which coverage in the list is being used to adjudicate this claim.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.insurance.focal", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "boolean" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.insurance.coverage", + "path": "ExplanationOfBenefit.insurance.coverage", + "short": "Insurance information", + "definition": "Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.", + "comment": "Same as insurance.coverage.organization. Party responsible for reimbursing the provider. When focal = true, Coverage.payer--> Organization.identifier. When focal = false, EOB.insurance.coverage.display = [name of other carrier]", + "requirements": "Required to allow the adjudicator to locate the correct policy and history within their information system.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.insurance.coverage", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Coverage" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.insurance.preAuthRef", + "path": "ExplanationOfBenefit.insurance.preAuthRef", + "short": "Prior authorization reference number", + "definition": "Reference numbers previously provided by the insurer to the provider to be quoted on subsequent claims containing services or products related to the prior authorization.", + "comment": "This value is an alphanumeric string that may be provided over the phone, via text, via paper, or within a ClaimResponse resource and is not a FHIR Identifier.", + "requirements": "Providers must quote previously issued authorization reference numbers in order to obtain adjudication as previously advised on the Preauthorization.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.insurance.preAuthRef", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "string" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.accident", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Accident" + } + ], + "path": "ExplanationOfBenefit.accident", + "short": "Details of the event", + "definition": "Details of a accident which resulted in injuries which required the products and services listed in the claim.", + "requirements": "When healthcare products and services are accident related, benefits may be payable under accident provisions of policies, such as automotive, etc before they are payable under normal health insurance.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.accident", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.accident.id", + "path": "ExplanationOfBenefit.accident.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.accident.extension", + "path": "ExplanationOfBenefit.accident.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.accident.modifierExtension", + "path": "ExplanationOfBenefit.accident.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.accident.date", + "path": "ExplanationOfBenefit.accident.date", + "short": "When the incident occurred", + "definition": "Date of an accident event related to the products and services contained in the claim.", + "comment": "The date of the accident has to precede the dates of the products and services but within a reasonable timeframe.", + "requirements": "Required for audit purposes and adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.accident.date", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.accident.type", + "path": "ExplanationOfBenefit.accident.type", + "short": "The nature of the accident", + "definition": "The type or context of the accident event for the purposes of selection of potential insurance coverages and determination of coordination between insurers.", + "requirements": "Coverage may be dependant on the type of accident.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.accident.type", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "AccidentType" + } + ], + "strength": "extensible", + "description": "Type of accident: work place, auto, etc.", + "valueSet": "http://terminology.hl7.org/ValueSet/v3-ActIncidentCode" + } + }, + { + "id": "ExplanationOfBenefit.accident.location[x]", + "path": "ExplanationOfBenefit.accident.location[x]", + "short": "Where the event occurred", + "definition": "The physical location of the accident event.", + "requirements": "Required for audit purposes and determination of applicable insurance liability.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.accident.location[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Address" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Location" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Item" + } + ], + "path": "ExplanationOfBenefit.item", + "short": "Product or service provided", + "definition": "A claim line. Either a simple (a product or service) or a 'group' of details which can also be a simple items or groups of sub-details.", + "comment": "Put the comment here for item", + "requirements": "The items to be processed for adjudication.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "adjudication-has-amount-type-slice", + "severity": "error", + "human": "If Adjudication is present, it must have at least one adjudicationamounttype slice", + "expression": "adjudication.exists() implies (adjudication.where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.id", + "path": "ExplanationOfBenefit.item.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.extension", + "path": "ExplanationOfBenefit.item.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.modifierExtension", + "path": "ExplanationOfBenefit.item.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.sequence", + "path": "ExplanationOfBenefit.item.sequence", + "short": "Item instance identifier", + "definition": "A number to uniquely identify item entries.", + "comment": "Line identification number that represents the number assigned in a source system for identification and processing. (36)", + "requirements": "Necessary to provide a mechanism to link to items from within the claim and within the adjudication details of the ClaimResponse.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.careTeamSequence", + "path": "ExplanationOfBenefit.item.careTeamSequence", + "short": "Applicable care team members", + "definition": "Care team members related to this service or product.", + "requirements": "Need to identify the individuals and their roles in the provision of the product or service.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.careTeamSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.diagnosisSequence", + "path": "ExplanationOfBenefit.item.diagnosisSequence", + "short": "Applicable diagnoses", + "definition": "Diagnoses applicable for this service or product.", + "requirements": "Need to related the product or service to the associated diagnoses.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.diagnosisSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.procedureSequence", + "path": "ExplanationOfBenefit.item.procedureSequence", + "short": "Applicable procedures", + "definition": "Procedures applicable for this service or product.", + "requirements": "Need to provide any listed specific procedures to support the product or service being claimed.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.procedureSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.informationSequence", + "path": "ExplanationOfBenefit.item.informationSequence", + "short": "Applicable exception and supporting information", + "definition": "Exceptions, special conditions and supporting information applicable for this service or product.", + "requirements": "Need to reference the supporting information items that relate directly to this product or service.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.informationSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.revenue", + "path": "ExplanationOfBenefit.item.revenue", + "short": "Revenue or cost center code", + "definition": "The type of revenue or cost center providing the product and/or service.", + "comment": "Code used on the UB-04 (Form Locator 42) to identify a specific accommodation, ancillary service, or billing calculation related to the service being billed (86)", + "requirements": "Needed in the processing of institutional claims.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.revenue", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCRevenueCodes" + } + }, + { + "id": "ExplanationOfBenefit.item.category", + "path": "ExplanationOfBenefit.item.category", + "short": "Benefit classification", + "definition": "Code to identify the general type of benefits under which products and services are provided.", + "comment": "Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.", + "requirements": "Needed in the processing of institutional claims as this allows the insurer to determine whether a facial X-Ray is for dental, orthopedic, or facial surgery purposes.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.category", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitCategory" + } + ], + "strength": "example", + "description": "Benefit categories such as: oral, medical, vision, oral-basic etc.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-benefitcategory" + } + }, + { + "id": "ExplanationOfBenefit.item.productOrService", + "path": "ExplanationOfBenefit.item.productOrService", + "short": "Billing, service, product, or drug code", + "definition": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", + "comment": "Medical procedure a patient received from a health care provider. Current coding methods include: CPT-4 and HCFA Common Procedure Coding System Level II - (HCPCSII). (40)", + "requirements": "Necessary to state what was provided or done.", + "alias": [ + "Drug Code", + "Bill Code", + "Service Code" + ], + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.productOrService", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSProcedureCodes" + } + }, + { + "id": "ExplanationOfBenefit.item.modifier", + "path": "ExplanationOfBenefit.item.modifier", + "short": "Product or service billing modifiers", + "definition": "Item typification or modifiers codes to convey additional context for the product or service.", + "comment": "Modifier(s) for the procedure represented on this line. Identifies special circumstances related to the performance of the service. (41)", + "requirements": "To support inclusion of the item for adjudication or to charge an elevated fee.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.modifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSModifiers" + } + }, + { + "id": "ExplanationOfBenefit.item.programCode", + "path": "ExplanationOfBenefit.item.programCode", + "short": "Program the product or service is provided under", + "definition": "Identifies the program under which this may be recovered.", + "comment": "For example: Neonatal program, child dental program or drug users recovery program.", + "requirements": "Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.programCode", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ProgramCode" + } + ], + "strength": "example", + "description": "Program specific reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-program-code" + } + }, + { + "id": "ExplanationOfBenefit.item.serviced[x]", + "path": "ExplanationOfBenefit.item.serviced[x]", + "slicing": { + "discriminator": [ + { + "type": "type", + "path": "$this" + } + ], + "ordered": false, + "rules": "closed" + }, + "short": "Date or dates of service or product delivery", + "definition": "The date or dates when the service or product was supplied, performed or completed.", + "requirements": "Needed to determine whether the service or product was provided during the term of the insurance coverage.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.serviced[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.done[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.serviced[x]:servicedDate", + "path": "ExplanationOfBenefit.item.serviced[x]", + "sliceName": "servicedDate", + "short": "Date or dates of service or product delivery", + "definition": "The date or dates when the service or product was supplied, performed or completed.", + "requirements": "Needed to determine whether the service or product was provided during the term of the insurance coverage.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.serviced[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.done[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.location[x]", + "path": "ExplanationOfBenefit.item.location[x]", + "short": "Place of service or where product was supplied", + "definition": "Where the product or service was provided.", + "requirements": "The location can alter whether the item was acceptable for insurance purposes or impact the determination of the benefit amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.location[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + }, + { + "code": "Address" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Location" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServicePlace" + } + ], + "strength": "example", + "description": "Place where the service is rendered.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-place" + }, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.where[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.quantity", + "path": "ExplanationOfBenefit.item.quantity", + "short": "Count of products or services", + "definition": "The number of repetitions of a service or product.", + "comment": "The quantity of units, times, days, visits, services, or treatments for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (42)", + "requirements": "Required when the product or service code does not convey the quantity provided.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.quantity", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Quantity", + "profile": [ + "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.unitPrice", + "path": "ExplanationOfBenefit.item.unitPrice", + "short": "Fee, charge or cost per item", + "definition": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", + "requirements": "The amount charged to the patient by the provider for a single unit.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.unitPrice", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.factor", + "path": "ExplanationOfBenefit.item.factor", + "short": "Price scaling factor", + "definition": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", + "comment": "To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).", + "requirements": "When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.factor", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.net", + "path": "ExplanationOfBenefit.item.net", + "short": "Total item cost", + "definition": "The quantity times the unit price for an additional service or product or charge.", + "comment": "For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.", + "requirements": "Provides the total amount claimed for the group (if a grouper) or the line item.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.net", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.udi", + "path": "ExplanationOfBenefit.item.udi", + "short": "Unique device identifier", + "definition": "Unique Device Identifiers associated with this line item.", + "requirements": "The UDI code allows the insurer to obtain device level information on the product supplied.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.udi", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Device" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.bodySite", + "path": "ExplanationOfBenefit.item.bodySite", + "short": "Anatomical location", + "definition": "Physical service site on the patient (limb, tooth, etc.).", + "comment": "For example: Providing a tooth code, allows an insurer to identify a provider performing a filling on a tooth that was previously removed.", + "requirements": "Allows insurer to validate specific procedures.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.bodySite", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "OralSites" + } + ], + "strength": "example", + "description": "The code for the teeth, quadrant, sextant and arch.", + "valueSet": "http://hl7.org/fhir/ValueSet/tooth" + } + }, + { + "id": "ExplanationOfBenefit.item.subSite", + "path": "ExplanationOfBenefit.item.subSite", + "short": "Anatomical sub-location", + "definition": "A region or surface of the bodySite, e.g. limb region or tooth surface(s).", + "requirements": "Allows insurer to validate specific procedures.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.subSite", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Surface" + } + ], + "strength": "example", + "description": "The code for the tooth surface and surface combinations.", + "valueSet": "http://hl7.org/fhir/ValueSet/surface" + } + }, + { + "id": "ExplanationOfBenefit.item.encounter", + "path": "ExplanationOfBenefit.item.encounter", + "short": "Encounters related to this billed item", + "definition": "A billed item may include goods or services provided in multiple encounters.", + "requirements": "Used in some jurisdictions to link clinical events to claim items.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.encounter", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Encounter" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.noteNumber", + "path": "ExplanationOfBenefit.item.noteNumber", + "short": "Applicable note numbers", + "definition": "The numbers associated with notes below which apply to the adjudication of this item.", + "comment": "References number of the associated processNote entered", + "requirements": "Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.noteNumber", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Adjudication" + } + ], + "path": "ExplanationOfBenefit.item.adjudication", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on value pattern", + "ordered": false, + "rules": "closed" + }, + "short": "Adjudication details", + "definition": "If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.", + "requirements": "The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication.id", + "path": "ExplanationOfBenefit.item.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication.extension", + "path": "ExplanationOfBenefit.item.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication.modifierExtension", + "path": "ExplanationOfBenefit.item.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication.reason", + "path": "ExplanationOfBenefit.item.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "For example, may indicate that the funds for this benefit type have been exhausted.", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "AdjudicationReason" + } + ], + "strength": "example", + "description": "Adjudication reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication-reason" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication.amount", + "path": "ExplanationOfBenefit.item.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication.value", + "path": "ExplanationOfBenefit.item.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Adjudication" + } + ], + "path": "ExplanationOfBenefit.item.adjudication", + "sliceName": "adjudicationamounttype", + "short": "Adjudication details", + "definition": "If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.", + "comment": "Describes the various amount fields used when payers receive and adjudicate a claim. (187)", + "requirements": "The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.id", + "path": "ExplanationOfBenefit.item.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.extension", + "path": "ExplanationOfBenefit.item.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.modifierExtension", + "path": "ExplanationOfBenefit.item.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.reason", + "path": "ExplanationOfBenefit.item.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "For example, may indicate that the funds for this benefit type have been exhausted.", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "AdjudicationReason" + } + ], + "strength": "example", + "description": "Adjudication reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication-reason" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.amount", + "path": "ExplanationOfBenefit.item.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.value", + "path": "ExplanationOfBenefit.item.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Adjudication" + } + ], + "path": "ExplanationOfBenefit.item.adjudication", + "sliceName": "denialreason", + "short": "Adjudication details", + "definition": "If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.", + "comment": "Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)", + "requirements": "The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.id", + "path": "ExplanationOfBenefit.item.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.extension", + "path": "ExplanationOfBenefit.item.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.modifierExtension", + "path": "ExplanationOfBenefit.item.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator", + "code": "denialreason" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Adjudication" + } + ], + "strength": "example", + "description": "The adjudication codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.reason", + "path": "ExplanationOfBenefit.item.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "For example, may indicate that the funds for this benefit type have been exhausted.", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.amount", + "path": "ExplanationOfBenefit.item.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.value", + "path": "ExplanationOfBenefit.item.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Adjudication" + } + ], + "path": "ExplanationOfBenefit.item.adjudication", + "sliceName": "allowedunits", + "short": "Adjudication details", + "definition": "If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.", + "comment": "The quantity of units, times, days, visits, services, or treatments allowed for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (149)", + "requirements": "The adjudication results conveys the insurer's assessment of the item provided in the claim under the terms of the patient's insurance coverage.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.id", + "path": "ExplanationOfBenefit.item.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.extension", + "path": "ExplanationOfBenefit.item.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.modifierExtension", + "path": "ExplanationOfBenefit.item.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator", + "code": "allowedunits" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Adjudication" + } + ], + "strength": "example", + "description": "The adjudication codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.reason", + "path": "ExplanationOfBenefit.item.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "For example, may indicate that the funds for this benefit type have been exhausted.", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "AdjudicationReason" + } + ], + "strength": "example", + "description": "Adjudication reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication-reason" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.amount", + "path": "ExplanationOfBenefit.item.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.value", + "path": "ExplanationOfBenefit.item.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Detail" + } + ], + "path": "ExplanationOfBenefit.item.detail", + "short": "Additional items", + "definition": "Second-tier of goods and services.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.id", + "path": "ExplanationOfBenefit.item.detail.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.detail.extension", + "path": "ExplanationOfBenefit.item.detail.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.detail.modifierExtension", + "path": "ExplanationOfBenefit.item.detail.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.detail.sequence", + "path": "ExplanationOfBenefit.item.detail.sequence", + "short": "Product or service provided", + "definition": "A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.", + "requirements": "The items to be processed for adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.revenue", + "path": "ExplanationOfBenefit.item.detail.revenue", + "short": "Revenue or cost center code", + "definition": "The type of revenue or cost center providing the product and/or service.", + "requirements": "Needed in the processing of institutional claims.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.revenue", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "RevenueCenter" + } + ], + "strength": "example", + "description": "Codes for the revenue or cost centers supplying the service and/or products.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-revenue-center" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.category", + "path": "ExplanationOfBenefit.item.detail.category", + "short": "Benefit classification", + "definition": "Code to identify the general type of benefits under which products and services are provided.", + "comment": "Examples include: Medical Care, Periodontics, Renal Dialysis, Vision Coverage.", + "requirements": "Needed in the processing of institutional claims as this allows the insurer to determine whether a facial X-Ray is for dental, orthopedic, or facial surgery purposes.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.category", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitCategory" + } + ], + "strength": "example", + "description": "Benefit categories such as: oral, medical, vision, oral-basic etc.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-benefitcategory" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.productOrService", + "path": "ExplanationOfBenefit.item.detail.productOrService", + "short": "Billing, service, product, or drug code", + "definition": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", + "comment": "If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.", + "requirements": "Necessary to state what was provided or done.", + "alias": [ + "Drug Code", + "Bill Code", + "Service Code" + ], + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.productOrService", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServiceProduct" + } + ], + "strength": "example", + "description": "Allowable service and product codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-uscls" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.modifier", + "path": "ExplanationOfBenefit.item.detail.modifier", + "short": "Service/Product billing modifiers", + "definition": "Item typification or modifiers codes to convey additional context for the product or service.", + "comment": "For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.", + "requirements": "To support inclusion of the item for adjudication or to charge an elevated fee.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.modifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Modifiers" + } + ], + "strength": "example", + "description": "Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-modifiers" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.programCode", + "path": "ExplanationOfBenefit.item.detail.programCode", + "short": "Program the product or service is provided under", + "definition": "Identifies the program under which this may be recovered.", + "comment": "For example: Neonatal program, child dental program or drug users recovery program.", + "requirements": "Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.programCode", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ProgramCode" + } + ], + "strength": "example", + "description": "Program specific reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-program-code" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.quantity", + "path": "ExplanationOfBenefit.item.detail.quantity", + "short": "Count of products or services", + "definition": "The number of repetitions of a service or product.", + "requirements": "Required when the product or service code does not convey the quantity provided.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.quantity", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Quantity", + "profile": [ + "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.unitPrice", + "path": "ExplanationOfBenefit.item.detail.unitPrice", + "short": "Fee, charge or cost per item", + "definition": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", + "requirements": "The amount charged to the patient by the provider for a single unit.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.unitPrice", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.factor", + "path": "ExplanationOfBenefit.item.detail.factor", + "short": "Price scaling factor", + "definition": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", + "comment": "To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).", + "requirements": "When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.factor", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.net", + "path": "ExplanationOfBenefit.item.detail.net", + "short": "Total item cost", + "definition": "The quantity times the unit price for an additional service or product or charge.", + "comment": "For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.", + "requirements": "Provides the total amount claimed for the group (if a grouper) or the line item.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.net", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.udi", + "path": "ExplanationOfBenefit.item.detail.udi", + "short": "Unique device identifier", + "definition": "Unique Device Identifiers associated with this line item.", + "requirements": "The UDI code allows the insurer to obtain device level information on the product supplied.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.udi", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Device" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.noteNumber", + "path": "ExplanationOfBenefit.item.detail.noteNumber", + "short": "Applicable note numbers", + "definition": "The numbers associated with notes below which apply to the adjudication of this item.", + "requirements": "Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.noteNumber", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.adjudication", + "path": "ExplanationOfBenefit.item.detail.adjudication", + "short": "Detail level adjudication details", + "definition": "The adjudication results.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.adjudication", + "min": 0, + "max": "*" + }, + "contentReference": "http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "SubDetail" + } + ], + "path": "ExplanationOfBenefit.item.detail.subDetail", + "short": "Additional items", + "definition": "Third-tier of goods and services.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.id", + "path": "ExplanationOfBenefit.item.detail.subDetail.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.extension", + "path": "ExplanationOfBenefit.item.detail.subDetail.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.modifierExtension", + "path": "ExplanationOfBenefit.item.detail.subDetail.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.sequence", + "path": "ExplanationOfBenefit.item.detail.subDetail.sequence", + "short": "Product or service provided", + "definition": "A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.", + "requirements": "The items to be processed for adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.sequence", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.revenue", + "path": "ExplanationOfBenefit.item.detail.subDetail.revenue", + "short": "Revenue or cost center code", + "definition": "The type of revenue or cost center providing the product and/or service.", + "requirements": "Needed in the processing of institutional claims.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.revenue", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "RevenueCenter" + } + ], + "strength": "example", + "description": "Codes for the revenue or cost centers supplying the service and/or products.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-revenue-center" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.category", + "path": "ExplanationOfBenefit.item.detail.subDetail.category", + "short": "Benefit classification", + "definition": "Code to identify the general type of benefits under which products and services are provided.", + "comment": "Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.", + "requirements": "Needed in the processing of institutional claims as this allows the insurer to determine whether a facial X-Ray is for dental, orthopedic, or facial surgery purposes.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.category", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitCategory" + } + ], + "strength": "example", + "description": "Benefit categories such as: oral, medical, vision, oral-basic etc.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-benefitcategory" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.productOrService", + "path": "ExplanationOfBenefit.item.detail.subDetail.productOrService", + "short": "Billing, service, product, or drug code", + "definition": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", + "comment": "If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.", + "requirements": "Necessary to state what was provided or done.", + "alias": [ + "Drug Code", + "Bill Code", + "Service Code" + ], + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.productOrService", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServiceProduct" + } + ], + "strength": "example", + "description": "Allowable service and product codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-uscls" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.modifier", + "path": "ExplanationOfBenefit.item.detail.subDetail.modifier", + "short": "Service/Product billing modifiers", + "definition": "Item typification or modifiers codes to convey additional context for the product or service.", + "comment": "For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or outside of office hours.", + "requirements": "To support inclusion of the item for adjudication or to charge an elevated fee.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.modifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Modifiers" + } + ], + "strength": "example", + "description": "Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-modifiers" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.programCode", + "path": "ExplanationOfBenefit.item.detail.subDetail.programCode", + "short": "Program the product or service is provided under", + "definition": "Identifies the program under which this may be recovered.", + "comment": "For example: Neonatal program, child dental program or drug users recovery program.", + "requirements": "Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.programCode", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ProgramCode" + } + ], + "strength": "example", + "description": "Program specific reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-program-code" + } + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.quantity", + "path": "ExplanationOfBenefit.item.detail.subDetail.quantity", + "short": "Count of products or services", + "definition": "The number of repetitions of a service or product.", + "requirements": "Required when the product or service code does not convey the quantity provided.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.quantity", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Quantity", + "profile": [ + "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.unitPrice", + "path": "ExplanationOfBenefit.item.detail.subDetail.unitPrice", + "short": "Fee, charge or cost per item", + "definition": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", + "requirements": "The amount charged to the patient by the provider for a single unit.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.unitPrice", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.factor", + "path": "ExplanationOfBenefit.item.detail.subDetail.factor", + "short": "Price scaling factor", + "definition": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", + "comment": "To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).", + "requirements": "When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.factor", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.net", + "path": "ExplanationOfBenefit.item.detail.subDetail.net", + "short": "Total item cost", + "definition": "The quantity times the unit price for an additional service or product or charge.", + "comment": "For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.", + "requirements": "Provides the total amount claimed for the group (if a grouper) or the line item.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.net", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.udi", + "path": "ExplanationOfBenefit.item.detail.subDetail.udi", + "short": "Unique device identifier", + "definition": "Unique Device Identifiers associated with this line item.", + "requirements": "The UDI code allows the insurer to obtain device level information on the product supplied.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.udi", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Device" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.noteNumber", + "path": "ExplanationOfBenefit.item.detail.subDetail.noteNumber", + "short": "Applicable note numbers", + "definition": "The numbers associated with notes below which apply to the adjudication of this item.", + "requirements": "Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.noteNumber", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.item.detail.subDetail.adjudication", + "path": "ExplanationOfBenefit.item.detail.subDetail.adjudication", + "short": "Subdetail level adjudication details", + "definition": "The adjudication results.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.item.detail.subDetail.adjudication", + "min": 0, + "max": "*" + }, + "contentReference": "http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "740;600" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "AddedItem" + } + ], + "path": "ExplanationOfBenefit.addItem", + "short": "Insurer added line items", + "definition": "The first-tier service adjudications for payor added product or service lines.", + "requirements": "Insurers may redefine the provided product or service or may package and/or decompose groups of products and services. The addItems allows the insurer to provide their line item list with linkage to the submitted items/details/sub-details. In a preauthorization the insurer may use the addItem structure to provide additional information on authorized products and services.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.id", + "path": "ExplanationOfBenefit.addItem.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.extension", + "path": "ExplanationOfBenefit.addItem.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.modifierExtension", + "path": "ExplanationOfBenefit.addItem.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.itemSequence", + "path": "ExplanationOfBenefit.addItem.itemSequence", + "short": "Item sequence number", + "definition": "Claim items which this service line is intended to replace.", + "requirements": "Provides references to the claim items.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.itemSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detailSequence", + "path": "ExplanationOfBenefit.addItem.detailSequence", + "short": "Detail sequence number", + "definition": "The sequence number of the details within the claim item which this line is intended to replace.", + "requirements": "Provides references to the claim details within the claim item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detailSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.subDetailSequence", + "path": "ExplanationOfBenefit.addItem.subDetailSequence", + "short": "Subdetail sequence number", + "definition": "The sequence number of the sub-details woithin the details within the claim item which this line is intended to replace.", + "requirements": "Provides references to the claim sub-details within the claim detail.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.subDetailSequence", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.provider", + "path": "ExplanationOfBenefit.addItem.provider", + "short": "Authorized providers", + "definition": "The providers who are authorized for the services rendered to the patient.", + "requirements": "Insurer may provide authorization specifically to a restricted set of providers rather than an open authorization.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.provider", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Practitioner", + "http://hl7.org/fhir/StructureDefinition/PractitionerRole", + "http://hl7.org/fhir/StructureDefinition/Organization" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.source" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.productOrService", + "path": "ExplanationOfBenefit.addItem.productOrService", + "short": "Billing, service, product, or drug code", + "definition": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", + "comment": "If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.", + "requirements": "Necessary to state what was provided or done.", + "alias": [ + "Drug Code", + "Bill Code", + "Service Code" + ], + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.productOrService", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServiceProduct" + } + ], + "strength": "example", + "description": "Allowable service and product codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-uscls" + } + }, + { + "id": "ExplanationOfBenefit.addItem.modifier", + "path": "ExplanationOfBenefit.addItem.modifier", + "short": "Service/Product billing modifiers", + "definition": "Item typification or modifiers codes to convey additional context for the product or service.", + "comment": "For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.", + "requirements": "To support inclusion of the item for adjudication or to charge an elevated fee.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.modifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Modifiers" + } + ], + "strength": "example", + "description": "Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-modifiers" + } + }, + { + "id": "ExplanationOfBenefit.addItem.programCode", + "path": "ExplanationOfBenefit.addItem.programCode", + "short": "Program the product or service is provided under", + "definition": "Identifies the program under which this may be recovered.", + "comment": "For example: Neonatal program, child dental program or drug users recovery program.", + "requirements": "Commonly used in in the identification of publicly provided program focused on population segments or disease classifications.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.programCode", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ProgramCode" + } + ], + "strength": "example", + "description": "Program specific reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-program-code" + } + }, + { + "id": "ExplanationOfBenefit.addItem.serviced[x]", + "path": "ExplanationOfBenefit.addItem.serviced[x]", + "short": "Date or dates of service or product delivery", + "definition": "The date or dates when the service or product was supplied, performed or completed.", + "requirements": "Needed to determine whether the service or product was provided during the term of the insurance coverage.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.serviced[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + }, + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.done[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.location[x]", + "path": "ExplanationOfBenefit.addItem.location[x]", + "short": "Place of service or where product was supplied", + "definition": "Where the product or service was provided.", + "requirements": "The location can alter whether the item was acceptable for insurance purposes or impact the determination of the benefit amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.location[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + }, + { + "code": "Address" + }, + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/StructureDefinition/Location" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServicePlace" + } + ], + "strength": "example", + "description": "Place where the service is rendered.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-place" + }, + "mapping": [ + { + "identity": "w5", + "map": "FiveWs.where[x]" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.quantity", + "path": "ExplanationOfBenefit.addItem.quantity", + "short": "Count of products or services", + "definition": "The number of repetitions of a service or product.", + "requirements": "Required when the product or service code does not convey the quantity provided.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.quantity", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Quantity", + "profile": [ + "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.unitPrice", + "path": "ExplanationOfBenefit.addItem.unitPrice", + "short": "Fee, charge or cost per item", + "definition": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", + "requirements": "The amount charged to the patient by the provider for a single unit.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.unitPrice", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.factor", + "path": "ExplanationOfBenefit.addItem.factor", + "short": "Price scaling factor", + "definition": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", + "comment": "To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).", + "requirements": "When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.factor", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.net", + "path": "ExplanationOfBenefit.addItem.net", + "short": "Total item cost", + "definition": "The quantity times the unit price for an additional service or product or charge.", + "comment": "For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.", + "requirements": "Provides the total amount claimed for the group (if a grouper) or the line item.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.net", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.bodySite", + "path": "ExplanationOfBenefit.addItem.bodySite", + "short": "Anatomical location", + "definition": "Physical service site on the patient (limb, tooth, etc.).", + "comment": "For example, providing a tooth code allows an insurer to identify a provider performing a filling on a tooth that was previously removed.", + "requirements": "Allows insurer to validate specific procedures.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.bodySite", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "OralSites" + } + ], + "strength": "example", + "description": "The code for the teeth, quadrant, sextant and arch.", + "valueSet": "http://hl7.org/fhir/ValueSet/tooth" + } + }, + { + "id": "ExplanationOfBenefit.addItem.subSite", + "path": "ExplanationOfBenefit.addItem.subSite", + "short": "Anatomical sub-location", + "definition": "A region or surface of the bodySite, e.g. limb region or tooth surface(s).", + "requirements": "Allows insurer to validate specific procedures.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.subSite", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Surface" + } + ], + "strength": "example", + "description": "The code for the tooth surface and surface combinations.", + "valueSet": "http://hl7.org/fhir/ValueSet/surface" + } + }, + { + "id": "ExplanationOfBenefit.addItem.noteNumber", + "path": "ExplanationOfBenefit.addItem.noteNumber", + "short": "Applicable note numbers", + "definition": "The numbers associated with notes below which apply to the adjudication of this item.", + "requirements": "Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.noteNumber", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.adjudication", + "path": "ExplanationOfBenefit.addItem.adjudication", + "short": "Added items adjudication", + "definition": "The adjudication results.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.adjudication", + "min": 0, + "max": "*" + }, + "contentReference": "http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "740;600" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "AddedItemDetail" + } + ], + "path": "ExplanationOfBenefit.addItem.detail", + "short": "Insurer added line items", + "definition": "The second-tier service adjudications for payor added services.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.id", + "path": "ExplanationOfBenefit.addItem.detail.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.detail.extension", + "path": "ExplanationOfBenefit.addItem.detail.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.detail.modifierExtension", + "path": "ExplanationOfBenefit.addItem.detail.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.detail.productOrService", + "path": "ExplanationOfBenefit.addItem.detail.productOrService", + "short": "Billing, service, product, or drug code", + "definition": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", + "comment": "If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.", + "requirements": "Necessary to state what was provided or done.", + "alias": [ + "Drug Code", + "Bill Code", + "Service Code" + ], + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.productOrService", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServiceProduct" + } + ], + "strength": "example", + "description": "Allowable service and product codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-uscls" + } + }, + { + "id": "ExplanationOfBenefit.addItem.detail.modifier", + "path": "ExplanationOfBenefit.addItem.detail.modifier", + "short": "Service/Product billing modifiers", + "definition": "Item typification or modifiers codes to convey additional context for the product or service.", + "comment": "For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.", + "requirements": "To support inclusion of the item for adjudication or to charge an elevated fee.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.modifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Modifiers" + } + ], + "strength": "example", + "description": "Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-modifiers" + } + }, + { + "id": "ExplanationOfBenefit.addItem.detail.quantity", + "path": "ExplanationOfBenefit.addItem.detail.quantity", + "short": "Count of products or services", + "definition": "The number of repetitions of a service or product.", + "requirements": "Required when the product or service code does not convey the quantity provided.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.quantity", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Quantity", + "profile": [ + "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.unitPrice", + "path": "ExplanationOfBenefit.addItem.detail.unitPrice", + "short": "Fee, charge or cost per item", + "definition": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", + "requirements": "The amount charged to the patient by the provider for a single unit.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.unitPrice", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.factor", + "path": "ExplanationOfBenefit.addItem.detail.factor", + "short": "Price scaling factor", + "definition": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", + "comment": "To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).", + "requirements": "When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.factor", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.net", + "path": "ExplanationOfBenefit.addItem.detail.net", + "short": "Total item cost", + "definition": "The quantity times the unit price for an additional service or product or charge.", + "comment": "For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.", + "requirements": "Provides the total amount claimed for the group (if a grouper) or the line item.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.net", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.noteNumber", + "path": "ExplanationOfBenefit.addItem.detail.noteNumber", + "short": "Applicable note numbers", + "definition": "The numbers associated with notes below which apply to the adjudication of this item.", + "requirements": "Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.noteNumber", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.adjudication", + "path": "ExplanationOfBenefit.addItem.detail.adjudication", + "short": "Added items adjudication", + "definition": "The adjudication results.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.adjudication", + "min": 0, + "max": "*" + }, + "contentReference": "http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "740;600" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "AddedItemDetailSubDetail" + } + ], + "path": "ExplanationOfBenefit.addItem.detail.subDetail", + "short": "Insurer added line items", + "definition": "The third-tier service adjudications for payor added services.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.id", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.extension", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.modifierExtension", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.productOrService", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.productOrService", + "short": "Billing, service, product, or drug code", + "definition": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", + "comment": "If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI). If a grouping item then use a group code to indicate the type of thing being grouped e.g. 'glasses' or 'compound'.", + "requirements": "Necessary to state what was provided or done.", + "alias": [ + "Drug Code", + "Bill Code", + "Service Code" + ], + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.productOrService", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "ServiceProduct" + } + ], + "strength": "example", + "description": "Allowable service and product codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/service-uscls" + } + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.modifier", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.modifier", + "short": "Service/Product billing modifiers", + "definition": "Item typification or modifiers codes to convey additional context for the product or service.", + "comment": "For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or out of office hours.", + "requirements": "To support inclusion of the item for adjudication or to charge an elevated fee.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.modifier", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Modifiers" + } + ], + "strength": "example", + "description": "Item type or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or an appliance was lost or stolen.", + "valueSet": "http://hl7.org/fhir/ValueSet/claim-modifiers" + } + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.quantity", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.quantity", + "short": "Count of products or services", + "definition": "The number of repetitions of a service or product.", + "requirements": "Required when the product or service code does not convey the quantity provided.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.quantity", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Quantity", + "profile": [ + "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" + ] + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.unitPrice", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.unitPrice", + "short": "Fee, charge or cost per item", + "definition": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", + "requirements": "The amount charged to the patient by the provider for a single unit.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.unitPrice", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.factor", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.factor", + "short": "Price scaling factor", + "definition": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", + "comment": "To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).", + "requirements": "When discounts are provided to a patient (example: Senior's discount) then this must be documented for adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.factor", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.net", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.net", + "short": "Total item cost", + "definition": "The quantity times the unit price for an additional service or product or charge.", + "comment": "For example, the formula: quantity * unitPrice * factor = net. Quantity and factor are assumed to be 1 if not supplied.", + "requirements": "Provides the total amount claimed for the group (if a grouper) or the line item.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.net", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.noteNumber", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.noteNumber", + "short": "Applicable note numbers", + "definition": "The numbers associated with notes below which apply to the adjudication of this item.", + "requirements": "Provides a condensed manner for associating human readable descriptive explanations for adjudications on the line item.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.noteNumber", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.addItem.detail.subDetail.adjudication", + "path": "ExplanationOfBenefit.addItem.detail.subDetail.adjudication", + "short": "Added items adjudication", + "definition": "The adjudication results.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.addItem.detail.subDetail.adjudication", + "min": 0, + "max": "*" + }, + "contentReference": "http://hl7.org/fhir/StructureDefinition/ExplanationOfBenefit#ExplanationOfBenefit.item.adjudication", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication", + "path": "ExplanationOfBenefit.adjudication", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on value pattern", + "ordered": false, + "rules": "closed" + }, + "short": "Header-level adjudication", + "definition": "The adjudication results which are presented at the header level rather than at the line-item or add-item levels.", + "requirements": "Some insurers will receive line-items but provide the adjudication only at a summary or header-level.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication.id", + "path": "ExplanationOfBenefit.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication.extension", + "path": "ExplanationOfBenefit.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication.modifierExtension", + "path": "ExplanationOfBenefit.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication.category", + "path": "ExplanationOfBenefit.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator" + } + }, + { + "id": "ExplanationOfBenefit.adjudication.reason", + "path": "ExplanationOfBenefit.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "For example, may indicate that the funds for this benefit type have been exhausted.", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "AdjudicationReason" + } + ], + "strength": "example", + "description": "Adjudication reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication-reason" + } + }, + { + "id": "ExplanationOfBenefit.adjudication.amount", + "path": "ExplanationOfBenefit.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication.value", + "path": "ExplanationOfBenefit.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype", + "path": "ExplanationOfBenefit.adjudication", + "sliceName": "adjudicationamounttype", + "short": "Header-level adjudication", + "definition": "The adjudication results which are presented at the header level rather than at the line-item or add-item levels.", + "comment": "Describes the various amount fields used when payers receive and adjudicate a claim. (187)", + "requirements": "Some insurers will receive line-items but provide the adjudication only at a summary or header-level.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.id", + "path": "ExplanationOfBenefit.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.extension", + "path": "ExplanationOfBenefit.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.modifierExtension", + "path": "ExplanationOfBenefit.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.category", + "path": "ExplanationOfBenefit.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication" + } + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.reason", + "path": "ExplanationOfBenefit.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "For example, may indicate that the funds for this benefit type have been exhausted.", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "AdjudicationReason" + } + ], + "strength": "example", + "description": "Adjudication reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication-reason" + } + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.amount", + "path": "ExplanationOfBenefit.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.value", + "path": "ExplanationOfBenefit.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason", + "path": "ExplanationOfBenefit.adjudication", + "sliceName": "denialreason", + "short": "Header-level adjudication", + "definition": "The adjudication results which are presented at the header level rather than at the line-item or add-item levels.", + "comment": "Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)", + "requirements": "Some insurers will receive line-items but provide the adjudication only at a summary or header-level.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.adjudication", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.id", + "path": "ExplanationOfBenefit.adjudication.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.extension", + "path": "ExplanationOfBenefit.adjudication.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.modifierExtension", + "path": "ExplanationOfBenefit.adjudication.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.category", + "path": "ExplanationOfBenefit.adjudication.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to enable understanding of the context of the other information in the adjudication.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator", + "code": "denialreason" + } + ] + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Adjudication" + } + ], + "strength": "example", + "description": "The adjudication codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/adjudication" + } + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.reason", + "path": "ExplanationOfBenefit.adjudication.reason", + "short": "Explanation of adjudication outcome", + "definition": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", + "comment": "Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)", + "requirements": "To support understanding of variance from adjudication expectations.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes" + } + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.amount", + "path": "ExplanationOfBenefit.adjudication.amount", + "short": "Monetary amount", + "definition": "Monetary amount associated with the category.", + "comment": "For example, amount submitted, eligible amount, co-payment, and benefit payable.", + "requirements": "Most adjuciation categories convey a monetary amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.value", + "path": "ExplanationOfBenefit.adjudication.value", + "short": "Non-monitary value", + "definition": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", + "comment": "For example: eligible percentage or co-payment percentage.", + "requirements": "Some adjudication categories convey a percentage or a fixed value.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.item.adjudication.value", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "decimal" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.total", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "'360;620" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Total" + } + ], + "path": "ExplanationOfBenefit.total", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on value pattern", + "ordered": false, + "rules": "open" + }, + "short": "Adjudication totals", + "definition": "Categorized monetary totals for the adjudication.", + "comment": "Totals for amounts submitted, co-pays, benefits payable etc.", + "requirements": "To provide the requestor with financial totals by category for the adjudication.", + "min": 1, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.total", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.total.id", + "path": "ExplanationOfBenefit.total.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.total.extension", + "path": "ExplanationOfBenefit.total.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.total.modifierExtension", + "path": "ExplanationOfBenefit.total.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.total.category", + "path": "ExplanationOfBenefit.total.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to convey the type of total provided.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBTotalCategoryDiscriminator" + } + }, + { + "id": "ExplanationOfBenefit.total.amount", + "path": "ExplanationOfBenefit.total.amount", + "short": "Financial total for the category", + "definition": "Monetary total amount associated with the category.", + "comment": "Total amount for each category (i.e., submitted, allowed, etc.) (148)", + "requirements": "Needed to convey the total monetary amount.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total.amount", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "'360;620" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Total" + } + ], + "path": "ExplanationOfBenefit.total", + "sliceName": "adjudicationamounttype", + "short": "Adjudication totals", + "definition": "Categorized monetary totals for the adjudication.", + "comment": "Describes the various amount fields used when payers receive and adjudicate a claim. (187)", + "requirements": "To provide the requestor with financial totals by category for the adjudication.", + "min": 1, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.total", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.id", + "path": "ExplanationOfBenefit.total.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.extension", + "path": "ExplanationOfBenefit.total.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.modifierExtension", + "path": "ExplanationOfBenefit.total.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.category", + "path": "ExplanationOfBenefit.total.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to convey the type of total provided.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication" + } + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.amount", + "path": "ExplanationOfBenefit.total.amount", + "short": "Financial total for the category", + "definition": "Monetary total amount associated with the category.", + "requirements": "Needed to convey the total monetary amount.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total.amount", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "'360;620" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Total" + } + ], + "path": "ExplanationOfBenefit.total", + "sliceName": "inoutnetwork", + "short": "Adjudication totals", + "definition": "Categorized monetary totals for the adjudication.", + "comment": "Indicates the in network or out of network payment status of the claim. (142)", + "requirements": "To provide the requestor with financial totals by category for the adjudication.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork.id", + "path": "ExplanationOfBenefit.total.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork.extension", + "path": "ExplanationOfBenefit.total.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork.modifierExtension", + "path": "ExplanationOfBenefit.total.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork.category", + "path": "ExplanationOfBenefit.total.category", + "short": "Type of adjudication information", + "definition": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", + "comment": "For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.", + "requirements": "Needed to convey the type of total provided.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerBenefitPaymentStatus" + } + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork.amount", + "path": "ExplanationOfBenefit.total.amount", + "short": "Financial total for the category", + "definition": "Monetary total amount associated with the category.", + "requirements": "Needed to convey the total monetary amount.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.total.amount", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": true + }, + { + "id": "ExplanationOfBenefit.payment", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-display-hint", + "valueString": "360;650" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Payment" + } + ], + "path": "ExplanationOfBenefit.payment", + "short": "Payment Details", + "definition": "Payment details for the adjudication of the claim.", + "requirements": "Needed to convey references to the financial instrument that has been used if payment has been made.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.payment.id", + "path": "ExplanationOfBenefit.payment.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.payment.extension", + "path": "ExplanationOfBenefit.payment.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.payment.modifierExtension", + "path": "ExplanationOfBenefit.payment.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.payment.type", + "path": "ExplanationOfBenefit.payment.type", + "short": "Partial or complete payment", + "definition": "Whether this represents partial or complete payment of the benefits payable.", + "comment": "Indicates whether the claim was paid or denied. (91)", + "requirements": "To advise the requestor when the insurer believes all payments to have been completed.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment.type", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerClaimPaymentStatusCode" + } + }, + { + "id": "ExplanationOfBenefit.payment.adjustment", + "path": "ExplanationOfBenefit.payment.adjustment", + "short": "Payment adjustment for non-claim issues", + "definition": "Total amount of all adjustments to this payment included in this transaction which are not related to this claim's adjudication.", + "comment": "Insurers will deduct amounts owing from the provider (adjustment), such as a prior overpayment, from the amount owing to the provider (benefits payable) when payment is made to the provider.", + "requirements": "To advise the requestor of adjustments applied to the payment.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment.adjustment", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.payment.adjustmentReason", + "path": "ExplanationOfBenefit.payment.adjustmentReason", + "short": "Explanation for the variance", + "definition": "Reason for the payment adjustment.", + "requirements": "Needed to clarify the monetary adjustment.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment.adjustmentReason", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "PaymentAdjustmentReason" + } + ], + "strength": "example", + "description": "Payment Adjustment reason codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/payment-adjustment-reason" + } + }, + { + "id": "ExplanationOfBenefit.payment.date", + "path": "ExplanationOfBenefit.payment.date", + "short": "Expected date of payment", + "definition": "Estimated date the payment will be issued or the actual issue date of payment.", + "comment": "The date the claim was paid. (107)", + "requirements": "To advise the payee when payment can be expected.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment.date", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "date" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.payment.amount", + "path": "ExplanationOfBenefit.payment.amount", + "short": "Payable amount after adjustment", + "definition": "Benefits payable less any payment adjustment.", + "requirements": "Needed to provide the actual payment amount.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment.amount", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.payment.identifier", + "path": "ExplanationOfBenefit.payment.identifier", + "short": "Business identifier for the payment", + "definition": "Issuer's unique identifier for the payment instrument.", + "comment": "For example: EFT number or check number.", + "requirements": "Enable the receiver to reconcile when payment received.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.payment.identifier", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Identifier" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.formCode", + "path": "ExplanationOfBenefit.formCode", + "short": "Printed form identifier", + "definition": "A code for the form to be used for printing the content.", + "comment": "May be needed to identify specific jurisdictional forms.", + "requirements": "Needed to specify the specific form used for producing output for this response.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.formCode", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Forms" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "example", + "description": "The forms codes.", + "valueSet": "http://hl7.org/fhir/ValueSet/forms" + } + }, + { + "id": "ExplanationOfBenefit.form", + "path": "ExplanationOfBenefit.form", + "short": "Printed reference or actual form", + "definition": "The actual form, by reference or inclusion, for printing the content or an EOB.", + "comment": "Needed to permit insurers to include the actual form.", + "requirements": "Needed to include the specific form used for producing output for this response.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.form", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Attachment" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.processNote", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Note" + } + ], + "path": "ExplanationOfBenefit.processNote", + "short": "Note concerning adjudication", + "definition": "A note that describes or explains adjudication results in a human readable form.", + "requirements": "Provides the insurer specific textual explanations associated with the processing.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.processNote", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.processNote.id", + "path": "ExplanationOfBenefit.processNote.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.processNote.extension", + "path": "ExplanationOfBenefit.processNote.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.processNote.modifierExtension", + "path": "ExplanationOfBenefit.processNote.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.processNote.number", + "path": "ExplanationOfBenefit.processNote.number", + "short": "Note instance identifier", + "definition": "A number to uniquely identify a note entry.", + "requirements": "Necessary to provide a mechanism to link from adjudications.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.processNote.number", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "positiveInt" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.processNote.type", + "path": "ExplanationOfBenefit.processNote.type", + "short": "display | print | printoper", + "definition": "The business purpose of the note text.", + "requirements": "To convey the expectation for when the text is used.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.processNote.type", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "code" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "NoteType" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "required", + "description": "The presentation types of notes.", + "valueSet": "http://hl7.org/fhir/ValueSet/note-type|4.0.1" + } + }, + { + "id": "ExplanationOfBenefit.processNote.text", + "path": "ExplanationOfBenefit.processNote.text", + "short": "Note explanatory text", + "definition": "The explanation or description associated with the processing.", + "comment": "Payment denial explanation to a member, typically goes on the EOB when the payment is denied or disallowed (181)", + "requirements": "Required to provide human readable explanation.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.processNote.text", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "string" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true, + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.processNote.language", + "path": "ExplanationOfBenefit.processNote.language", + "short": "Language of the text", + "definition": "A code to define the language used in the text of the note.", + "comment": "Only required if the language is different from the resource language.", + "requirements": "Note text may vary from the resource defined language.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.processNote.language", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-maxValueSet", + "valueCanonical": "http://hl7.org/fhir/ValueSet/all-languages" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "Language" + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding", + "valueBoolean": true + } + ], + "strength": "preferred", + "description": "A human language.", + "valueSet": "http://hl7.org/fhir/ValueSet/languages" + } + }, + { + "id": "ExplanationOfBenefit.benefitPeriod", + "path": "ExplanationOfBenefit.benefitPeriod", + "short": "When the benefits are applicable", + "definition": "The term of the benefits documented in this response.", + "comment": "Not applicable when use=claim.", + "requirements": "Needed as coverages may be multi-year while benefits tend to be annual therefore a separate expression of the benefit period is needed.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitPeriod", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "Period" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "BenefitBalance" + } + ], + "path": "ExplanationOfBenefit.benefitBalance", + "short": "Balance by Benefit Category", + "definition": "Balance by Benefit Category.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.benefitBalance", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance.id", + "path": "ExplanationOfBenefit.benefitBalance.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.benefitBalance.extension", + "path": "ExplanationOfBenefit.benefitBalance.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.benefitBalance.modifierExtension", + "path": "ExplanationOfBenefit.benefitBalance.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.benefitBalance.category", + "path": "ExplanationOfBenefit.benefitBalance.category", + "short": "Benefit classification", + "definition": "Code to identify the general type of benefits under which products and services are provided.", + "comment": "Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.", + "requirements": "Needed to convey the category of service or product for which eligibility is sought.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.category", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitCategory" + } + ], + "strength": "example", + "description": "Benefit categories such as: oral, medical, vision, oral-basic etc.", + "valueSet": "http://hl7.org/fhir/ValueSet/ex-benefitcategory" + } + }, + { + "id": "ExplanationOfBenefit.benefitBalance.excluded", + "path": "ExplanationOfBenefit.benefitBalance.excluded", + "short": "Excluded from the plan", + "definition": "True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.", + "requirements": "Needed to identify items that are specifically excluded from the coverage.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.excluded", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "boolean" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance.name", + "path": "ExplanationOfBenefit.benefitBalance.name", + "short": "Short name for the benefit", + "definition": "A short name or tag for the benefit.", + "comment": "For example: MED01, or DENT2.", + "requirements": "Required to align with other plan names.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.name", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "string" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance.description", + "path": "ExplanationOfBenefit.benefitBalance.description", + "short": "Description of the benefit or services covered", + "definition": "A richer description of the benefit or services covered.", + "comment": "For example, 'DENT2 covers 100% of basic, 50% of major but excludes Ortho, Implants and Cosmetic services'.", + "requirements": "Needed for human readable reference.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.description", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "string" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance.network", + "path": "ExplanationOfBenefit.benefitBalance.network", + "short": "In or out of network", + "definition": "Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.", + "requirements": "Needed as in or out of network providers are treated differently under the coverage.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.network", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitNetwork" + } + ], + "strength": "example", + "description": "Code to classify in or out of network services.", + "valueSet": "http://hl7.org/fhir/ValueSet/benefit-network" + } + }, + { + "id": "ExplanationOfBenefit.benefitBalance.unit", + "path": "ExplanationOfBenefit.benefitBalance.unit", + "short": "Individual or family", + "definition": "Indicates if the benefits apply to an individual or to the family.", + "requirements": "Needed for the understanding of the benefits.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.unit", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitUnit" + } + ], + "strength": "example", + "description": "Unit covered/serviced - individual or family.", + "valueSet": "http://hl7.org/fhir/ValueSet/benefit-unit" + } + }, + { + "id": "ExplanationOfBenefit.benefitBalance.term", + "path": "ExplanationOfBenefit.benefitBalance.term", + "short": "Annual or lifetime", + "definition": "The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.", + "requirements": "Needed for the understanding of the benefits.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.term", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitTerm" + } + ], + "strength": "example", + "description": "Coverage unit - annual, lifetime.", + "valueSet": "http://hl7.org/fhir/ValueSet/benefit-term" + } + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial", + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-explicit-type-name", + "valueString": "Benefit" + } + ], + "path": "ExplanationOfBenefit.benefitBalance.financial", + "short": "Benefit Summary", + "definition": "Benefits Used to date.", + "min": 0, + "max": "*", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.financial", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial.id", + "path": "ExplanationOfBenefit.benefitBalance.financial.id", + "representation": [ + "xmlAttr" + ], + "short": "Unique id for inter-element referencing", + "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + "min": 0, + "max": "1", + "base": { + "path": "Element.id", + "min": 0, + "max": "1" + }, + "type": [ + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type", + "valueUrl": "string" + } + ], + "code": "http://hl7.org/fhirpath/System.String" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial.extension", + "path": "ExplanationOfBenefit.benefitBalance.financial.extension", + "short": "Additional content defined by implementations", + "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "alias": [ + "extensions", + "user content" + ], + "min": 0, + "max": "*", + "base": { + "path": "Element.extension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": false, + "isSummary": false, + "mapping": [ + { + "identity": "rim", + "map": "n/a" + } + ] + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial.modifierExtension", + "path": "ExplanationOfBenefit.benefitBalance.financial.modifierExtension", + "short": "Extensions that cannot be ignored even if unrecognized", + "definition": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.", + "requirements": "Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://hl7.org/fhir/R4/extensibility.html#modifierExtension).", + "alias": [ + "extensions", + "user content", + "modifiers" + ], + "min": 0, + "max": "*", + "base": { + "path": "BackboneElement.modifierExtension", + "min": 0, + "max": "*" + }, + "type": [ + { + "code": "Extension" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "ext-1", + "severity": "error", + "human": "Must have either extensions or value[x], not both", + "expression": "extension.exists() != value.exists()", + "xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), \"value\")])", + "source": "http://hl7.org/fhir/StructureDefinition/Extension" + } + ], + "isModifier": true, + "isModifierReason": "Modifier extensions are expected to modify the meaning or interpretation of the element that contains them", + "isSummary": true, + "mapping": [ + { + "identity": "rim", + "map": "N/A" + } + ] + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial.type", + "path": "ExplanationOfBenefit.benefitBalance.financial.type", + "short": "Benefit classification", + "definition": "Classification of benefit being provided.", + "comment": "For example: deductible, visits, benefit amount.", + "requirements": "Needed to convey the nature of the benefit.", + "min": 1, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.financial.type", + "min": 1, + "max": "1" + }, + "type": [ + { + "code": "CodeableConcept" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false, + "binding": { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName", + "valueString": "BenefitType" + } + ], + "strength": "example", + "description": "Deductable, visits, co-pay, etc.", + "valueSet": "http://hl7.org/fhir/ValueSet/benefit-type" + } + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial.allowed[x]", + "path": "ExplanationOfBenefit.benefitBalance.financial.allowed[x]", + "short": "Benefits allowed", + "definition": "The quantity of the benefit which is permitted under the coverage.", + "requirements": "Needed to convey the benefits offered under the coverage.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.financial.allowed[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "unsignedInt" + }, + { + "code": "string" + }, + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + }, + { + "id": "ExplanationOfBenefit.benefitBalance.financial.used[x]", + "path": "ExplanationOfBenefit.benefitBalance.financial.used[x]", + "short": "Benefits used", + "definition": "The quantity of the benefit which have been consumed to date.", + "requirements": "Needed to convey the benefits consumed to date.", + "min": 0, + "max": "1", + "base": { + "path": "ExplanationOfBenefit.benefitBalance.financial.used[x]", + "min": 0, + "max": "1" + }, + "type": [ + { + "code": "unsignedInt" + }, + { + "code": "Money" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "isModifier": false, + "isSummary": false + } + ] + }, + "differential": { + "element": [ + { + "id": "ExplanationOfBenefit", + "path": "ExplanationOfBenefit", + "constraint": [ + { + "key": "dom-2", + "severity": "error", + "human": "If the resource is contained in another resource, it SHALL NOT contain nested Resources", + "expression": "contained.contained.empty()", + "xpath": "not(parent::f:contained and f:contained)", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "dom-3", + "severity": "error", + "human": "If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource", + "expression": "contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()", + "xpath": "not(exists(for $id in f:contained/*/f:id/@value return $contained[not(parent::*/descendant::f:reference/@value=concat('#', $contained/*/id/@value) or descendant::f:reference[@value='#'])]))", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "dom-4", + "severity": "error", + "human": "If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated", + "expression": "contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()", + "xpath": "not(exists(f:contained/*/f:meta/f:versionId)) and not(exists(f:contained/*/f:meta/f:lastUpdated))", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "dom-5", + "severity": "error", + "human": "If a resource is contained in another resource, it SHALL NOT have a security label", + "expression": "contained.meta.security.empty()", + "xpath": "not(exists(f:contained/*/f:meta/f:security))", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice", + "valueBoolean": true + }, + { + "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bestpractice-explanation", + "valueMarkdown": "When a resource has no narrative, only systems that fully understand the data can display the resource to a human safely. Including a human readable representation in the resource makes for a much more robust eco-system and cheaper handling of resources by intermediary systems. Some ecosystems restrict distribution of resources to only those systems that do fully understand the resources, and as a consequence implementers may believe that the narrative is superfluous. However experience shows that such eco-systems often open up to new participants over time." + } + ], + "key": "dom-6", + "severity": "warning", + "human": "A resource should have narrative for robust management", + "expression": "text.`div`.exists()", + "xpath": "exists(f:text/h:div)", + "source": "http://hl7.org/fhir/StructureDefinition/DomainResource" + }, + { + "key": "EOB-institutional-item-or-header-adjudication", + "severity": "error", + "human": "Institutional EOB: Should have adjudication at the item or header level, but not both", + "expression": "(adjudication.exists() != item.adjudication.exists())", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional" + }, + { + "key": "adjudication-has-amount-type-slice", + "severity": "error", + "human": "If Adjudication is present, it must have at least one adjudicationamounttype slice", + "expression": "adjudication.exists() implies (adjudication.where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional" + } + ] + }, + { + "id": "ExplanationOfBenefit.type", + "path": "ExplanationOfBenefit.type", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://terminology.hl7.org/CodeSystem/claim-type", + "code": "institutional" + } + ] + } + }, + { + "id": "ExplanationOfBenefit.created", + "path": "ExplanationOfBenefit.created", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.provider", + "path": "ExplanationOfBenefit.provider", + "type": [ + { + "code": "Reference", + "targetProfile": [ + "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization" + ] + } + ] + }, + { + "id": "ExplanationOfBenefit.careTeam", + "path": "ExplanationOfBenefit.careTeam", + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + }, + { + "key": "EOB-inst-careTeam-practitioner", + "severity": "error", + "human": "Institutional EOB: Careteam roles refer to a practitioner", + "expression": "(\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists() implies\nrole.where(coding.where(code in ('attending' | 'primary' | 'referring' | 'supervising')).exists()).exists().provider.all(resolve() is Practitioner)\n)", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional" + }, + { + "key": "EOB-inst-careTeam-organization", + "severity": "error", + "human": "Institutional EOB: Careteam roles refer to an organization", + "expression": "(\nrole.where(coding.where(code in ('performing' )).exists()).exists() implies\nrole.where(coding.where(code in ('performing' )).exists()).exists().provider.all(resolve() is Organization)\n)", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional" + }, + { + "key": "EOB-careteam-qualification", + "severity": "error", + "human": "Care Team Performing physician's qualifications are from US-Core-Provider-Specialty Value Set", + "expression": "(\nrole.where(coding.where(code in ('performing' )).exists()).exists() implies\nrole.where(coding.where(code in ('performing' )).exists()).exists().qualification.memberOf('http://hl7.org/fhir/us/core/ValueSet/us-core-provider-specialty')\n)", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional" + } + ] + }, + { + "id": "ExplanationOfBenefit.careTeam.role", + "path": "ExplanationOfBenefit.careTeam.role", + "min": 1, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimInstitutionalCareTeamRole" + } + }, + { + "id": "ExplanationOfBenefit.careTeam.qualification", + "path": "ExplanationOfBenefit.careTeam.qualification", + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/core/ValueSet/us-core-provider-specialty" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo", + "path": "ExplanationOfBenefit.supportingInfo", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on $this pattern", + "ordered": false, + "rules": "open" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "billingnetworkcontractingstatus", + "comment": "Indicates that the Billing Provider has a contract with the Plan (regardless of the network) as of the effective date of service or admission. (101)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "billingnetworkcontractingstatus" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:billingnetworkcontractingstatus.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerProviderContractingStatus" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "clmrecvddate", + "comment": "The date the claim was received by the payer (88)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "clmrecvddate" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:clmrecvddate.timing[x]", + "path": "ExplanationOfBenefit.supportingInfo.timing[x]", + "min": 1, + "type": [ + { + "code": "date" + } + ], + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "typeofbill", + "comment": "UB04 (Form Locator 4) type of bill code provides specific information for payer purposes. The first digit of the three-digit number denotes the type of institution, the second digit classifies the type of care being billed, and the third digit identifies the frequency of the bill for a specific course of treatment or inpatient confinement. (17)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "typeofbill" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:typeofbill.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCTypeOfBill" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "pointoforigin", + "comment": "Identifies the place where the patient was identified as needing admission to an institution. This is a two position code mapped from the standard values for the UB-04 Source of Admission code (FL-15). (13)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "pointoforigin" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:pointoforigin.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPointOfOriginForAdmissionOrVisit" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "admtype", + "comment": "Priority of the admission. Information located on (UB04 Form Locator 14). For example, an admission type of elective indicates that the patient's condition permitted time for medical services to be scheduled. (14)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "admtype" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:admtype.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPriorityTypeOfAdmissionOrVisit" + } + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status", + "path": "ExplanationOfBenefit.supportingInfo", + "sliceName": "discharge-status", + "comment": "Patient’s status as of the discharge date for a facility stay. Information located on UB04. (Form Locator 17). (117)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.category", + "path": "ExplanationOfBenefit.supportingInfo.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", + "code": "discharge-status" + } + ] + }, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.supportingInfo:discharge-status.code", + "path": "ExplanationOfBenefit.supportingInfo.code", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCPatientDischargeStatus" + } + }, + { + "id": "ExplanationOfBenefit.diagnosis", + "path": "ExplanationOfBenefit.diagnosis", + "comment": "Diagnosis codes describe an individual's disease or medical condition. (6, 7, 8, 21, 22, 23, 30)", + "min": 1 + }, + { + "id": "ExplanationOfBenefit.diagnosis.sequence", + "path": "ExplanationOfBenefit.diagnosis.sequence", + "comment": "Diagnosis.sequence values do not necessarily indiate any order in which the diagnosis was reported or identified. client app implementations should not assign any significance to the sequence values. client app implementations should use the values of diagnosis.type to identify primary, secondary, etc." + }, + { + "id": "ExplanationOfBenefit.diagnosis.diagnosis[x]", + "path": "ExplanationOfBenefit.diagnosis.diagnosis[x]", + "type": [ + { + "code": "CodeableConcept" + } + ], + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/CDCICD910CMDiagnosisCodes" + } + }, + { + "id": "ExplanationOfBenefit.diagnosis.type", + "path": "ExplanationOfBenefit.diagnosis.type", + "comment": "Indicates if the outpatient institutional diagnosis is principal, other, an external cause of injury or a patient reason for visit. (21, 22, 23)", + "min": 1, + "max": "1", + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBClaimOutpatientInstitutionalDiagnosisType" + } + }, + { + "id": "ExplanationOfBenefit.item", + "path": "ExplanationOfBenefit.item", + "comment": "Put the comment here for item", + "constraint": [ + { + "key": "adjudication-has-amount-type-slice", + "severity": "error", + "human": "If Adjudication is present, it must have at least one adjudicationamounttype slice", + "expression": "adjudication.exists() implies (adjudication.where(category.memberOf('http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication')).exists())", + "source": "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Outpatient-Institutional" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.revenue", + "path": "ExplanationOfBenefit.item.revenue", + "comment": "Code used on the UB-04 (Form Locator 42) to identify a specific accommodation, ancillary service, or billing calculation related to the service being billed (86)", + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AHANUBCRevenueCodes" + } + }, + { + "id": "ExplanationOfBenefit.item.productOrService", + "path": "ExplanationOfBenefit.item.productOrService", + "comment": "Medical procedure a patient received from a health care provider. Current coding methods include: CPT-4 and HCFA Common Procedure Coding System Level II - (HCPCSII). (40)", + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSProcedureCodes" + } + }, + { + "id": "ExplanationOfBenefit.item.modifier", + "path": "ExplanationOfBenefit.item.modifier", + "comment": "Modifier(s) for the procedure represented on this line. Identifies special circumstances related to the performance of the service. (41)", + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/AMACPTCMSHCPCSModifiers" + } + }, + { + "id": "ExplanationOfBenefit.item.serviced[x]", + "path": "ExplanationOfBenefit.item.serviced[x]", + "slicing": { + "discriminator": [ + { + "type": "type", + "path": "$this" + } + ], + "ordered": false, + "rules": "open" + }, + "type": [ + { + "code": "date" + } + ] + }, + { + "id": "ExplanationOfBenefit.item.servicedDate", + "path": "ExplanationOfBenefit.item.servicedDate", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.item.quantity", + "path": "ExplanationOfBenefit.item.quantity", + "comment": "The quantity of units, times, days, visits, services, or treatments for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (42)", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.item.adjudication", + "path": "ExplanationOfBenefit.item.adjudication", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on value pattern", + "ordered": false, + "rules": "closed" + }, + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.item.adjudication.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype", + "path": "ExplanationOfBenefit.item.adjudication", + "sliceName": "adjudicationamounttype", + "comment": "Describes the various amount fields used when payers receive and adjudicate a claim. (187)", + "min": 0, + "max": "*", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:adjudicationamounttype.amount", + "path": "ExplanationOfBenefit.item.adjudication.amount", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason", + "path": "ExplanationOfBenefit.item.adjudication", + "sliceName": "denialreason", + "comment": "Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)", + "min": 0, + "max": "*", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator", + "code": "denialreason" + } + ] + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:denialreason.reason", + "path": "ExplanationOfBenefit.item.adjudication.reason", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes" + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits", + "path": "ExplanationOfBenefit.item.adjudication", + "sliceName": "allowedunits", + "comment": "The quantity of units, times, days, visits, services, or treatments allowed for the service described by the HCPCS code, revenue code or procedure code, submitted by the provider. (149)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.category", + "path": "ExplanationOfBenefit.item.adjudication.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator", + "code": "allowedunits" + } + ] + } + }, + { + "id": "ExplanationOfBenefit.item.adjudication:allowedunits.value", + "path": "ExplanationOfBenefit.item.adjudication.value", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.adjudication", + "path": "ExplanationOfBenefit.adjudication", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on value pattern", + "ordered": false, + "rules": "closed" + }, + "type": [ + { + "code": "BackboneElement" + } + ], + "constraint": [ + { + "key": "ele-1", + "severity": "error", + "human": "All FHIR elements must have a @value or children", + "expression": "hasValue() or (children().count() > id.count())", + "xpath": "@value|f:*|h:div", + "source": "http://hl7.org/fhir/StructureDefinition/Element" + } + ], + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.adjudication.category", + "path": "ExplanationOfBenefit.adjudication.category", + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudicationCategoryDiscriminator" + } + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype", + "path": "ExplanationOfBenefit.adjudication", + "sliceName": "adjudicationamounttype", + "comment": "Describes the various amount fields used when payers receive and adjudicate a claim. (187)", + "min": 0, + "max": "*", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.category", + "path": "ExplanationOfBenefit.adjudication.category", + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication" + } + }, + { + "id": "ExplanationOfBenefit.adjudication:adjudicationamounttype.amount", + "path": "ExplanationOfBenefit.adjudication.amount", + "min": 1, + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason", + "path": "ExplanationOfBenefit.adjudication", + "sliceName": "denialreason", + "comment": "Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)", + "min": 0, + "max": "*", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.category", + "path": "ExplanationOfBenefit.adjudication.category", + "patternCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator", + "code": "denialreason" + } + ] + } + }, + { + "id": "ExplanationOfBenefit.adjudication:denialreason.reason", + "path": "ExplanationOfBenefit.adjudication.reason", + "comment": "Reason codes used to interpret the Non-Covered Amount that are provided to the Provider. (92)", + "min": 1, + "mustSupport": true, + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/X12ClaimAdjustmentReasonCodesCMSRemittanceAdviceRemarkCodes" + } + }, + { + "id": "ExplanationOfBenefit.total", + "path": "ExplanationOfBenefit.total", + "slicing": { + "discriminator": [ + { + "type": "pattern", + "path": "category" + } + ], + "description": "Slice based on value pattern", + "ordered": false, + "rules": "open" + } + }, + { + "id": "ExplanationOfBenefit.total.category", + "path": "ExplanationOfBenefit.total.category", + "mustSupport": true, + "binding": { + "strength": "extensible", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBTotalCategoryDiscriminator" + } + }, + { + "id": "ExplanationOfBenefit.total.amount", + "path": "ExplanationOfBenefit.total.amount", + "comment": "Total amount for each category (i.e., submitted, allowed, etc.) (148)" + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype", + "path": "ExplanationOfBenefit.total", + "sliceName": "adjudicationamounttype", + "comment": "Describes the various amount fields used when payers receive and adjudicate a claim. (187)", + "min": 1, + "max": "*", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.category", + "path": "ExplanationOfBenefit.total.category", + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBAdjudication" + } + }, + { + "id": "ExplanationOfBenefit.total:adjudicationamounttype.amount", + "path": "ExplanationOfBenefit.total.amount", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork", + "path": "ExplanationOfBenefit.total", + "sliceName": "inoutnetwork", + "comment": "Indicates the in network or out of network payment status of the claim. (142)", + "min": 0, + "max": "1", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.total:inoutnetwork.category", + "path": "ExplanationOfBenefit.total.category", + "binding": { + "strength": "required", + "valueSet": "http://hl7.org/fhir/us/carin-bb/ValueSet/C4BBPayerBenefitPaymentStatus" + } + }, + { + "id": "ExplanationOfBenefit.payment.date", + "path": "ExplanationOfBenefit.payment.date", + "mustSupport": true + }, + { + "id": "ExplanationOfBenefit.processNote.text", + "path": "ExplanationOfBenefit.processNote.text", + "mustSupport": true + } + ] + } +} \ No newline at end of file diff --git a/conformance/fhir-ig-carin-bb/src/test/java/com/ibm/fhir/ig/carin/bb/test/ExplanationOfBenefitTest.java b/conformance/fhir-ig-carin-bb/src/test/java/com/ibm/fhir/ig/carin/bb/test/ExplanationOfBenefitTest.java new file mode 100644 index 00000000000..7aeb49294d0 --- /dev/null +++ b/conformance/fhir-ig-carin-bb/src/test/java/com/ibm/fhir/ig/carin/bb/test/ExplanationOfBenefitTest.java @@ -0,0 +1,57 @@ +/* + * (C) Copyright IBM Corp. 2021 + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.ibm.fhir.ig.carin.bb.test; + +import java.util.ArrayList; +import java.util.List; + +import org.testng.Assert; +import org.testng.annotations.Test; + +import com.ibm.fhir.model.resource.ExplanationOfBenefit; +import com.ibm.fhir.model.resource.ExplanationOfBenefit.Item; +import com.ibm.fhir.model.resource.ExplanationOfBenefit.Item.Adjudication; +import com.ibm.fhir.model.resource.OperationOutcome.Issue; +import com.ibm.fhir.model.test.TestUtil; +import com.ibm.fhir.model.type.Code; +import com.ibm.fhir.model.type.CodeableConcept; +import com.ibm.fhir.model.type.Coding; +import com.ibm.fhir.model.type.Decimal; +import com.ibm.fhir.model.type.Uri; +import com.ibm.fhir.validation.FHIRValidator; +import com.ibm.fhir.validation.util.FHIRValidationUtil; + +public class ExplanationOfBenefitTest { + @Test + public void testExplanationOfBenefit() throws Exception { + ExplanationOfBenefit explanationOfBenefit = TestUtil.readExampleResource("json/profiles/fhir-ig-carin-bb/ExplanationOfBenefit-InpatientEOBExample1.json"); + List issues = FHIRValidator.validator().validate(explanationOfBenefit); + Assert.assertFalse(FHIRValidationUtil.hasErrors(issues)); + + // add an 'allowedunits' adjudication slice to the first item + List items = new ArrayList<>(explanationOfBenefit.getItem()); + Item item = items.get(0); + item = item.toBuilder() + .adjudication(Adjudication.builder() + .category(CodeableConcept.builder() + .coding(Coding.builder() + .system(Uri.of("http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBAdjudicationDiscriminator")) + .code(Code.of("allowedunits")) + .build()) + .build()) + .value(Decimal.of(1)) + .build()) + .build(); + items.set(0, item); + explanationOfBenefit = explanationOfBenefit + .toBuilder() + .item(items) + .build(); + issues = FHIRValidator.validator().validate(explanationOfBenefit); + Assert.assertFalse(FHIRValidationUtil.hasErrors(issues)); + } +} diff --git a/conformance/fhir-ig-davinci-hrex/pom.xml b/conformance/fhir-ig-davinci-hrex/pom.xml index 6cbbcda425d..8be74f0b33c 100644 --- a/conformance/fhir-ig-davinci-hrex/pom.xml +++ b/conformance/fhir-ig-davinci-hrex/pom.xml @@ -5,7 +5,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../../fhir-parent fhir-ig-davinci-hrex diff --git a/conformance/fhir-ig-davinci-pdex-formulary/pom.xml b/conformance/fhir-ig-davinci-pdex-formulary/pom.xml index 9354bd00b6f..ad19e07195c 100644 --- a/conformance/fhir-ig-davinci-pdex-formulary/pom.xml +++ b/conformance/fhir-ig-davinci-pdex-formulary/pom.xml @@ -5,7 +5,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../../fhir-parent fhir-ig-davinci-pdex-formulary diff --git a/conformance/fhir-ig-davinci-pdex-formulary/src/test/java/com/ibm/fhir/ig/davinci/pdex/formulary/tool/ResourceProcessor.java b/conformance/fhir-ig-davinci-pdex-formulary/src/test/java/com/ibm/fhir/ig/davinci/pdex/formulary/tool/ResourceProcessor.java index e41d6a4d3b1..c0c3d40303f 100644 --- a/conformance/fhir-ig-davinci-pdex-formulary/src/test/java/com/ibm/fhir/ig/davinci/pdex/formulary/tool/ResourceProcessor.java +++ b/conformance/fhir-ig-davinci-pdex-formulary/src/test/java/com/ibm/fhir/ig/davinci/pdex/formulary/tool/ResourceProcessor.java @@ -11,14 +11,14 @@ import java.io.FileReader; import java.io.FileWriter; -import javax.json.Json; -import javax.json.JsonBuilderFactory; -import javax.json.JsonObject; -import javax.json.JsonObjectBuilder; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.JsonWriter; -import javax.json.JsonWriterFactory; +import jakarta.json.Json; +import jakarta.json.JsonBuilderFactory; +import jakarta.json.JsonObject; +import jakarta.json.JsonObjectBuilder; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.JsonWriter; +import jakarta.json.JsonWriterFactory; /** * This class fixes the following issues with the packaged DaVinci PDEX Formulary artifacts: diff --git a/conformance/fhir-ig-davinci-pdex-plan-net/pom.xml b/conformance/fhir-ig-davinci-pdex-plan-net/pom.xml index d3631cbac67..64228e78c88 100644 --- a/conformance/fhir-ig-davinci-pdex-plan-net/pom.xml +++ b/conformance/fhir-ig-davinci-pdex-plan-net/pom.xml @@ -5,7 +5,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../../fhir-parent fhir-ig-davinci-pdex-plan-net diff --git a/conformance/fhir-ig-davinci-pdex-plan-net/src/test/java/com/ibm/fhir/ig/davinci/plannet/tool/ResourceProcessor.java b/conformance/fhir-ig-davinci-pdex-plan-net/src/test/java/com/ibm/fhir/ig/davinci/plannet/tool/ResourceProcessor.java index 6a19239d575..881336b0260 100644 --- a/conformance/fhir-ig-davinci-pdex-plan-net/src/test/java/com/ibm/fhir/ig/davinci/plannet/tool/ResourceProcessor.java +++ b/conformance/fhir-ig-davinci-pdex-plan-net/src/test/java/com/ibm/fhir/ig/davinci/plannet/tool/ResourceProcessor.java @@ -10,14 +10,14 @@ import java.io.FileReader; import java.io.FileWriter; -import javax.json.Json; -import javax.json.JsonBuilderFactory; -import javax.json.JsonObject; -import javax.json.JsonObjectBuilder; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.JsonWriter; -import javax.json.JsonWriterFactory; +import jakarta.json.Json; +import jakarta.json.JsonBuilderFactory; +import jakarta.json.JsonObject; +import jakarta.json.JsonObjectBuilder; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.JsonWriter; +import jakarta.json.JsonWriterFactory; /** * This class fixes the following issues with the packaged DaVinci PDEX Plan Net artifacts: diff --git a/conformance/fhir-ig-davinci-pdex/pom.xml b/conformance/fhir-ig-davinci-pdex/pom.xml index 4e3c3f57ebf..71ff5059813 100644 --- a/conformance/fhir-ig-davinci-pdex/pom.xml +++ b/conformance/fhir-ig-davinci-pdex/pom.xml @@ -5,7 +5,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../../fhir-parent fhir-ig-davinci-pdex diff --git a/conformance/fhir-ig-davinci-pdex/src/test/java/com/ibm/fhir/ig/davinci/pdex/tool/SearchParameterAugmenter.java b/conformance/fhir-ig-davinci-pdex/src/test/java/com/ibm/fhir/ig/davinci/pdex/tool/SearchParameterAugmenter.java index 95380d243f5..24ac088aa3c 100644 --- a/conformance/fhir-ig-davinci-pdex/src/test/java/com/ibm/fhir/ig/davinci/pdex/tool/SearchParameterAugmenter.java +++ b/conformance/fhir-ig-davinci-pdex/src/test/java/com/ibm/fhir/ig/davinci/pdex/tool/SearchParameterAugmenter.java @@ -15,6 +15,7 @@ import java.util.Set; import java.util.stream.Collectors; +import com.ibm.fhir.core.FHIRConstants; import com.ibm.fhir.model.format.Format; import com.ibm.fhir.model.generator.FHIRGenerator; import com.ibm.fhir.model.resource.SearchParameter; @@ -35,7 +36,7 @@ * to search parameters which always reference code values with a particular system */ public class SearchParameterAugmenter { - private static final String IMPLICIT_SYSTEM_EXT_URL = "http://ibm.com/fhir/extension/implicit-system"; + private static final String IMPLICIT_SYSTEM_EXT_URL = FHIRConstants.EXT_BASE + "implicit-system"; private static final FHIRGenerator generator = FHIRGenerator.generator(Format.JSON, false); public static void main(String[] args) throws Exception { diff --git a/conformance/fhir-ig-mcode/pom.xml b/conformance/fhir-ig-mcode/pom.xml index 5ad7237f447..9e24e14c83b 100644 --- a/conformance/fhir-ig-mcode/pom.xml +++ b/conformance/fhir-ig-mcode/pom.xml @@ -5,7 +5,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../../fhir-parent fhir-ig-mcode diff --git a/conformance/fhir-ig-spl/pom.xml b/conformance/fhir-ig-spl/pom.xml index 92e8234a767..61b6f3a4498 100644 --- a/conformance/fhir-ig-spl/pom.xml +++ b/conformance/fhir-ig-spl/pom.xml @@ -5,7 +5,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../../fhir-parent diff --git a/conformance/fhir-ig-us-core/pom.xml b/conformance/fhir-ig-us-core/pom.xml index c7f9f721d27..bf894044afd 100644 --- a/conformance/fhir-ig-us-core/pom.xml +++ b/conformance/fhir-ig-us-core/pom.xml @@ -5,7 +5,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../../fhir-parent fhir-ig-us-core diff --git a/conformance/fhir-ig-us-core/src/test/java/com/ibm/fhir/ig/us/core/tool/ResourceProcessor.java b/conformance/fhir-ig-us-core/src/test/java/com/ibm/fhir/ig/us/core/tool/ResourceProcessor.java index d636e57db21..1d28173a008 100644 --- a/conformance/fhir-ig-us-core/src/test/java/com/ibm/fhir/ig/us/core/tool/ResourceProcessor.java +++ b/conformance/fhir-ig-us-core/src/test/java/com/ibm/fhir/ig/us/core/tool/ResourceProcessor.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2020 + * (C) Copyright IBM Corp. 2020, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -11,14 +11,14 @@ import java.io.FileReader; import java.io.FileWriter; -import javax.json.Json; -import javax.json.JsonBuilderFactory; -import javax.json.JsonObject; -import javax.json.JsonObjectBuilder; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.JsonWriter; -import javax.json.JsonWriterFactory; +import jakarta.json.Json; +import jakarta.json.JsonBuilderFactory; +import jakarta.json.JsonObject; +import jakarta.json.JsonObjectBuilder; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.JsonWriter; +import jakarta.json.JsonWriterFactory; /** * This class fixes two issues with the packaged US Core artifacts: diff --git a/conformance/fhir-ig-us-core/src/test/java/com/ibm/fhir/ig/us/core/tool/SearchParameterAugmenter.java b/conformance/fhir-ig-us-core/src/test/java/com/ibm/fhir/ig/us/core/tool/SearchParameterAugmenter.java index be5debb539a..bcb42e1ce45 100644 --- a/conformance/fhir-ig-us-core/src/test/java/com/ibm/fhir/ig/us/core/tool/SearchParameterAugmenter.java +++ b/conformance/fhir-ig-us-core/src/test/java/com/ibm/fhir/ig/us/core/tool/SearchParameterAugmenter.java @@ -15,6 +15,7 @@ import java.util.Set; import java.util.stream.Collectors; +import com.ibm.fhir.core.FHIRConstants; import com.ibm.fhir.model.format.Format; import com.ibm.fhir.model.generator.FHIRGenerator; import com.ibm.fhir.model.resource.SearchParameter; @@ -35,7 +36,7 @@ * to search parameters which always reference code values with a particular system */ public class SearchParameterAugmenter { - private static final String IMPLICIT_SYSTEM_EXT_URL = "http://ibm.com/fhir/extension/implicit-system"; + private static final String IMPLICIT_SYSTEM_EXT_URL = FHIRConstants.EXT_BASE + "implicit-system"; private static final FHIRGenerator generator = FHIRGenerator.generator(Format.JSON, false); public static void main(String[] args) throws Exception { diff --git a/demo/.gitignore b/demo/.gitignore index 97eefa6cf1f..65ca5bc0fd2 100644 --- a/demo/.gitignore +++ b/demo/.gitignore @@ -1 +1,3 @@ /postgres/db/data/ +/bulkdata/out/* +!/bulkdata/out/.empty diff --git a/demo/bulkdata/in/Patient_1.ndjson b/demo/bulkdata/in/Patient_1.ndjson new file mode 100644 index 00000000000..2d732157cdd --- /dev/null +++ b/demo/bulkdata/in/Patient_1.ndjson @@ -0,0 +1 @@ +{"resourceType":"Patient","id":"Patient1","meta":{"versionId":"1","lastUpdated":"2021-06-04T05:18:29.570489Z","tag":[{"code":"test"},{"code":"test2"}]},"language":"en","identifier":[{"use":"usual"}],"active":true} diff --git a/fhir-cli/src/test/java/.empty b/demo/bulkdata/out/.empty similarity index 100% rename from fhir-cli/src/test/java/.empty rename to demo/bulkdata/out/.empty diff --git a/demo/docker-compose.yml b/demo/docker-compose.yml index 1752eba90cc..7764e0c0a6f 100644 --- a/demo/docker-compose.yml +++ b/demo/docker-compose.yml @@ -54,6 +54,9 @@ services: source: ./fhir/openapi.json target: /opt/ol/wlp/usr/servers/defaultServer/apps/expanded/fhir-openapi.war/META-INF/openapi.json read_only: true + - type: bind + source: ./bulkdata + target: /output/bulkdata command: bash -c " java -jar /opt/ibm-fhir-server/tools/fhir-persistence-schema-*-cli.jar --db-type postgresql --prop db.host=postgres --prop db.port=5432 --prop db.database=fhirdb --prop user=fhiradmin --prop password=change-password diff --git a/demo/fhir/config/default/fhir-server-config.json b/demo/fhir/config/default/fhir-server-config.json index 498bb0208fb..59cbd55992e 100644 --- a/demo/fhir/config/default/fhir-server-config.json +++ b/demo/fhir/config/default/fhir-server-config.json @@ -178,32 +178,19 @@ "truststorePassword": "change-password", "trustAll": true }, - "cos" : { - "partUploadTriggerSizeMB": 10, - "objectSizeThresholdMB": 200, - "objectResourceCountThreshold": 200000, - "useServerTruststore": true - }, - "pageSize": 100, - "batchIdEncryptionKey": "change-password", - "maxPartitions": 3, - "maxInputs": 5 + "defaultImportProvider": "in", + "defaultExportProvider": "out" }, "storageProviders": { - "default" : { - "type": "ibm-cos", - "bucketName": "${COS_BUCKET}", - "location": "${COS_LOCATION}", - "endpointInternal": "${COS_ENDPOINT_INTERNAL}", - "endpointExternal": "${COS_ENDPOINT_EXTERNAL}", - "auth" : { - "type": "hmac", - "accessKeyId": "${COS_ACCESS_KEY}", - "secretAccessKey": "${COS_SECRET_KEY}" - }, - "__exportPublic": false, - "__disableOperationOutcomes": true, - "presigned": true + "in" : { + "type": "file", + "fileBase": "/output/bulkdata/in", + "duplicationCheck": false, + "validateResources": false + }, + "out" : { + "type": "file", + "fileBase": "/output/bulkdata/out" } } } diff --git a/demo/fhir/configDropins/overrides/datasource.xml b/demo/fhir/configDropins/overrides/datasources.xml similarity index 53% rename from demo/fhir/configDropins/overrides/datasource.xml rename to demo/fhir/configDropins/overrides/datasources.xml index 576cfbf48a5..9fbb31d6402 100644 --- a/demo/fhir/configDropins/overrides/datasource.xml +++ b/demo/fhir/configDropins/overrides/datasources.xml @@ -14,4 +14,18 @@ /> + + + + + + diff --git a/demo/fhir/userlib/fhir-ig-us-core-4.7.1.jar b/demo/fhir/userlib/fhir-ig-us-core-4.7.1.jar deleted file mode 100644 index ff18566fd08..00000000000 Binary files a/demo/fhir/userlib/fhir-ig-us-core-4.7.1.jar and /dev/null differ diff --git a/demo/postgres/resources/docker-entrypoint.sh b/demo/postgres/resources/docker-entrypoint.sh index eeeb5b8bae4..73e0af642a2 100644 --- a/demo/postgres/resources/docker-entrypoint.sh +++ b/demo/postgres/resources/docker-entrypoint.sh @@ -20,9 +20,9 @@ then sed -ri "s!^#?(listen_addresses)\s*=\s*\S+.*!\1 = '*'!" /db/data/postgresql.conf # Configuration - sed -i -e "s/^max_connections = 100.*$/max_connections = 100/" \ - -e "s/^max_prepared_transactions = 100.*$/max_prepared_transactions = 100/" \ - -e "s/^max_locks_per_transaction = .*$/max_locks_per_transaction = 128/" \ + sed -i -e "s/^max_connections = .*$/max_connections = 100/" \ + -e "s/^#max_prepared_transactions = .*$/max_prepared_transactions = 100/" \ + -e "s/^#max_locks_per_transaction = .*$/max_locks_per_transaction = 128/" \ -e "s/^shared_buffers =.*$/shared_buffers = 4GB/" \ -e "s/^#effective_cache_size = 128MB.*$/effective_cache_size = 2GB/" \ -e "s/^#work_mem = 1MB.*$/work_mem = 1MB/" \ diff --git a/docs/src/pages/Conformance.md b/docs/src/pages/Conformance.md index a12fac10db4..3b0a69c7d80 100644 --- a/docs/src/pages/Conformance.md +++ b/docs/src/pages/Conformance.md @@ -2,7 +2,7 @@ layout: post title: Conformance description: Notes on the Conformance of the IBM FHIR Server -date: 2021-05-19 +date: 2021-05-26 permalink: /conformance/ --- @@ -12,7 +12,7 @@ The IBM FHIR Server aims to be a conformant implementation of the HL7 FHIR speci ## Capability statement The HL7 FHIR specification defines [an interaction](https://www.hl7.org/fhir/R4/http.html#capabilities) for retrieving a machine-readable description of the server's capabilities via the `[base]/metadata` endpoint. The IBM FHIR Server implements this interaction and generates a `CapabilityStatement` resource based on the current server configuration. While the `CapabilityStatement` resource is ideal for certain uses, this markdown document provides a human-readable summary of important details, with a special focus on limitations of the current implementation and deviations from the specification. -The IBM FHIR Server supports only version 4.0.1 of the specification and ignores the optional MIME-type parameter `fhirVersion`. +The IBM FHIR Server supports only version 4.0.1 of the specification. ## FHIR HTTP API The HL7 FHIR specification is more than just a data format. It defines an [HTTP API](https://www.hl7.org/fhir/R4/http.html) for creating, reading, updating, deleting, and searching over FHIR resources. The IBM FHIR Server implements the full API for every resource defined in the specification, with the following exceptions: @@ -213,7 +213,7 @@ To ensure consistency of search results, clients are recommended to include the Finally, the server extends the specified capabilities with support for "exact match" semantics on fractional seconds. -Query parameter values without fractional seconds are handled as an implicit range. For example, a search like `Observatoin?date=2019-01-01T12:00:00Z` would return resources with the following effectiveDateTime values: +Query parameter values without fractional seconds are handled as an implicit range. For example, a search like `Observation?date=2019-01-01T12:00:00Z` would return resources with the following effectiveDateTime values: * 2019-01-01T12:00:00Z * 2019-01-01T12:00:00.1Z * 2019-01-01T12:00:00.999999Z diff --git a/docs/src/pages/blog/raspberrypi4howto.mdx b/docs/src/pages/blog/raspberrypi4howto.mdx index 2d3b4e73653..aadf0fd86d9 100644 --- a/docs/src/pages/blog/raspberrypi4howto.mdx +++ b/docs/src/pages/blog/raspberrypi4howto.mdx @@ -2,7 +2,7 @@ layout: post title: IBM FHIR Server on the Raspberry Pi 4 description: IBM FHIR Server on the Raspberry Pi 4 -date: 2019-10-08 09:59:05 -0400 +date: 2021-06-07 --- ![IBM FHIR Server on Raspberry Pi 4](https://ibm.github.io/FHIR/images/piOnFhir30.jpg) @@ -130,7 +130,6 @@ Some exceptions from negative tests may appear in the build log. As long as the [INFO] fhir-operation-document ............................ SUCCESS [ 1.074 s] [INFO] fhir-operation-healthcheck ......................... SUCCESS [ 0.547 s] [INFO] fhir-client ........................................ SUCCESS [ 12.460 s] -[INFO] fhir-cli ........................................... SUCCESS [ 12.682 s] [INFO] fhir-notification .................................. SUCCESS [ 0.971 s] [INFO] fhir-notification-kafka ............................ SUCCESS [ 0.769 s] [INFO] fhir-notification-websocket ........................ SUCCESS [ 0.931 s] diff --git a/docs/src/pages/guides/BringYourOwnPersistence.md b/docs/src/pages/guides/BringYourOwnPersistence.md index 3d496eac2c5..11ca0bff940 100644 --- a/docs/src/pages/guides/BringYourOwnPersistence.md +++ b/docs/src/pages/guides/BringYourOwnPersistence.md @@ -2,73 +2,81 @@ layout: post title: Bring your own Persistence Layer description: Learn how to build and test a persistence layer for the IBM FHIR Server -date: 2020-08-31 14:55:00 -0400 +date: 2021-06-01 permalink: /BringYourOwnPersistence/ --- ## Overview -The IBM FHIR Server ships with a JDBC persistence layer that works with IBM Db2, PostgreSQL and Apache Derby. -However, based on the modular design, its possible to add support for other relational databases and/or -plug in any other persistence layer. +The IBM FHIR Server is a modular Java implementation of the HL7 FHIR specification with a focus on performance and configurability. The IBM FHIR Server ships with a JDBC persistence layer that works with IBM Db2, PostgreSQL and Apache Derby. With this modular design, it's possible to add support for other relational databases and/or plug in any other persistence layer. + +This document outlines the interfaces that need to be implemented and the behaviors required for the related methods to work with the IBM FHIR Server. ### Interfaces -Persistence layer interfaces are defined in the `fhir-persistence` project. +Persistence layer interfaces are defined in the `fhir-persistence` module. + * [FHIRPersistence](https://github.com/IBM/FHIR/blob/main/fhir-persistence/src/main/java/com/ibm/fhir/persistence/FHIRPersistence.java) defines the contract between the REST layer and the persistence layer. * [FHIRPersistenceFactory](https://github.com/IBM/FHIR/blob/main/fhir-persistence/src/main/java/com/ibm/fhir/persistence/FHIRPersistenceFactory.java) is the interface for providing instances of FHIRPersistence to the server. -### Config -Which persistence layer is used by the server is determined by the `/fhirServer/persistence/factoryClassname` property in `fhir-server-config.json`. +### Configuration +Which persistence layer is used by the server is determined by the `/fhirServer/persistence/factoryClassname` property in `fhir-server-config.json`. There is more detail on the configuration in the [IBM FHIR Server's User Guide](https://ibm.github.io/FHIR/guides/FHIRServerUsersGuide#33-persistence-layer-configuration) -When the default `com.ibm.fhir.persistence.jdbc.FHIRPersistenceJDBCFactory` is used, the returned FHIRPersistenceJDBCImpl instance will look up a corresponding datasource, by JNDI name, using the combination of the tenant id and datastore id from the request context. Specifically, the connection strategy will use the `fhirServer/persistence//jndiName` property in the tenant config, or--if the property is omitted--it will construct the name via the following pattern: -``` -jdbc/fhir__[_ro] +When the default `com.ibm.fhir.persistence.jdbc.FHIRPersistenceJDBCFactory` is used, the returned FHIRPersistenceJDBCImpl instance will look up a corresponding datasource, by JNDI name, using the combination of the tenant id and datastore id from the request context. Specifically, the connection strategy will use the `fhirServer/persistence//jndiName` property in the tenant config, or -- if the property is omitted --it will construct the name via the following pattern: + +``` md +jdbc/fhir__[_ro] ``` +Note, the `_ro` postfix means the datasource is 'Read Only'. + ## Adding support for another relational database Adding a new relational database type is not for the faint of heart, but the IBM FHIR Server team is here to help! -To add support for an alternative relational database, there are multiple projects to consider: +To add support for an alternative relational database, there are multiple modules to consider: 1. `fhir-database-utils` 2. `fhir-persistence-schema` 3. `fhir-persistence-jdbc` -The `fhir-database-utils` project provides generic utilities for defining a PhysicalDataModel and applying it to a target database via the IDatabaseAdapter and IVersionHistoryService interfaces. Check out the `com.ibm.fhir.database.utils.db2` and `com.ibm.fhir.database.utils.derby` packages to understand how you might extend the framework with support for a new database type. +The `fhir-database-utils` module provides generic utilities for defining a PhysicalDataModel and applying it to a target database via the IDatabaseAdapter and IVersionHistoryService interfaces. Check out the `com.ibm.fhir.database.utils.db2`, `com.ibm.fhir.database.utils.postgres` and `com.ibm.fhir.database.utils.derby` packages to understand how you might extend the framework with support for a new database type. + +The `fhir-persistence-schema` module is used to programmatically construct DDL statements and execute them against a target database. This module uses the generic utilities in `fhir-database-utils` to deploy both an admin schema (used for tenant provisioning and schema versioning) and an application schema for the FHIR data. + +Presently, the `fhir-persistence-schema` and `fhir-persistence-jdbc` modules work with Postgres, Derby and Db2 databases, but it should be possible to either: -The `fhir-persistence-schema` project is used to programmatically construct DDL statements and execute them against a target database. This project uses the generic utilities in `fhir-persistence-utils` to deploy both an admin schema (used for tenant provisioning and schema versioning) and an application schema for the FHIR data. -Presently, this project is written for use with a Db2 database, but it should be possible to either: +1. Print the DDL and manually tweak it for your desired database; or +2. Add configuration to control which IDatabaseAdapter and IDatabaseTranslator are used. -A. Print the DDL and manually tweak it for your desired database; or -B. Add some kind of configuration to control which IDatabaseAdapter and IDatabaseTranslator are used. +Note, the Db2 implementation uses stored procedures, the Postgres implementation uses Functions, and the Derby implementation is JDBC. -Note that the Db2 implementation makes use of stored procedures whereas the derby implementation is pure JDBC. +Finally, the `fhir-persistence-jdbc` module provides the default implementation of the `FHIRPersistence` interface. -Finally, the `fhir-persistence-jdbc` project provides the default implementation of the `FHIRPersistence` interface. -The project makes heavy use of Data Access Objects (DAO) and Data Transfer Objects (DTO) to abstract the details of the database. Most of the code is common across database types, but there is a branch in `ResourceDAOImpl.insert` which corresponds to the differences between the IBM Db2 (stored procedure) and Apache Derby (pure JDBC) implementations. +The module makes heavy use of Data Access Objects (DAO) and Data Transfer Objects (DTO) to abstract the details of the database. Most of the code is common across database types, but there is a branch in `ResourceDAOImpl.insert` which corresponds to the differences between the IBM Db2/Postgres flavors and Apache Derby (pure JDBC) flavor of implementation. ## Building your own persistence layer Most FHIR projects are interoperability projects--the data already exists in some datastore. -Due to performance considerations and the complexities of the FHIR API (especially search), we generally recommend converting that data to FHIR and storing it in the FHIR server's database. However, in some cases, it might be better to configure the FHIR server to work directly with an existing datastore or APIs. -If you are using Maven, add the following dependencies to your persistence layer project (replacing the version variables with your desired version): -``` - - com.ibm.fhir - fhir-persistence - ${fhir.persistence.version} - - - com.ibm.fhir - fhir-persistence - ${fhir.persistence.version} - test-jar - test - - - com.ibm.fhir - fhir-examples - ${fhir.examples.version} - test - +Due to performance considerations and the complexities of the FHIR API (especially search), we generally recommend converting that data to FHIR and storing the binary representation in the IBM FHIR Server's database. However, in some cases, it might be better to configure the IBM FHIR Server to work directly with an existing datastore or APIs. + +If you are using Maven, add the following dependencies to your persistence layer module (replacing the version variables with your desired version): + +``` xml + + com.ibm.fhir + fhir-persistence + ${fhir.persistence.version} + + + com.ibm.fhir + fhir-persistence + ${fhir.persistence.version} + test-jar + test + + + com.ibm.fhir + fhir-examples + ${fhir.examples.version} + test + ``` You might also want to set up `fhir-persistence-jdbc` to use an example. @@ -89,6 +97,8 @@ If `SingleResourceResult.success` is set to true, the `SingleResourceResult.reso If `SingleResourceResult.success` is set to false, the `SingleResourceResult.outcome` should be an OperationOutcome with a list of one or more issues that prevented the success of the operation. +Note that a `generateResourceId` implementation is required to generate server-assigned resource ids. For performance reasons, recommend the use of `TimestampPrefixedUUID`. + #### Read Read requests include a FHIRPersistenceContext, a Class object for the resource type being read, and the logical id of the resource to read. Implementations should check the FHIRSearchContext of the FHIRPersistenceContext to determine whether the caller would like the full resource back, the resource text or data, or just a summary (see `FHIRSearchContext.getSummaryParameter()`). @@ -107,11 +117,11 @@ Note: we plan to deprecate these exceptions and use only `SingleResourceResult` Version read requests work just like read requests except that the caller passes a version identifier and the persistence implementation must return that specific version of the resource. #### Update -Update requests include a FHIRPersistenceContext, a resource logical id, and an updated version of the resource to save. FHIRPersistence implementations must set the `Resource.meta.lastUpdate` and `Resource.meta.versionId` elements before storing it. Typically, implementations will set the version of the updated resource based on the previous version of the resource which can be found in the FHIRPersistenceEvent (`FHIRPersistenceEvent.getPrevFhirResource()`) of the FHIRPersistenceContext. +Update requests include a FHIRPersistenceContext, a resource logical id, and an updated version of the resource to save. FHIRPersistence implementations must set the `Resource.meta.lastUpdate` and `Resource.meta.versionId` elements before storing it. Typically, implementations set the version of the updated resource based on the previous version of the resource which can be found in the FHIRPersistenceEvent (`FHIRPersistenceEvent.getPrevFhirResource()`) of the FHIRPersistenceContext. Note: at the REST layer, an update request will first invoke read and then invoke update. Similarly, PATCH requests are converted to normal updates before reaching the persistence layer's update implementation. -FHIRPersistence implementations SHOULD use the value of the `fhirServer/persistence/common/updateCreateEnabled` property to determine whether they should allow an update to a resource that doesn't exist yet. +FHIRPersistence implementations SHOULD use the value of the [`fhirServer/persistence/common/updateCreateEnabled`](https://ibm.github.io/FHIR/guides/FHIRServerUsersGuide#45-updatecreate-feature) property to determine whether they should allow an update to a resource that doesn't exist yet. #### Delete Delete requests include a FHIRPersistenceContext, a Class object for the resource type being deleted, and the logical id of the resource to delete. @@ -127,6 +137,8 @@ Similarly, FHIRPersistence implementations should check and honor the the `since In addition to setting the MultiResourceResult success indicator and the resource version instances for the requested page, FHIRPersistence implementations must set the total number of versions for the requested resource (`FHIRPagingContext.setTotalCount(int)`) and a map of deleted resource versions (`FHIRHistoryContext.setDeletedResources()`) for the REST layer to properly construct the response bundle and accurately reflect which versions are deletes (rather than updates). +The FHIRPersistence also supports whole system `_history`. If supported, `isChangesSupported` must return true, and `changes` must be implemented to return a list of ResourceChangeLogRecord DTOs. + #### Search The [FHIR Search specification](https://www.hl7.org/fhir/R4/search.html) is sprawling and difficult to implement in its entirety. At the persistence layer, search requests will include a FHIRPersistenceContext with an embedded FHIRSearchContext and a Class object to indicate the resource type(s) to search on. A Class of `com.ibm.fhir.model.type.Resource` is passed for searches performed at the "whole-system" level. @@ -143,12 +155,23 @@ On success, set `MultiResourceResult.success` to true and set `MultiResourceResu On failure, set `MultiResourceResult.success` to false and set `MultiResourceResult.outcome` to an OperationOutcome with one or more issues which indicate the failure. +#### Extended Operations + +The IBM FHIR Server supports [extended operations](https://www.hl7.org/fhir/operations.html). The IBM FHIR Server has some operations which use custom persistence interactions: + +| Operation Name | Interfaces to implement | +|----------------|-------------------------| +| `$healthcheck` | `getHealth` must be implemented to indicate if the persistence layer is in a healthy state and can access the data store | +| `$erase` | `erase` must be implemented so that ResourceEraseRecord is returned for each Erase operation. If not implemented it throws an exception| +| `$export` | `fetchResourcePayloads` must be implemented so that the ResourcePayload is returned as a BinaryStream | +| `$reindex`| `isReindexSupported` must be true and, if true, `reindex` must be implemented so that users can apply the latest search configuration to a resource after it is already ingested| + ## Testing your persistence layer -In addition to defining the interfaces, the `fhir-persistence` project includes a set of tests that you can extend to test your implementation. +In addition to defining the interfaces, the `fhir-persistence` module includes a set of tests that you can extend to test your implementation. -Most of the tests defined in this project relate to search, but they also exercise the create, update, and delete interactions in the process. -The tests in the `com.ibm.fhir.persistence.search.test` package are organized by search parameter type and they utilize tenant-specific search parameter definitions from the `fhir-persistence/src/test/resources/config` directory and search for fields on the generated example resources at `fhir-examples/src/main/resources/json/ibm/basic`. +Most of the tests defined in this module relate to search, but they also exercise the create, update, and delete interactions in the process. +The tests in the `com.ibm.fhir.persistence.search.test` package are organized by search parameter type and they utilize tenant-specific search parameter definitions from the `fhir-persistence/src/test/resources/config` directory and search for fields on the generated example resources at `fhir-examples/src/main/resources/json/ibm/basic`. The `fhir-examples` module is available on Maven Central [link](https://repo1.maven.org/maven2/com/ibm/fhir/fhir-examples/). For an example of how to extend these tests, see the `com.ibm.fhir.persistence.jdbc.search.test` package under `fhir-persistence-jdbc/src/test/java`. -Finally, the IBM FHIR Server contains a number of end-to-end (e2e) integration tests under the `fhir-server-test` project. These tests can be executed against a running server that is configured with your persistence layer to provide further confidence in your implementation. +Finally, the IBM FHIR Server contains a number of end-to-end (e2e) integration tests under the [`fhir-server-test`](https://github.com/IBM/FHIR/tree/main/fhir-server-test) module. These tests can be executed against a running server that is configured with your persistence layer to provide further confidence in your implementation. diff --git a/docs/src/pages/guides/DB2OnCloudSetup.md b/docs/src/pages/guides/DB2OnCloudSetup.md index 5e368b7bc41..09f3db2fb47 100644 --- a/docs/src/pages/guides/DB2OnCloudSetup.md +++ b/docs/src/pages/guides/DB2OnCloudSetup.md @@ -2,7 +2,7 @@ layout: post title: Setup for IBM Db2 on Cloud description: Setup for IBM Db2 on Cloud -date: 2020-04-03 09:59:05 -0400 +date: 2021-06-01 permalink: /FHIR/guides/DB2OnCloudSetup --- @@ -18,8 +18,8 @@ This document guides a developer or administrator through the steps necessary to 1. Choose [Db2](https://cloud.ibm.com/catalog/services/db2). -1. Select the Pricing Plan - - The IBM FHIR Server does not support using the *Lite* plan. +1. Select the Pricing Plan - `Standard` or `Enterprise` + - Note, the IBM FHIR Server does not support using the *Lite* plan. 1. Create `Create` @@ -35,8 +35,6 @@ Note: ### **Create the administrator credential** -The administrator is `BLUADMIN` but you need to create a credential. - 1. Navigate to the Db2 instance you created. 1. Click on the `Service credentials` panel. @@ -47,35 +45,76 @@ The administrator is `BLUADMIN` but you need to create a credential. 1. Access the credential, select View Credentials. The entry you just created looks like the following block of JSON(the secrets are blanked out here): - ``` json - { - "hostname": "dashdb-txn-***-***********.services.dal.bluemix.net", - "password": "bluadmin-password-very-secret", - "https_url": "https://dashdb-txn-***-************.services.dal.bluemix.net:8443", - "port": 50000, - "ssldsn": "DATABASE=BLUDB;HOSTNAME=dashdb-txn-***-************.services.dal.bluemix.net;PORT=50001;PROTOCOL=TCPIP;UID=bluadmin;PWD=bluadmin-password-very-secret;Security=SSL;", - "host": "dashdb-txn-***-************.services.dal.bluemix.net", - "jdbcurl": "jdbc:db2://dashdb-txn-***-************.services.dal.bluemix.net:50000/BLUDB", - "uri": "db2://bluadmin:bluadmin-password-very-secret@dashdb-txn-***-************.services.dal.bluemix.net:50000/BLUDB", - "db": "BLUDB", - "dsn": "DATABASE=BLUDB;HOSTNAME=dashdb-txn-***-************.services.dal.bluemix.net;PORT=50000;PROTOCOL=TCPIP;UID=bluadmin;PWD=bluadmin-password-very-secret;", - "username": "bluadmin", - "ssljdbcurl": "jdbc:db2://dashdb-txn-***-************.services.dal.bluemix.net:50001/BLUDB:sslConnection=true;" +``` json +{ + "apikey": "******", + "connection": { + ... + "db2": { + "authentication": { + "method": "direct", + "password": "P1234", + "username": "username1" + }, + "certificate": { + "certificate_base64": "secret=", + "name": "9e529eec-97df-4574-8839-12345" + }, + "composed": [ + "db2://username1:P1234@1-2-3-4.databases.appdomain.cloud:31366/bludb?authSource=admin&replicaSet=replset" + ], + "database": "bludb", + "host_ros": [ + "1-2-3-4.databases.appdomain.cloud:32116" + ], + "hosts": [ + { + "hostname": "1-2-3-4.databases.appdomain.cloud", + "port": 31366 + } + ], + "jdbc_url": [ + "jdbc:db2://1-2-3-4.databases.appdomain.cloud:31366/bludb:user=;password=;sslConnection=true;" + ], + "path": "/bludb", + "query_options": { + "authSource": "admin", + "replicaSet": "replset" + }, + "replica_set": "replset", + "scheme": "db2", + "type": "uri" } - ``` + }, + "iam_apikey_description": "Auto-generated for key username1-fc89-48e1-a1ce-569ca6c6e3d5", + "iam_apikey_name": "Service credentials-1", + "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Manager", + "iam_serviceid_crn": "secret", + "instance_administration_api": { + "deployment_id": "crn:v1:bluemix:public:dashdb-for-transactions:us-east:a/secret:", + "instance_id": "crn:v1:bluemix:public:dashdb-for-transactions:us-east:a/secret::", + "root": "https://api.us-east.db2.cloud.ibm.com/v4/ibm" + } +} +``` 4. Save these details for later, as these properties are needed to deploy and manage the IBM FHIR Server schema. -For improved security, the **BLUADMIN** user should only be used to deploy the schema objects (tables, indexes, stored procedures etc) and administer the database, NOT for connecting from the fhir-server application. +For improved security, the **admin** user should only be used to deploy the schema objects (tables, indexes, stored procedures etc) and administer the database, NOT for connecting from the IBM FHIR Server application. -### **Add the FHIRSERVER user and API key** +### **Adding the FHIRSERVER user** -Following the least-privilege principle, the IBM FHIR server itself does not use **BLUADMIN**. The IBM FHIR server uses an API Key associated with an [IAM Service Id](https://cloud.ibm.com/iam/serviceids). The IAM Service Id is mapped to a Db2 user which is granted explicit privileges to the tables and stored procedures. +Following the least-privilege principle, the IBM FHIR server itself recommends running as db user, not db administrator. + +#### Using IAM apiKey +The IBM FHIR Server uses an API Key associated with an [IAM Service Id](https://cloud.ibm.com/iam/serviceids). The IAM Service Id is mapped to a Db2 user which is granted explicit privileges to the tables and stored procedures. The IBM FHIR Server uses the access flow: 1. Read API Key and the tenant key from the fhir-server-config.json + 2. Connect to Db2 to access authenticated data using IAM + 3. Confirm tenant-key to access authorized data The steps to create the API key are: @@ -116,9 +155,9 @@ Before the API key can be used, you need to create a Db2 user and associate it w 1. Click on Open Console. -1. Click `SETTINGS` > `Manage Users`. +1. Click Administration > User Management - - Note: If you do not see `Manage Users`, you are probably using a [non-IAM instance](https://www.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.security.doc/doc/iam.html). To confirm: + - To confirm the IAM instance: 1. Click Run Sql 1. Enter the SQL ``` sql @@ -142,10 +181,23 @@ Before the API key can be used, you need to create a Db2 user and associate it w You are now able to connect to the database as the FHIRSERVER user using only the API key created above. +#### Using Db2 Auth + +1. On the Db2 Resource, click `Manage` + +2. Click `Open Console` + +3. Click Administration > User Management + +4. Click Add User, and enter the user details with a sufficiently complex password. Set the `User Privilege` as `User`. + +5. Save these details for the datasource.xml. + ### **Testing the connection** The [Db2 driver](https://repo1.maven.org/maven2/com/ibm/db2/jcc/11.5.0.0/jcc-11.5.0.0.jar) is able to execute a connectivity test to check the configuration of the combo of API-key/Service-Id/Db2-User-Id. +#### Test IAM Access 1. Copy the command to your code editor ``` bash @@ -164,9 +216,31 @@ The [Db2 driver](https://repo1.maven.org/maven2/com/ibm/db2/jcc/11.5.0.0/jcc-11. 1. Run in your favorite terminal, and you should see no errors in the output. You should see output like: -``` -[jcc][10516][13709]Test Connection Successful. -``` + ``` + [jcc][10516][13709]Test Connection Successful. + ``` + +#### Test Db2 Auth Access +1. Copy the command to your code editor + + ``` bash + java -cp /path/to/db2jcc4.jar com.ibm.db2.jcc.DB2Jcc -url "jdbc:db2://:50001/bludb:user=;password=;sslConnection=true;sslTrustStoreLocation=/path/to/truststore.jks;sslTrustStorePassword=;" + ``` + + - Note: Don't forget the trailing `;` in the URL. Some of the documented examples don't include it, but it is required in order for the connection to work, although this may be fixed in a future driver release. This only affects this test URL, not the actual FHIR server configuration. + +1. Replace the following values with your service details: + - `/path/to/db2jcc4.jar` : replace with the path to your driver jar. + - ``: the hostname of your Db2 service from the Service Credentials page + - ``: The userid to acecss the db + - ``: The password to access the db with + - ``: the password for your truststore + +1. Run in your favorite terminal, and you should see no errors in the output. You should see output like: + + ``` bash + [jcc][10516][13709]Test Connection Successful. + ``` ### **Deploy the IBM FHIR Server schema** @@ -174,67 +248,110 @@ Now that you've created the database and credentials, use the `fhir-persistence- 1. download the `fhir-persistence-schema` cli jar from the corresponding project release: https://github.com/IBM/FHIR/releases -2. create a properties file named db2.properties with the db2 connection info from IBM Cloud; for example: - ``` - db.host=dashdb-txn-***-***********.services.dal.bluemix.net +2. create a properties file named db2.properties with the Db2 Admin connection info from IBM Cloud; for example: + + ``` sh + db.host=1-2-3-4.databases.appdomain.cloud db.port=50001 - db.database=BLUDB - user=bluadmin - password=bluadmin-password-very-secret + db.database=bludb + user=myuser + password=mypassword sslConnection=true ``` 3. execute the following commands: - ```sh + + ``` sh java -jar schema/fhir-persistence-schema-*-cli.jar \ --prop-file db2.properties --schema-name FHIRDATA --create-schemas java -jar schema/fhir-persistence-schema-*-cli.jar \ - --prop-file db2.properties --schema-name FHIRDATA --update-schema --pool-size 2 + --prop-file db2.properties --schema-name FHIRDATA --update-schema java -jar schema/fhir-persistence-schema-*-cli.jar \ - --prop-file db2.properties --schema-name FHIRDATA --grant-to FHIRSERVER --pool-size 2 + --prop-file db2.properties --schema-name FHIRDATA --grant-to FHIRSERVER java -jar schema/fhir-persistence-schema-*-cli.jar \ - --prop-file db2.properties --schema-name FHIRDATA --allocate-tenant default --pool-size 2 + --prop-file db2.properties --schema-name FHIRDATA --allocate-tenant default ``` -4. note the tenantKey from the allocate-tenant step above; this will be needed to configure the IBM FHIR Server datasource in the next step +4. save the tenantKey from the `allocate-tenant` step above; this is needed to configure the IBM FHIR Server datasource in the next step For more information on using the fhir-persistence-schema cli jar, see https://github.com/IBM/FHIR/tree/main/fhir-persistence-schema/README.md. ### **Configuring an IBM FHIR Server datasource** -The IBM FHIR Server uses a proxy datasource mechanism, allowing new datasources to be added at runtime without requiring a (Liberty Profile) server restart. To configure a FHIR tenant datasource using an API-KEY, use the following template: +The IBM FHIR Server uses the native Open Liberty datasources. To configure a FHIR tenant datasource for a tenantKey, use the following template in the fhir-server-config.json: ``` json "persistence": { "datasources": { "default": { - "tenantKey": "", + "tenantKey": "myTenantKey", + "currentSchema": "${DB_SCHEMA}", "hints" : { "search.reopt": "ONCE" }, "type": "db2", - "connectionProperties": { - "serverName": "dashdb-txn-***-************.services.dal.bluemix.net", - "portNumber": 50001, - "databaseName": "BLUDB", - "apiKey": "", - "securityMechanism": 15, - "pluginName": "IBMIAMauth", - "currentSchema": "FHIRDATA", - "driverType": 4, - "sslConnection": true, - "sslTrustStoreLocation": "resources/security/dbTruststore.jks", - "sslTrustStorePassword": "change-password" - } } } } ``` -The persistence configuration is stored in the `fhir-server-config.json` in the tenant and default configuration folders. - Since release 4.3.2 you can use the `search.reopt` query optimizer hint (shown above) to improve the performance of certain search queries involving multiple search parameters. This optimization is currently only available for Db2. Valid values are "ALWAYS" and "ONCE". See Db2 documentation for `REOPT` for more details. +To configure the datasource.xml for db2 create a datasource.xml for the configDropins folder. + +#### For IAM User + +Create a file as the following + +``` xml + + + + + + + + +``` + +#### For Db2 Auth user + +Create a file as the following: + +``` xml + + + + + + + + + + +``` + +Each tenant datastore must have a corresponding dataSource definition and these dataSources must either follow the default jndiName pattern (`jndi/fhir_[tenantid]_[dsid]`) or the name must be explicitly configured in the corresponding section of `fhir-server-config.json`. + + #### Mapping from IBM Db2 on Cloud endpoint credentials This section explains how to populate the FHIR datasource from IBM Db2 on Cloud configuration details from an example configuration: @@ -247,9 +364,11 @@ Use the following table to populate your datasource. | portNumber | from the credential object select `port` | | databaseName | from the credential object select `db`, generally always `BLUDB` | | apiKey | from the created user in the assigned to the `fhiruser` group. Reference Section **FHIRSERVER User and API Key** | -| securityMechanism | `15` generally set to 15 to trigger the `apiKey` use with IBM Cloud | -| pluginName | `IBMIAMauth` fixed for use with the IBM Cloud| +| securityMechanism | If using IAM, set to `15` to trigger the use of IAM-based `apiKey` authentication| +| pluginName | If using IAM, set to `IBMIAMauth`| | currentSchema | the schema name of your deployed tenant Schema, for instance `FHIRDATA` | +| user| the userid | +| password | the password for the user| | driverType | `4`, always JDBC Type-4| | sslConnection | `true`, if you are using IBM Cloud | | sslTrustStoreLocation | Local server path to the truststore, `resources/security/dbTruststore.jks` | @@ -267,27 +386,11 @@ The IBM FHIR Server Bulk Data modules utilize Java Batch (JSR-352) from the Libe 1. Associate it with a ServiceId (no need to create an Administration user, a simple user has sufficient privileges) using the same procedure you followed for the fhir-server ServiceId user. -1. Using a valid API-KEY for the given ServiceId, configure a new datasource and the Java Batch persistence layer as follows: - -``` xml - - - - - - - -``` +1. Create the datasource + 1. Db2 with IAM https://github.com/IBM/FHIR/blob/main/fhir-server/liberty-config/configDropins/disabled/db2-cloud/bulkdata.xml + 1. Db2 with Db2Auth https://github.com/IBM/FHIR/blob/main/fhir-server/liberty-config/configDropins/disabled/db2/bulkdata.xml -- Note: The Java Batch is configured in `batchDs.xml` and included from the IBM FHIR Server's `server.xml` which is installed to `{wlp}/usr/server/fhir-server`. +- Note: The Java Batch is configured in `bulkdata.xml` and included from the IBM FHIR Server's `server.xml` which is installed to `{wlp}/usr/server/defaultServer`. (fhir-server is installed locally) - Note: While this feature is not required, it's best to configure this datasource while configuring the main datasource. ### **SSL Certificate** @@ -302,7 +405,6 @@ All passwords including apiKey values should be encrypted using the Liberty Prof The Lite plan is not supported for development and evaluation. - The schema size is larger than the available space. -- Concurrent Connections: The Lite plan has a limit of 5 concurrent connections, and the IBM FHIR Server `fhirProxyDataSource` needs to be updated to avoid failures. One should update the server.xml connectionManager with maxPoolSize - ``. - The instance is not enabled with IAM, and you may use the `Service Credentials` that are created to connect to configure the datasource. # **References** diff --git a/docs/src/pages/guides/FHIRPerformanceGuide.md b/docs/src/pages/guides/FHIRPerformanceGuide.md index bcd92c321c0..cb6944b8b73 100644 --- a/docs/src/pages/guides/FHIRPerformanceGuide.md +++ b/docs/src/pages/guides/FHIRPerformanceGuide.md @@ -3,7 +3,7 @@ layout: post title: IBM FHIR Server Performance Guide description: IBM FHIR Server Performance Guide Copyright: years 2020, 2021 -lastupdated: "2020-03-31" +lastupdated: "2020-06-01" permalink: /FHIRServerPerformanceGuide/ --- @@ -21,6 +21,8 @@ permalink: /FHIRServerPerformanceGuide/ - [3.3 Session Affinity](#33-session-affinity) - [3.4 Value-Id Caches](#34-value-id-caches) - [3.5 Compartment Search Optimization](#35-compartment-search-optimization) + - [3.6 Usage of Server Resource Provider](#36-usage-of-server-resource-provider) + - [3.7 Usage of the extension-search-parameters.json file](#37-usage-of-the-extension-search-parameters.json-file) - [4 Database Tuning](#4-database-tuning) - [4.1 PostgreSQL](#41-postgresql) - [4.1.1 Fillfactor](#411-fillfactor) @@ -285,6 +287,34 @@ To enable this optimization, set the `fhirServer/search/useStoredCompartmentPara Enabling this optimization is recommended. See the IBM FHIR Server release notes for more details. +## 3.6. Usage of Server Resource Provider + +The IBM FHIR Server has a dynamic registry of conformance resources. The built-in "ServerRegistryResourceProvider" can be used to bridge conformance resources from the tenant data store (uploaded through the REST API) to the registry. +When enabled, this means that each call to the registry (e.g. for extension StructureDefinition lookups during resource creation) can result in a round trip to the database. + +For optimal performance, the IBM FHIR Server team recommends to disable this resource provider via the following setting: + +| Configuration | Recommended value | +|------|-------| +| `fhirServer/core/serverRegistryResourceProviderEnabled` | false | + +This configuration setting avoids an extra Search during ingestion. + +## 3.7. Usage of the extension-search-parameters.json file + +The IBM FHIR Server supports multi-tenant SearchParameter extensions described in the extension-search-parameters.json file. When the `extension-search-parameters.json` is missing, the SearchParameter value extraction tries to open the file for every resource. This is a file-system operation which results in a context switch and impacts performance. + +The IBM FHIR Server team recommends each tenant include an `extension-search-parameters.json` file, even if it is empty. + +An example of the empty search parameters file is: + +``` json +{ + "resourceType": "Bundle", + "type": "collection", + "entry": [] +} +``` # 4. Database Tuning @@ -633,23 +663,6 @@ The above query requires a join of around 13 tables which is too many for the da /ExplanationOfBenefit?_pretty=true&patient:Patient.birthdate=le1915&claim.priority=normal,stat,deferred&_include=ExplanationOfBenefit:claim&_include=ExplanationOfBenefit:patient ``` -**Include Code System** - -Token-based searches should include a code-system when possible. The same code value might exist in multiple code-systems, Unless the code-system is included in the search query, the database join may need to consider multiple matches in order to find all the associated resources. This multiplies the amount of work the database must do to execute the query. This also impacts cardinality estimation by the optimizer. If both the code-system and code value are provided, this matches a unique index in the schema allowing the optimizer to infer the SQL fragment will produce a single row. - -Don't do this: -``` -Patient/175517d8bea-32d33eec-d98f-4c99-a3cf-06a113ddcf08/CareTeam?status=active -``` - -Instead, do this: -``` -Patient/175517d8bea-32d33eec-d98f-4c99-a3cf-06a113ddcf08/CareTeam?status=http://hl7.org/fhir/care-team-status|active -``` - -Explicitly providing the code is always preferred. If no system is provided, in some cases the IBM FHIR Server can determine the correct code-system to use automatically, which helps query performance. - - ## 6.5. Search Examples The section contains search examples and performance considerations for various types of search parameters. @@ -663,7 +676,14 @@ HL7 FHIR supports a few variants of token search: * `[parameter]=[system]|[code]` * `[parameter]=|[code]` -For optimal performance, users should prefer the `[system]|[code]` variant. +Token-based searches should include a code-system when possible. The same code value might exist in multiple code-systems and so, unless the code-system is included in the search query, the database join may need to consider multiple matches in order to find all the associated resources. This multiplies the amount of work the database must do to execute the query. This also impacts cardinality estimation by the optimizer. If both the code-system and code value are provided, this matches a unique index in the schema allowing the optimizer to infer the SQL fragment will produce a single row. + +For optimal performance, users should prefer the `[system]|[code]` variant. Explicitly providing the code is always preferred. If no system is provided, in some cases the IBM FHIR Server can determine the correct code-system to use automatically, which helps query performance. + +Don't do this: +`Patient/175517d8bea-32d33eec-d98f-4c99-a3cf-06a113ddcf08/CareTeam?status=active` + +Instead, do this: `Patient/175517d8bea-32d33eec-d98f-4c99-a3cf-06a113ddcf08/CareTeam?status=http://hl7.org/fhir/care-team-status|active` This is especially important for code values that are common across systems (e.g short strings like "active"). However, the IBM FHIR Server supports a SearchParameter extension which allows the server to add an implicit `[system]|` prefix for certain token parameter searches that come in with just a `[code]`. diff --git a/docs/src/pages/guides/FHIRSearchConfiguration.md b/docs/src/pages/guides/FHIRSearchConfiguration.md index 3d6e7b2717a..9a956bbedd7 100644 --- a/docs/src/pages/guides/FHIRSearchConfiguration.md +++ b/docs/src/pages/guides/FHIRSearchConfiguration.md @@ -1,7 +1,7 @@ --- layout: default title: Search Configuration Overview -date: 2020-01-15 08:37:05 -0400 +date: 2021-06-10 permalink: /FHIRSearchConfiguration/ markdown: kramdown --- @@ -263,12 +263,56 @@ In order to avoid this issue, inclusion criteria search parameters should not be ## 2 Re-index Reindexing is implemented as a custom operation that tells the IBM FHIR Server to read a set of resources and replace the existing search parameters with those newly extracted from the resource body. -The `$reindex` operation can be invoked via an HTTP(s) POST to `[base]/$reindex`. By default, the operation will select 10 resources and re-extract their search parameters values based on the current configuration of the server. The operation supports the following parameters to control the behavior: +The `$reindex` operation can be invoked via an HTTP(s) POST to `[base]/$reindex`, `[base]/[type]/$reindex`, or `[base]/[type]/[instance]/$reindex`. By default, the operation at the System-level or Type-level selects 10 resources and re-extract their search parameters values based on the current configuration of the server. The operation supports the following parameters to control the behavior: |name|type|description| |----|----|-----------| |`tstamp`|string|Reindex any resource not previously reindexed before this timestamp. Format as a date YYYY-MM-DD or time YYYY-MM-DDTHH:MM:DDZ.| |`resourceCount`|integer|The maximum number of resources to reindex in this call. If this number is too large, the processing time might exceed the transaction timeout and fail.| +|`resourceLogicalId`|string|The ResourceType or the ResourceType/Logical id for targetted reindexing, only valid at System-level| + +An example request is: + +``` sh +curl --location --request POST 'https://localhost:9443/fhir-server/api/v4/$reindex' \ +--header 'X-FHIR-TENANT-ID: default' \ +--header 'Content-Type: application/fhir+json' \ +-u 'fhiruser:change-password' \ +--data-raw '{ + "resourceType": "Parameters", + "parameter": [ + { + "name": "resourceCount", + "valueInteger": 100 + }, + { + "name": "tstamp", + "valueString": "2021-01-01" + } + ] +}' +``` + +An example response when processing in a loop: + +``` json +{ + "resourceType": "OperationOutcome", + "issue": [ + { + "severity": "information", + "code": "informational", + "diagnostics": "Processed Patient/1795df2b501-04f88a35-9f2f-4871-a05e-ba8090fa18f5" + } + ] +} +``` + +An example response when processing is complete: + +``` json +{"resourceType":"OperationOutcome","issue":[{"severity":"information","code":"informational","diagnostics":"Reindex complete"}]} +``` The IBM FHIR Server tracks when a resource was last reindexed and only resources with a reindex_tstamp value less than the given tstamp parameter will be processed. When a resource is reindexed, its reindex_tstamp is set to the given tstamp value. In most cases, using the current date (for example "2020-10-27") is the best option for this value. diff --git a/docs/src/pages/guides/FHIRServerUsersGuide.md b/docs/src/pages/guides/FHIRServerUsersGuide.md index 13221891e86..4e5aff84bd6 100644 --- a/docs/src/pages/guides/FHIRServerUsersGuide.md +++ b/docs/src/pages/guides/FHIRServerUsersGuide.md @@ -3,7 +3,7 @@ layout: post title: IBM FHIR Server User's Guide description: IBM FHIR Server User's Guide Copyright: years 2017, 2021 -lastupdated: "2021-05-19" +lastupdated: "2021-06-07" permalink: /FHIRServerUsersGuide/ --- @@ -16,14 +16,15 @@ permalink: /FHIRServerUsersGuide/ * [3.1 Liberty server configuration](#31-liberty-server-configuration) * [3.2 FHIR server configuration](#32-fhir-server-configuration) * [3.3 Persistence layer configuration](#33-persistence-layer-configuration) + * [3.4 "Update/Create" feature](#34-updatecreate-feature) - [4 Customization](#4-customization) * [4.1 Extended operations](#41-extended-operations) * [4.2 Notification Service](#42-notification-service) * [4.3 Persistence interceptors](#43-persistence-interceptors) - * [4.4 Resource validation](#44-resource-validation) - * [4.5 "Update/Create" feature](#45-updatecreate-feature) - * [4.6 FHIR client API](#46-fhir-client-api) - * [4.7 FHIR command-line interface (fhir-cli)](#47-fhir-command-line-interface-fhir-cli) + * [4.4 Registry resources](#44-registry-resources) + * [4.5 Resource validation](#45-resource-validation) + * [4.6 Extending search](#46-extending-search) + * [4.7 FHIR client API](#47-fhir-client-api) * [4.8 Using local references within request bundles](#48-using-local-references-within-request-bundles) * [4.9 Multi-tenancy](#49-multi-tenancy) * [4.10 Bulk data operations](#410-bulk-data-operations) @@ -153,7 +154,8 @@ By default, we include: In the examples within the following sections, you'll see the default password `change-password`. In order to secure your server, these values should be changed. Optionally, the values can be encoded via the Liberty `securityUtility` command. For example, to encode a string value with the default `{xor}` encoding, run the following command: -``` + +``` sh /bin/securityUtility encode stringToEncode ``` @@ -202,6 +204,7 @@ The IBM FHIR Server supports the ability to compute and store compartment member } } ``` + Note that this parameter only enables or disables the compartment search query optimization feature. The compartment membership values are always computed and stored during ingestion or reindexing, regardless of the setting of this value. After the reindex operation is complete, it is recommended to set `useStoredCompartmentParam` to true. No reindex is required if this value is subsequently set to false. ## 3.3 Persistence layer configuration @@ -211,10 +214,11 @@ Before you can configure the server to use the JDBC persistence layer implementa The IBM FHIR Server is delivered with a default configuration that is already configured to use the JDBC persistence layer implementation with an Embedded Derby database. This provides the easiest out-of-the-box experience since it requires very little setup. -The IBM FHIR Server persistence configuration is split between `fhir-server-config.json` and the Liberty `server.xml + configDropins`. +The IBM FHIR Server persistence configuration is split between `fhir-server-config.json` and the Liberty `server.xml` and `configDropins`. Within `fhir-server-config.json`, the value of the `fhirServer/persistence/factoryClassname` is used to instantiate a FHIRPersistence object. By default, the server is configured to use the FHIRPersistenceJDBCFactory: -``` + +``` json { "fhirServer": { … @@ -227,7 +231,8 @@ Within `fhir-server-config.json`, the value of the `fhirServer/persistence/facto ### 3.3.1 The JDBC persistence layer When the FHIRPersistenceJDBCFactory is in use, the `fhirServer/persistence/datasources` property must specify a mapping from datastore-id values to Liberty datasource definitions. For example, here is the configuration for a datastore with id `default` that is configured for the `jdbc/fhir_default_default` datasource of type `postgresql`: -``` + +``` json { "fhirServer":{ "persistence":{ @@ -298,9 +303,10 @@ The IBM FHIR Server will look up the tenant and datastore id for each request an If you are using the `ibmcom/ibm-fhir-server` docker image, you can ask the entrypoint script to create (bootstrap) the database and the schema during startup by setting the `BOOTSTRAP_DB` environment variable to `true`. This database bootstrap step is only supported for Embedded Derby and will only bootstrap the default datastore of the default tenant (the default for requests with no tenant or datastore headers). -Reminder: the Embedded Derby support is designed to support simple getting started scenarios and is not recommended for production use. -``` +*Reminder*: the Embedded Derby support is designed to support simple getting started scenarios and is not recommended for production use. + +``` xml @@ -472,6 +478,26 @@ The TransactionManager controls the timeout of database queries. To modify the default transaction timeout value, set the environment variable `FHIR_TRANSACTION_MANAGER_TIMEOUT` or enter the value in the server.env file at the root of the WLP fhir-server instance. Example values are `120s` (seconds) or `2m` (minutes). +## 3.4 “Update/Create” feature +Normally, the _update_ operation is invoked with a FHIR resource which represents a new version of an existing resource. The resource specified in the _update_ operation would contain the same id of that existing resource. If a resource containing a non-existent id were specified in the _update_ invocation, an error would result. + +The FHIR specification defines optional behavior for the _update_ operation where it can create a new resource if a non-existent resource is specified in the invocation. The FHIR server supports this optional behavior via the `fhirServer/persistence/common/updateCreateEnabled` configuration parameter. If this configuration parameter is set to `true` (the default), then the _update_ operation will create a new resource if it is invoked with a resource containing a non-existent id. If the option is set to false, then the optional behavior is disabled and an error would be returned. + +The following example shows the JSON for enabling _update_ operations to create resources: +``` +{ + "fhirServer":{ + … + "persistence":{ + "common":{ + "updateCreateEnabled":true + } + } + … + } +} +``` + # 4 Customization You can modify the default server implementation by taking advantage of the IBM FHIR server's extensibility. The following extension points are available: * Custom operations framework: The IBM FHIR Server defines an operations framework that builds on the FHIR OperationDefinition resource in order to extend the FHIR REST API with custom endpoints. @@ -480,14 +506,14 @@ You can modify the default server implementation by taking advantage of the IBM * Resource validation: FHIRPath-based validation of FHIR resources on create or update with the ability to extend the system with custom constraints. ## 4.1 Extended operations -In addition to the standard REST API (create, update, search, and so forth), the IBM FHIR Server supports the FHIR operations framework as described in the [FHIR specification]( https://www.hl7.org/fhir/r4/operations.html). +In addition to the standard REST API (create, update, search, and so forth), the IBM FHIR Server supports the FHIR operations framework as described in the [FHIR specification](https://www.hl7.org/fhir/r4/operations.html). ### 4.1.1 Packaged operations The FHIR team provides implementations for the standard `$validate`, `$document`, `$everything`, `$expand`, `$lookup`, `$subsumes`, `$closure`, `$export`, `$import`, `$convert`, `$apply` and `$translate` operations, as well as a custom operation named `$healthcheck`, which queries the configured persistence layer to report its health. The server also bundles `$reindex` to reindex instances of Resources so they are searchable, and `$erase` to hard delete instances of Resources. To learn more about the $erase operation, read the [design document](https://github.com/IBM/FHIR/tree/main/operation/fhir-operation-erase/README.md). -No other extended operations are packaged with the server at this time, but you can extend the server with your own operations. +To extend the server with additional operations, see [Section 4.1.2 Custom operations](#412-custom-operations) #### 4.1.1.1 $validate The `$validate` operation checks whether the attached content would be acceptable either generally, or as a create, update, or delete against an existing resource instance or type. @@ -531,18 +557,25 @@ Field name | Type | Description `lastUpdated` | String | The date and time of the last update made to the resource associated with the notification event. `resourceId` | String | The logical id of the resource associated with the notification event. `resource` | String | A stringified JSON object which is the resource associated with the notification event. +`tenantId` | String | The tenant that generated this notification +`datasourceId` | String | The datasource used by the tenant The following JSON is an example of a serialized notification event: + ``` { "lastUpdated":"2016-06-01T10:36:23.232-05:00", "location":"Observation/3859/_history/1", "operationType":"create", "resourceId":"3859", + "tenantId":"default", + "datasourceId":"default", "resource":{ …… } } ``` +If the resource is over the limit specified in `fhirServer/notifications/common/maxNotificationSizeBytes`, the default value is to subset `id`, `meta` and `resourceType` and add the subset to the FHIRNotificationEvent. In alternative configurations, user may set `fhirServer/notifications/common/maxNotificationSizeBehavior` to `omit` and subsequently retrieve the resource using the location. + ### 4.2.2 WebSocket The WebSocket implementation of the notification service will publish notification event messages to a WebSocket. To enable WebSocket notifications, set the `fhirServer/notifications/websocket/enabled` property to `true`, as in the following example: @@ -604,6 +637,8 @@ Before you enable Kafka notifications, it's important to understand the topology On the other hand, if you have two completely independent FHIR server instances, then you should configure each one with its own topic name. +The FHIRNotificationEvent is asynchronous by default. If you want to specify a synchronous request, you can set `fhirServer/notifications/kafka/sync` to true, which ensures no message is lost in publishing, however it does add latency in each request. + ### 4.2.3 NATS The [NATS](http://nats.io) implementation of the notification service publishes notification event messages to a NATS streaming cluster. To configure the NATS notification publisher, configure properties in the `fhir-server-config.json` file as shown in the following example: @@ -691,9 +726,30 @@ To implement a persistence interceptor, complete the following steps: 4. Re-start the FHIR server. -## 4.4 Resource validation +## 4.4 Registry resources +The IBM FHIR Server includes a dynamic registry of conformance resources. +The registry pre-packages all [FHIR Definitions from the specification](https://www.hl7.org/fhir/R4/downloads.html) +and uses a Java ServiceLoader to discover additional registry resource providers on the classpath. + +The server consults this registry for: +* StructureDefinition, ValueSet, and CodeSystem resources for resource validation. +* SearchParameter and CompartmentDefinition resources for search. +* ValueSet and CodeSystem resources for terminology operations. +* And more. + +One common technique for extending FHIR with a set of conformance resources is to build or reference an [Implementation Guide](https://www.hl7.org/fhir/implementationguide.html). -### 4.4.1 HL7 spec-defined validation support +The IBM FHIR Server includes a [PackageRegistryResourceProvider](https://ibm.github.io/FHIR/guides/FHIRValidationGuide#making-profiles-available-to-the-fhir-registry-component-fhirregistry) for registering implementation guide resources. + +Additionally, we [pre-package a number of popular implementation guides](https://ibm.github.io/FHIR/guides/FHIRValidationGuide#optional-profile-support) and make those available from both our GitHub Releases and [Maven Central](https://repo1.maven.org/maven2/com/ibm/fhir/). + +Finally, the IBM FHIR Server includes a built-in ServerRegistryResourceProvider that can be used to bridge conformance resources from the tenant data store (uploaded through the REST API) to the registry. +This provider can be enabled/disabled via the `fhirServer/core/serverRegistryResourceProviderEnabled` property, but we recommend leaving it disabled for performance-intensive workloads. + +## 4.5 Resource validation +As mentioned in the previous section, the IBM FHIR Server registry is consulted during resource validation. + +### 4.5.1 HL7 spec-defined validation support The FHIR specification provides a number of different validation resources including: 1. XML Schemas @@ -701,10 +757,18 @@ The FHIR specification provides a number of different validation resources inclu 3. Structure Definitions / Profiles for standard resource types, data types and built-in value sets The FHIR server validates incoming resources for create and update interactions using the resource definitions and their corresponding FHIRPath constraints. Additionally, the FHIR server provides the following `$validate` operation that API consumers can use to POST resources and get validation feedback: - `POST /Resource/$validate` +``` +POST //$validate +``` + +### 4.5.2 Extension validation +FHIR resources can be extended. Each extension has a url and servers can use these urls to validate the contents of the extension. -### 4.4.2 User-provided validation -The IBM FHIR Server can be extended with custom profile validation. This allows one to apply validation rules on the basis of the `Resource.meta.profile` codes included on the resource instance. +The IBM FHIR Server performs extension validation by looking up the extension definition in its internal registry. +If an instance contains extensions that are unknown to the server, then the server will include a validation warning that indicates this extension could not be validated. + +### 4.5.3 Profile validation +The IBM FHIR Server can be extended with custom profile validation. This allows one to apply validation rules on the basis of the `Resource.meta.profile` values included on the resource instance. For example, you can configure a set of FHIRPath Constraints to run for resources that claim conformance to the `http://ibm.com/fhir/profile/partner` profile when you see an input resource like the following: ``` @@ -741,32 +805,20 @@ See [Validation Guide - Optional profile support](https://ibm.github.io/FHIR/gui See [Validation Guide - Making profiles available to the fhir registry](https://ibm.github.io/FHIR/guides/FHIRValidationGuide#making-profiles-available-to-the-fhir-registry-component-fhirregistry) for information about how to extend the server with additional Implementation Guide artifacts. -## 4.5 “Update/Create” feature -Normally, the _update_ operation is invoked with a FHIR resource which represents a new version of an existing resource. The resource specified in the _update_ operation would contain the same id of that existing resource. If a resource containing a non-existent id were specified in the _update_ invocation, an error would result. +## 4.6 Extending search +In addition to supporting tenant-specific search parameter extensions as described in [Section 3.2.2 Tenant-specific configuration properties](#322-tenant-specific-configuration-properties), the IBM FHIR Server also supports loading +search parameters from the registry. -The FHIR specification defines optional behavior for the _update_ operation where it can create a new resource if a non-existent resource is specified in the invocation. The FHIR server supports this optional behavior via the `fhirServer/persistence/common/updateCreateEnabled` configuration parameter. If this configuration parameter is set to `true` (the default), then the _update_ operation will create a new resource if it is invoked with a resource containing a non-existent id. If the option is set to false, then the optional behavior is disabled and an error would be returned. +For performance reasons, the registry search parameters are retrieved once and only once during startup. -The following example shows the JSON for enabling _update_ operations to create resources: -``` -{ - "fhirServer":{ - … - "persistence":{ - "common":{ - "updateCreateEnabled":true - } - } - … - } -} -``` +The set of search parameters can filtered / refined via `fhirServer/resources/[resourceType]/searchParameters` as described in the [Search configuration guide](https://ibm.github.io/FHIR/guides/FHIRSearchConfiguration#12-filtering). -## 4.6 FHIR client API +## 4.7 FHIR client API -### 4.6.1 Overview +### 4.7.1 Overview In addition to the server, we also offer a Java API for invoking the FHIR REST APIs. The IBM FHIR Client API is based on the JAX-RS 2.0 standard and provides a simple properties-driven client that can be easily configured for a given endpoint, mutual authentication, request/response logging, and more. -### 4.6.2 Maven coordinates +### 4.7.2 Maven coordinates To use the FHIR Client from your application, specify the `fhir-client` artifact as a dependency within your `pom.xml` file, as in the following example: ``` @@ -777,182 +829,9 @@ To use the FHIR Client from your application, specify the `fhir-client` artifact ``` -### 4.6.3 Sample usage +### 4.7.3 Sample usage For examples on how to use the IBM FHIR Client, look for tests like `com.ibm.fhir.client.test.mains.FHIRClientSample` from the `fhir-client` project in git. Additionally, the FHIR Client is heavilly used from our integration tests in `fhir-server-test`. -## 4.7 FHIR command-line interface (fhir-cli) -The FHIR command-line interface (fhir-cli for short) is a command that can be used to invoke FHIR REST API operations from the command line. The compressed file for installing the fhir-cli tool is available from [Maven Central](https://repo1.maven.org/maven2/com/ibm/fhir/fhir-cli/). - -### 4.7.1 Installing fhir-cli -Because the fhir-cli tool is intended to be used by clients that need to access the FHIR server, it has its own installation process separate from the server. To install the fhir-cli tool, complete the following steps: - -1. Obtain the `fhir-cli.zip` file from the FHIR server installation zip or Maven. -2. Decompress the `fhir-cli.zip` file into a directory of your choosing, for example: - - ``` - cd /mydir - unzip fhir-cli.zip - ``` - -3. [Optional] To enable you to run fhir-cli from multiple directories, run the following command to add `fhir-cli` to your `PATH` environment variable. - ``` - export PATH=$PATH:/mydir/fhir-cli - ``` - -### 4.7.2 Configuring fhir-cli -The fhir-cli tool requires a properties file containing various configuration properties, such as the base endpoint URL, the username and password for basic authentication, amd so forth. The properties contained in this file are the same properties supported by the FHIR client API. The fhir-cli tool comes with a sample properties file named `fhir-cli.properties` which contains a collection of default property settings. - -Using the sample properties file as a guide, you can create your own properties file to reflect the required endpoint configuration associated with the FHIR server endpoint that you would like to access. In the examples that follow, we'll refer to this file as `my-fhir-cli.properties`, although you can name the file anything you'd like. - -### 4.7.3 Running fhir-cli -The fhir-cli tool comes with two shell scripts: `fhir-cli` (Linux®) and `fhir-cli.bat` (Windows™). In the examples that follow, we'll use `` as the location of the fhir-cli tool (that is, the `/mydir/fhir-cli` directory mentioned in preceding section). - -The following examples illustrate how to invoke the fhir-cli tool: - -* Display help text -``` -$ /fhir-cli –help - -FHIR Client Command Line Interface (fhir-cli) (c) Copyright IBM Corporation, 2016. - -usage: fhir-cli [options] - -Provides access to the FHIR Client API via the command line. - -Options: - -h,--help Display this help text - -id,--resourceId Use resource identifier for the operation invocation - -o,--output Write output resource to (e.g. searchresults.json) - -op,--operation The operation to be invoked - -p,--properties Use FHIR Client properties contained in (e.g. - fhir-cli.properties) - -qp,--queryParameter Include query parameter NAME=VALUE with the operation - invocation (e.g. _count=100). - -r,--resource Use FHIR resource contained in for operation - invocation (e.g. patient.json) - -t,--type Use resource type for the operation invocation (e.g. - "Patient") - -v,--verbose Display detailed output - -vid,--versionId Use version # for the operation invocation - -OPERATION should be one of: batch | create | history | metadata | read | search | search-all | -search-post | transaction | update | validate | vread -``` -* Invoke the 'metadata' operation -``` -$ /fhir-cli --properties my-fhir-cli.properties --operation metadata --output conformance.json - -FHIR Client Command Line Interface (fhir-cli) (c) Copyright IBM Corporation, 2016. - -Invoking operation 'metadata'... done! (651ms) -Status code: 200 -Response resource written to file: conformance.json -``` -Note: in this example the “--output” option is used to specify that the Conformance resource should be saved in file 'conformance.json'. -* Perform a _create_ operation -``` -$ /fhir-cli --properties my-fhir-cli.properties --operation create --resource newpatient.json - -FHIR Client Command Line Interface (fhir-cli) (c) Copyright IBM Corporation, 2016. - -Invoking operation _create_... done! (2719ms) -Status code: 201 -Location URI: http://localhost:9443/fhir-server/api/v4/Patient/26b694ef-cea7-4485-a896-5ac2a1da9f64/_history/1 -ETag: W/"1" -Last modified: 2016-09-13T20:51:21.048Z -``` -Note: In this example, the “--resource” option is used to indicate that the contents of the new resource to be created should be read from file 'newpatient.json'. -* Perform a 'read' operation -``` -$ /fhir-cli --properties my-fhir-cli.properties --operation read --type Patient --resourceId 26b694ef-cea7-4485-a896-5ac2a1da9f64 -o patient1.json - -FHIR Client Command Line Interface (fhir-cli) (c) Copyright IBM Corporation, 2016. - -Invoking operation 'read'... done! (321ms) -Status code: 200 -ETag: W/"1" -Last modified: 2016-09-13T20:51:21.048Z -Response resource written to file: patient1.json -``` -Note: the “-o” option is used as a shortcut for “--output” -* Perform an _update_ operation -``` -$ /fhir-cli --properties my-fhir-cli.properties --operation update --resource updatedpatient1.json -FHIR Client Command Line Interface (fhir-cli) (c) Copyright IBM Corporation, 2016. - -Invoking operation _update_... done! (2707ms) -Status code: 200 -Location URI: http://localhost:9443/fhir-server/api/v4/Patient/26b694ef-cea7-4485-a896-5ac2a1da9f64/_history/2 -ETag: W/"2" -Last modified: 2016-09-13T21:11:48.988Z -``` -* Perform a 'vread' operation -``` -$ /fhir-cli --properties my-fhir-cli.properties --operation vread -t Patient -id 26b694ef-cea7-4485-a896-5ac2a1da9f64 -vid 3 -o patient1v3.json - -FHIR Client Command Line Interface (fhir-cli) (c) Copyright IBM Corporation, 2016. - -Invoking operation 'vread'... done! (290ms) -Status code: 200 -ETag: W/"3" -Last modified: 2016-09-13T21:18:28.412Z -Response resource written to file: patient1v3.json -``` -* Perform a 'history' operation -``` -$ /fhir-cli --properties my-fhir-cli.properties --operation history -t Patient -id 26b694ef-cea7-4485-a896-5ac2a1da9f64 -o patient1history.json - -FHIR Client Command Line Interface (fhir-cli) (c) Copyright IBM Corporation, 2016. - -Invoking operation 'history'... done! (414ms) -Status code: 200 -Response resource written to file: patient1history.json -``` -Note: in this example, the response resource is a Bundle containing the versions of the Patient resource. - - -* Perform a 'search' operation - -``` -$ /fhir-cli --properties my-fhir-cli.properties --operation search -t Patient -qp name=Doe -o searchresults.json - -FHIR Client Command Line Interface (fhir-cli) (c) Copyright IBM Corporation, 2016. - -Invoking operation 'search'... done! (543ms) -Status code: 200 -Response resource written to file: searchresults.json -``` - -Note: in this example the `-qp` option (shortcut for `–queryParameter`) is used to specify the search criteria (that is, `name=Doe`). The response resource is a Bundle that is written to the file `searchresults.json`. - -* Perform a 'validate' operation - -``` -$ /fhir-cli --properties my-fhir-cli.properties --operation validate --resource newpatient.json - -FHIR Client Command Line Interface (fhir-cli) (c) Copyright IBM Corporation, 2016. - -Invoking operation 'validate'... done! (3182ms) -Status code: 200 -Response resource: - -{ - "resourceType" : "OperationOutcome", - "id" : "allok", - "text" : { - "status" : "additional", - "div" : "

    All OK

    " - }, - "issue" : [ { - "severity" : "information", - "code" : "informational", - "details" : { - "text" : "All OK" - } - } ] -} -``` - ## 4.8 Using local references within request bundles Inter-dependencies between resources are typically defined by one resource containing a field of type `Reference` which contains an _external reference_[5](#f5) to another resource. For example, an `Observation` resource could reference a `Patient` resource via the Observation's `subject` field. The value that is stored in the `Reference-type` field (for example, `subject` in the case of the `Observation` resource) could be an absolute URL, such as `https://fhirserver1:9443/fhir-server/api/v4/Patient/12345`, or a relative URL (for example, `Patient/12345`). @@ -1184,7 +1063,7 @@ The global configuration contains non-tenant specific configuration parameters ( `${server.config.dir}/config/default/fhir-server-config.json` -``` +``` json { "__comment":"FHIR server global (default) configuration", "fhirServer":{ @@ -1320,8 +1199,7 @@ The Bulk Data web application writes the exported FHIR resources to an IBM Cloud "storageProviders": { "default" : { "type": "file", - "fileBase": "${WLP_OUTPUT_DIR}/fhir-server/output", - "exportPublic": true, + "fileBase": "/output/bulkdata", "disableOperationOutcomes": true, "duplicationCheck": false, "validateResources": false @@ -1339,7 +1217,6 @@ The Bulk Data web application writes the exported FHIR resources to an IBM Cloud }, "enableParquet": false, "disableBaseUrlValidation": true, - "exportPublic": true, "disableOperationOutcomes": true, "duplicationCheck": false, "validateResources": false, @@ -1406,9 +1283,9 @@ The presigned URL is valid for 86400 seconds (1 day). Note, the deletion of an a job is split into two phases, ACCEPTED (202) response and DELETED (204). 202 is returned until the operation is stopped or removed, and then 204. -Please note that IBM COS does not support retention limits for individual COS objects, so please configure an appropriate retention policy (e.g. 1 day) at the bucket level. +Prior to version 4.8.1, the exported `ndjson` file is configured with public access automatically and with 2 hours expiration time using `fhirServer/bulkdata/storageProviders/(source)/exportPublic`. The exported content is best made available with presigned urls with the `hmac` authentication type. -As of Version 4.8.1, the exportPublic is deprecated and will be removed in future versions. `fhirServer/bulkdata/storageProviders/(source)/exportPublic` can be set to "false" to disable public access. Also, *minio* doesn't support object level ACL, so access token is always needed to download the exported `ndjson` files. +In 4.8.1, the randomly generated path is used to uniquely identify the exported files in a single folder. JavaBatch feature must be enabled in `server.xml` as following on the Liberty server: @@ -1482,10 +1359,139 @@ Note: If you use PostgreSQL database as IBM FHIR Server data store or the JavaBa For more information about Liberty JavaBatch configuration, please refer to [IBM WebSphere Liberty Java Batch White paper](https://www-03.ibm.com/support/techdocs/atsmastr.nsf/webindex/wp102544). -### 4.10.1 Integration Testing +### 4.10.1 *Path* and *Virtual Host* Bucket Access + +For BulkData storage types of `ibm-cos` and `aws-s3`, the IBM FHIR Server supports two styles of accessing the `s3` bucket - virtual host and path. In the IBM FHIR Server, `path` is the default access. [Link](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html) + +With path style access, the objects in a bucket are accessed using the pattern - `https://s3.region.host-name.com/bucket-name/object-key`. To configure path style access, one needs to configure the fhir-server-config.json. + +There are three critical elements in the configuration to configure path style: + +|Configuration|Details| +|-------------|-------| +|`endpointInternal`|the direct S3 API provider for the S3 API| +|`endpointExternal`|the endpoint url used to generate the downloadUrl used in S3 Export| +|`accessType`|"path", the default access type| + +Example of `path` based access: + +``` json +"bulkdata": { + ... + "storageProviders": { + "default" : { + "type": "aws-s3", + "bucketName": "bucket-name", + "location": "us", + "endpointInternal": "https://s3.region.host-name.com", + "endpointExternal": "https://s3.region.host-name.com", + "auth" : { + "type": "hmac", + "accessKeyId": "example", + "secretAccessKey": "example-password" + }, + "enableParquet": false, + "disableBaseUrlValidation": true, + "exportPublic": true, + "disableOperationOutcomes": true, + "duplicationCheck": false, + "validateResources": false, + "create": false, + "presigned": true, + "accessType": "path" + } + } +} +``` + +With virtual host style access, the objects in a bucket are accessed using the pattern - `https://bucket-name.s3.region.host-name.com/object-key`. To configure virtual host style access, one needs to configure the API. + +There are three critical elements in the configuration to configure virtual host style: + +|Configuration|Details| +|-------------|-------| +|`endpointInternal`|the direct API provider for the S3 API, and not the virtual host, the underlying S3 libraries generate the virtual host url| +|`endpointExternal`|the Virtual Host endpoint url used to generate the downloadUrl generated after an Export| +|`accessType`|"host"| + +Note, while the endpointInternal is specified with the S3 region endpoint, the calls to the API will use the virtual host directly. + +Example of `host` based access: + +``` json +"bulkdata": { + ... + "storageProviders": { + "default" : { + "type": "aws-s3", + "bucketName": "bucket-name", + "location": "us", + "endpointInternal": "https://s3.region.host-name.com", + "endpointExternal": "https://bucket-name.s3.region.host-name.com", + "auth" : { + "type": "hmac", + "accessKeyId": "example", + "secretAccessKey": "example-password" + }, + "enableParquet": false, + "disableBaseUrlValidation": true, + "exportPublic": true, + "disableOperationOutcomes": true, + "duplicationCheck": false, + "validateResources": false, + "create": false, + "presigned": true, + "accessType": "host" + } + } +} +``` + +### 4.10.2 S3 Import File with matching segments + +When Importing from an S3 Bucket, the IBM FHIR Server identifies the matching file segments. The `parameter.input.url` is used to query the S3 API to find the matching files. For instance, the following import of `Patient.ndjson` matches `Patient.ndjson_seg0` and `Patient.ndjson_seg1` which are imported to the IBM FHIR Server. + +This feature is useful for imports which follow a prefix pattern: + +``` json +{ + "resourceType": "Parameters", + "id": "30321130-5032-49fb-be54-9b8b82b2445a", + "parameter": [ + { + "name": "inputFormat", + "valueString": "application/fhir+ndjson" + }, + { + "name": "inputSource", + "valueUri": "https://localhost:9443/source-fhir-server" + }, + { + "name": "input", + "part": [ + { + "name": "type", + "valueString": "Patient" + }, + { + "name": "url", + "valueUrl": "test-import.ndjson" + } + ] + }, + { + "name": "storageDetail", + "valueString": "ibm-cos" + } + ] +} +``` + + +### 4.10.3 Integration Testing To integration test, there are tests in `ExportOperationTest.java` in `fhir-server-test` module with server integration test cases for system, patient and group export. Further, there are tests in `ImportOperationTest.java` in `fhir-server-test` module. These tests rely on the `fhir-server-config-db2.json` which specifies two storageProviders. -### 4.10.2 Export to Parquet +### 4.10.4 Export to Parquet Version 4.4 of the IBM FHIR Server introduced experimental support for exporting to Parquet format (as an alternative to the default NDJSON export). However, due to the size of the dependencies needed to make this work, this feature is disabled by default. To enable export to parquet, an administrator must: @@ -1494,7 +1500,7 @@ To enable export to parquet, an administrator must: An alternative way to accomplish the first part of this is to change the scope of these dependencies from the fhir-bulkdata-webapp pom.xml and rebuild the webapp to include them. -### 4.10.3 Job Logs +### 4.10.5 Job Logs Because the bulk import and export operations are built on Liberty's java batch implementation, users may need to check the [Liberty batch job logs](https://www.ibm.com/support/knowledgecenter/SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/rwlp_batch_view_joblog.html) for detailed step information / troubleshooting. In a standard installation, these logs will be at `wlp/usr/servers/fhir-server/logs/joblogs`. @@ -1561,6 +1567,14 @@ The following table describes the JSON fields of the CADF audit log entries logg |`observer/geolocation/city` |Value is determined by "fhirServer/audit/serviceProperties/geoCity" configuration property.| |`observer/geolocation/state` |Value is determined by "fhirServer/audit/serviceProperties/geoState" configuration property.| |`observer/geolocation/region` |Value is determined by "fhirServer/audit/serviceProperties/geoCounty" configuration property.| +|`target/id` |Value is the Logical ID from the resource| +|`target/typeUri` |Value is always "compute/node".| +|`target/addresses/url` |Value determined by the HttpServletRequest for the server. The value does not use the `X-FHIR-FORWARDED-URL` http header| +|`target/geolocation/city` |Value determined by "fhirServer/audit/serviceProperties/geoCity" configuration property.| +|`target/geolocation/state` |Value determined by "fhirServer/audit/serviceProperties/geoState" configuration property.| +|`target/geolocation/region` |Value determined by "fhirServer/audit/serviceProperties/geoCounty" configuration property.| + +Note for Batch/Transactions, attachments/content includes counts of the number of C-R-U-D-E actions. ### 4.11.2 Enable audit logging service Please refer to the property names that start with `fhirServer/audit/` in [5.1 Configuration properties reference](#51-configuration-properties-reference) for how to enable and configure the CADF audit logging service. @@ -1685,14 +1699,7 @@ The service can map to the CADF format or the FHIR AuditEvent resource format by "region": "USA", "annotations": [ ] - }, - "addresses": [ - { - "url": "https://test.io:443/fhir-server/api/v4/Patient", - "name": "", - "port": "" - } - ] + } }, "attachments": [ { @@ -1958,6 +1965,8 @@ This section contains reference information about each of the configuration prop |`fhirServer/core/defaultPageSize`|integer|Sets the page size for search and history request results when no `_count` parameter is specified.| |`fhirServer/core/maxPageSize`|integer|Sets the maximum page size for search and history request results. If a user-specified `_count` parameter value exceeds the maximum page size, then a warning is logged and the maximum page size will be used.| |`fhirServer/core/maxPageIncludeCount`|integer|Sets the maximum number of 'include' resources allowed per page for search and history request results. If the number of 'include' resources returned for a page of results from a search or history request will exceed the maximum number of 'include' resources allowed per page, then an error will be returned in the request results.| +|`fhirServer/core/capabilitiesUrl`|string|The URL that is embedded in the default Capabilities statement| +|`fhirServer/term/capabilitiesUrl`|string|The URL that is embedded in the Terminology Capabilities statement using `mode=terminology`| |`fhirServer/term/disableCaching`|boolean|Indicates whether caching is disabled for the FHIR terminology module, this includes caching in `CodeSystemSupport`, `ValueSetSupport`, `GraphTermServiceProvider`, and `RemoteTermServiceProvider`| |`fhirServer/term/graphTermServiceProviders`|array of objects|The `graphTermServiceProviders` element is an array of objects| |`fhirServer/term/graphTermServiceProviders/enabled`|boolean|Indicates whether the graph term service provider should be used by the FHIR term service to access code system content| @@ -1972,6 +1981,9 @@ This section contains reference information about each of the configuration prop |`fhirServer/term/remoteTermServiceProviders/hostnameVerificationEnabled`|boolean|Indicates whether hostname verification should be performed when using SSL transport| |`fhirServer/term/remoteTermServiceProviders/basicAuth/username`|string|The basic authentication username for this remote term service provider| |`fhirServer/term/remoteTermServiceProviders/basicAuth/password`|string|The basic authentication password for this remote term service provider| +|`fhirServer/term/remoteTermServiceProviders/headers`|array of objects|The `headers` element is an array of objects| +|`fhirServer/term/remoteTermServiceProviders/headers/name`|string|The HTTP header name that will be added to requests by this remote term service provider| +|`fhirServer/term/remoteTermServiceProviders/headers/value`|string|The HTTP header value that will be added to requests by this remote term service provider| |`fhirServer/term/remoteTermServiceProviders/httpTimeout`|integer|The HTTP read timeout for this remote term service provider (in milliseconds)| |`fhirServer/term/remoteTermServiceProviders/supports`|array of objects|The `supports` element is an array of objects| |`fhirServer/term/remoteTermServiceProviders/supports/system`|string|The system URI supported by this remote term service provider| @@ -1992,8 +2004,11 @@ This section contains reference information about each of the configuration prop |`fhirServer/resources//searchParameterCombinations`|string list|A comma-separated list of search parameter combinations supported for this resource type. Each search parameter combination is a string, where a plus sign, `+`, separates the search parameters that can be used in combination. To indicate that searching without any search parameters is allowed, an empty string must be included in the list. Including an asterisk, `*`, in the list indicates support of any search parameter combination. For resources without the property, the value of `fhirServer/resources/Resource/searchParameterCombinations` is used.| |`fhirServer/resources//profiles/atLeastOne`|string list|A comma-separated list of profiles, at least one of which must be specified in a resource's `meta.profile` element and be successfully validated against in order for a resource of this type to be persisted to the FHIR server. If this property is not specified, or if an empty list is specified, the value of `fhirServer/resources/Resource/profiles/atLeastOne` will be used.| |`fhirServer/notifications/common/includeResourceTypes`|string list|A comma-separated list of resource types for which notification event messages should be published.| +|`fhirServer/notifications/common/maxNotificationSizeBytes`|integer|The maximum size in byte of the notification that should be sent| +|`fhirServer/notifications/common/maxNotificationSizeBehavior`|string|The behavior of the notification framework when a notification is over the maxNotificationSizeBytes. Valid values are subset and omit| |`fhirServer/notifications/websocket/enabled`|boolean|A boolean flag which indicates whether or not websocket notifications are enabled.| |`fhirServer/notifications/kafka/enabled`|boolean|A boolean flag which indicates whether or not kafka notifications are enabled.| +|`fhirServer/notifications/kafka/sync`|boolean|A boolean flag which indicates whether or not the FHIRNotificationEvent is sent in a synchronous mode| |`fhirServer/notifications/kafka/topicName`|string|The name of the topic to which kafka notification event messages should be published.| |`fhirServer/notifications/kafka/connectionProperties`|property list|A group of connection properties used to configure the KafkaProducer. These properties are used as-is when instantiating the KafkaProducer used by the FHIR server for publishing notification event messages.| |`fhirServer/notifications/nats/enabled`|boolean|A boolean flag which indicates whether or not NATS notifications are enabled.| @@ -2010,8 +2025,11 @@ This section contains reference information about each of the configuration prop |`fhirServer/persistence/common/updateCreateEnabled`|boolean|A boolean flag which indicates whether or not the 'update/create' feature should be enabled in the selected persistence layer.| |`fhirServer/persistence/datasources`|map|A map containing datasource definitions. See [Section 3.3.1 The JDBC persistence layer](#331-the-jdbc-persistence-layer) for more information.| |`fhirServer/persistence/datasources//type`|string|`derby` or `db2` or `postgresql`| +|`fhirServer/persistence/datasources//jndiName`|string|The non-default jndiName for the datasource| +|`fhirServer/persistence/datasources//currentSchema`|string|The current schema for the datasource| |`fhirServer/persistence/datasources//searchOptimizerOptions/from_collapse_limit`|int| For PostgreSQL, sets the from_collapse_limit query optimizer parameter to improve search performance. If not set, the IBM FHIR Server uses a value of 12. To use the database default (8), explicitly set this value to null. | |`fhirServer/persistence/datasources//searchOptimizerOptions/join_collapse_limit`|int| For PostgreSQL, sets the join_collapse_limit query optimizer parameter to improve search performance. If not set, the IBM FHIR Server uses a value of 12. To use the database default (8), explicitly set this value to null. | +|`fhirServer/persistence/datasources//hints/search.reopt`|string|For Db2, reopt pragma that is injected into the Search query, ALWAYS or ONCE are valid values| |`fhirServer/security/cors`|boolean|Used to convey to clients whether cors is supported or not; actual cors support is configured separately in the Liberty server.xml configuration| |`fhirServer/security/basic/enabled`|boolean|Whether or not the server is enabled for HTTP Basic authentication| |`fhirServer/security/certificates/enabled`|boolean|Whether or not the server is enabled for Certificate-based client authentication| @@ -2066,29 +2084,31 @@ This section contains reference information about each of the configuration prop |`fhirServer/bulkdata/core/defaultExportProvider`|string| The default storage provider used by Bulk Data Export| |`fhirServer/bulkdata/core/defaultImportProvider`|string| The default storage provider used by Bulk Data Import| |`fhirServer/bulkdata/core/defaultOutcomeProvider`|string| The default storage provider used to output Operation Outcomes (file, s3 only)| -|`fhirServer/bulkdata/storageProviders//type`|string|The type of storageProvider aws-s3, ibm-cos, file, https | +|`fhirServer/bulkdata/core/enableSkippableUpdates`|boolean|Enables the skipping of identical resources| +|`fhirServer/bulkdata/storageProviders//type`|string|The type of storageProvider aws-s3, ibm-cos, file, https, azure-blob | |`fhirServer/bulkdata/storageProviders//bucketName`|string| Object store bucket name | |`fhirServer/bulkdata/storageProviders//location`|string|Object store location | |`fhirServer/bulkdata/storageProviders//endpointInternal`|string|Object store end point url used to read/write from COS | |`fhirServer/bulkdata/storageProviders//endpointExternal`|string|Object store end point url used in the constructed download URLs| -|`fhirServer/bulkdata/storageProviders//fileBase`|string| The absolute path of the output directory | +|`fhirServer/bulkdata/storageProviders//fileBase`|string| The absolute path of the output directory. It is recommended this path is not the mount point of a volume. For instance, if a volume is mounted to /output/bulkdata, use /output/bulkdata/data to ensure a failed mount does not result in writing to the root file system.| |`fhirServer/bulkdata/storageProviders//validBaseUrls`|list|The list of supported urls which are approved for the fhir server to access| |`fhirServer/bulkdata/storageProviders//disableBaseUrlValidation`|boolean|Disables the URL checking feature, allowing all URLs to be imported| -|`fhirServer/bulkdata/storageProviders//exportPublic`|boolean|Whether or not the server is configured to support export to parquet; to properly enable it the administrator must first make spark and stocator available to the fhir-bulkdata-webapp (e.g through the shared lib at `wlp/user/shared/resources/lib`)| -|`fhirServer/bulkdata/storageProviders//enableParquet`|boolean|If give public read only access to the exported files| +|`fhirServer/bulkdata/storageProviders//enableParquet`|boolean|Whether or not the server is configured to support export to parquet; to properly enable it the administrator must first make spark and stocator available to the fhir-bulkdata-webapp (e.g through the shared lib at `wlp/user/shared/resources/lib`)| |`fhirServer/bulkdata/storageProviders//disableOperationOutcomes`|boolean|Disables the base url validation, allowing all URLs to be imported| |`fhirServer/bulkdata/storageProviders//duplicationCheck`|boolean|Enables duplication check on import| |`fhirServer/bulkdata/storageProviders//validateResources`|boolean|Enables the validation of imported resources| |`fhirServer/bulkdata/storageProviders//presigned`|boolean|When an hmac auth type is used, presigns the URLs of an export| |`fhirServer/bulkdata/storageProviders//create`|boolean|Enables the creation of buckets| -|`fhirServer/bulkdata/storageProviders//auth/type`|string|A type of hmac, iam, or basic| -|`fhirServer/bulkdata/storageProviders//accessKeyId`|string|For HMAC, API key for accessing COS| -|`fhirServer/bulkdata/storageProviders//secretAccessKey`|string|For HMAC, secret key for accessing COS| -|`fhirServer/bulkdata/storageProviders//iamApiKey`|string|For IAM, API key for accessing IBM COS| -|`fhirServer/bulkdata/storageProviders//iamResourceInstanceId`|string|For IAM, secret key for accessing IBM COS| -|`fhirServer/bulkdata/storageProviders//user`|string|For basic, user COS| -|`fhirServer/bulkdata/storageProviders//secretAccessKey`|string|For basic, password for accessing COS| +|`fhirServer/bulkdata/storageProviders//auth/type`|string|A type of hmac, iam, basic or connection| +|`fhirServer/bulkdata/storageProviders//auth/accessKeyId`|string|For HMAC, API key for accessing COS| +|`fhirServer/bulkdata/storageProviders//auth/secretAccessKey`|string|For HMAC, secret key for accessing COS| +|`fhirServer/bulkdata/storageProviders//auth/iamApiKey`|string|For IAM, API key for accessing IBM COS| +|`fhirServer/bulkdata/storageProviders//auth/iamResourceInstanceId`|string|For IAM, secret key for accessing IBM COS| +|`fhirServer/bulkdata/storageProviders//auth/username`|string|For basic, user COS| +|`fhirServer/bulkdata/storageProviders//auth/password`|string|For basic, password for accessing COS| +|`fhirServer/bulkdata/storageProviders//auth/connection`|string|For Azure Blob Service, the connection string is used| |`fhirServer/bulkdata/storageProviders//operationOutcomeProvider`|string| the default storage provider used to output Operation Outcomes (file, s3 only)| +|`fhirServer/bulkdata/storageProviders//accessType`|string| The s3 access type, `host` or `path` (s3 only) [Link](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html)| |`fhirServer/operations/erase/enabled`|boolean|Enables the $erase operation| |`fhirServer/operations/erase/allowedRoles`|list|The list of allowed roles, allowed entries are: `FHIRUsers` every authenticated user, `FHIROperationAdmin` which is authenticated `FHIRAdmin` users| @@ -2111,6 +2131,8 @@ This section contains reference information about each of the configuration prop |`fhirServer/core/defaultPageSize`|10| |`fhirServer/core/maxPageSize`|1000| |`fhirServer/core/maxPageIncludeCount`|1000| +|`fhirServer/core/capabilitiesUrl`|string|null| +|`fhirServer/term/capabilitiesUrl`|string|null| |`fhirServer/term/cachingDisabled`|false| |`fhirServer/term/graphTermServiceProviders/enabled`|false| |`fhirServer/term/graphTermServiceProviders/timeLimit`|90000| @@ -2132,8 +2154,11 @@ This section contains reference information about each of the configuration prop |`fhirServer/resources//searchParameterCombinations`|null (inherits from `fhirServer/resources/Resource/searchParameterCombinations`)| |`fhirServer/resources//profiles/atLeastOne`|null (inherits from `fhirServer/resources/Resource/profiles/atLeastOne`)| |`fhirServer/notifications/common/includeResourceTypes`|`["*"]`| +|`fhirServer/notifications/common/maxNotificationSizeBytes`|integer|1000000| +|`fhirServer/notifications/common/maxNotificationSizeBehavior`|string|subset| |`fhirServer/notifications/websocket/enabled`|false| |`fhirServer/notifications/kafka/enabled`|false| +|`fhirServer/notifications/kafka/sync`|false| |`fhirServer/notifications/kafka/topicName`|fhirNotifications| |`fhirServer/notifications/kafka/connectionProperties`|`{}`| |`fhirServer/notifications/nats/enabled`|false| @@ -2150,6 +2175,8 @@ This section contains reference information about each of the configuration prop |`fhirServer/persistence/common/updateCreateEnabled`|true| |`fhirServer/persistence/datasources`|embedded Derby database: derby/fhirDB| |`fhirServer/persistence/datasources//type`|derby| +|`fhirServer/persistence/datasources//jndiName`|`jndi/fhir__`| +|`fhirServer/persistence/datasources//currentSchema`|null| |`fhirServer/persistence/datasources//searchOptimizerOptions/from_collapse_limit`|16| |`fhirServer/persistence/datasources//searchOptimizerOptions/join_collapse_limit`|16| |`fhirServer/search/enableOptQueryBuilder`|boolean|true| @@ -2173,7 +2200,6 @@ This section contains reference information about each of the configuration prop |`fhirServer/audit/serviceProperties/geoCounty`|UnknownCountry| |`fhirServer/audit/serviceProperties/mapper`|cadf| |`fhirServer/audit/serviceProperties/load`|environment| -|`fhirServer/bulkdata/isExportPublic`|true| |`fhirServer/bulkdata/validBaseUrlsDisabled`|false| |`fhirServer/bulkdata/cosFileMaxResources`|200000| |`fhirServer/bulkdata/cosFileMaxSize`|209715200| @@ -2198,14 +2224,15 @@ This section contains reference information about each of the configuration prop |`fhirServer/bulkdata/core/defaultExportProvider`|default| |`fhirServer/bulkdata/core/defaultImportProvider`|default| |`fhirServer/bulkdata/core/defaultOutcomeProvider`|default| +|`fhirServer/bulkdata/core/enableSkippableUpdates`|true| |`fhirServer/bulkdata/storageProviders//disableBaseUrlValidation`|false| -|`fhirServer/bulkdata/storageProviders//exportPublic`|false| |`fhirServer/bulkdata/storageProviders//enableParquet`|false| |`fhirServer/bulkdata/storageProviders//disableOperationOutcomes`|false| |`fhirServer/bulkdata/storageProviders//duplicationCheck`|false| |`fhirServer/bulkdata/storageProviders//validateResources`|false| |`fhirServer/bulkdata/storageProviders//presigned`|false| |`fhirServer/bulkdata/storageProviders//create`|false| +|`fhirServer/bulkdata/storageProviders//accessType`|`path`| |`fhirServer/operations/erase/enabled`|false| |`fhirServer/operations/erase/allowedRoles`|empty, all roles| @@ -2237,6 +2264,7 @@ must restart the server for that change to take effect. |`fhirServer/core/defaultPageSize`|Y|Y| |`fhirServer/core/maxPageSize`|Y|Y| |`fhirServer/core/maxPageIncludeCount`|Y|Y| +|`fhirServer/core/capabilitiesUrl`|Y|Y| |`fhirServer/term/cachingDisabled`|N|N| |`fhirServer/term/graphTermServiceProviders/enabled`|N|N| |`fhirServer/term/graphTermServiceProviders/timeLimit`|N|N| @@ -2246,8 +2274,10 @@ must restart the server for that change to take effect. |`fhirServer/term/remoteTermServiceProviders/trustStore`|N|N| |`fhirServer/term/remoteTermServiceProviders/hostnameVerificationEnabled`|N|N| |`fhirServer/term/remoteTermServiceProviders/basicAuth`|N|N| +|`fhirServer/term/remoteTermServiceProviders/headers`|N|N| |`fhirServer/term/remoteTermServiceProviders/httpTimeout`|N|N| |`fhirServer/term/remoteTermServiceProviders/supports`|N|N| +|`fhirServer/term/capabilitiesUrl`|Y|Y| |`fhirServer/resources/open`|Y|Y| |`fhirServer/resources/Resource/interactions`|Y|Y| |`fhirServer/resources/Resource/searchParameters`|Y|Y| @@ -2264,8 +2294,11 @@ must restart the server for that change to take effect. |`fhirServer/resources//searchParameterCombinations`|Y|Y| |`fhirServer/resources//profiles/atLeastOne`|Y|Y| |`fhirServer/notifications/common/includeResourceTypes`|N|N| +|`fhirServer/notifications/common/maxNotificationSizeBytes`|Y|N| +|`fhirServer/notifications/common/maxNotificationSizeBehavior`|Y|N| |`fhirServer/notifications/websocket/enabled`|N|N| |`fhirServer/notifications/kafka/enabled`|N|N| +|`fhirServer/notifications/kafka/sync`|Y|N| |`fhirServer/notifications/kafka/topicName`|N|N| |`fhirServer/notifications/kafka/connectionProperties`|N|N| |`fhirServer/notifications/nats/enabled`|N|N| @@ -2282,6 +2315,8 @@ must restart the server for that change to take effect. |`fhirServer/persistence/common/updateCreateEnabled`|N|N| |`fhirServer/persistence/datasources`|Y|N| |`fhirServer/persistence/datasources//type`|Y|N| +|`fhirServer/persistence/datasources//jndiName`|Y|Y| +|`fhirServer/persistence/datasources//currentSchema`|Y|Y| |`fhirServer/persistence/datasources//searchOptimizerOptions/from_collapse_limit`|Y|Y| |`fhirServer/persistence/datasources//searchOptimizerOptions/join_collapse_limit`|Y|Y| |`fhirServer/search/enableOptQueryBuilder`|Y|Y| @@ -2330,6 +2365,7 @@ must restart the server for that change to take effect. |`fhirServer/bulkdata/core/defaultExportProvider`|Y|Y| |`fhirServer/bulkdata/core/defaultImportProvider`|Y|Y| |`fhirServer/bulkdata/core/defaultOutcomeProvider`|Y|Y| +|`fhirServer/bulkdata/core/enableSkippableUpdates`|Y|Y| |`fhirServer/bulkdata/storageProviders//type`|Y|Y| |`fhirServer/bulkdata/storageProviders//bucketName`|Y|Y| |`fhirServer/bulkdata/storageProviders//location`|Y|Y| @@ -2338,7 +2374,6 @@ must restart the server for that change to take effect. |`fhirServer/bulkdata/storageProviders//fileBase`|Y|Y| |`fhirServer/bulkdata/storageProviders//validBaseUrls`|Y|Y| |`fhirServer/bulkdata/storageProviders//disableBaseUrlValidation`|Y|Y| -|`fhirServer/bulkdata/storageProviders//exportPublic`|Y|Y| |`fhirServer/bulkdata/storageProviders//enableParquet`|Y|Y| |`fhirServer/bulkdata/storageProviders//disableOperationOutcomes`|Y|Y| |`fhirServer/bulkdata/storageProviders//duplicationCheck`|Y|Y| @@ -2346,13 +2381,15 @@ must restart the server for that change to take effect. |`fhirServer/bulkdata/storageProviders//presigned`|Y|Y| |`fhirServer/bulkdata/storageProviders//create`|Y|Y| |`fhirServer/bulkdata/storageProviders//auth/type`|Y|Y| -|`fhirServer/bulkdata/storageProviders//accessKeyId`|Y|Y| -|`fhirServer/bulkdata/storageProviders//secretAccessKey`|Y|Y| -|`fhirServer/bulkdata/storageProviders//iamApiKey`|Y|Y| -|`fhirServer/bulkdata/storageProviders//iamResourceInstanceId`|Y|Y| -|`fhirServer/bulkdata/storageProviders//user`|Y|Y| -|`fhirServer/bulkdata/storageProviders//secretAccessKey`|Y|Y| +|`fhirServer/bulkdata/storageProviders//auth/accessKeyId`|Y|Y| +|`fhirServer/bulkdata/storageProviders//auth/secretAccessKey`|Y|Y| +|`fhirServer/bulkdata/storageProviders//auth/iamApiKey`|Y|Y| +|`fhirServer/bulkdata/storageProviders//auth/iamResourceInstanceId`|Y|Y| +|`fhirServer/bulkdata/storageProviders//auth/username`|Y|Y| +|`fhirServer/bulkdata/storageProviders//auth/password`|Y|Y| +|`fhirServer/bulkdata/storageProviders//auth/connection`|Y|Y| |`fhirServer/bulkdata/storageProviders//operationOutcomeProvider`|Y|Y| +|`fhirServer/bulkdata/storageProviders//accessType`|Y|Y| |`fhirServer/operations/erase/enabled`|Y|Y| |`fhirServer/operations/erase/allowedRoles`|Y|Y| diff --git a/fhir-audit/pom.xml b/fhir-audit/pom.xml index 10d3f060af6..d71415eca40 100644 --- a/fhir-audit/pom.xml +++ b/fhir-audit/pom.xml @@ -6,7 +6,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../fhir-parent diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/ApiParameters.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/ApiParameters.java index da1da9af959..423d8fb2390 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/ApiParameters.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/ApiParameters.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016, 2020 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -13,13 +13,13 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.JsonValue; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.JsonValue; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/Batch.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/Batch.java index 6398b2c0bc8..595c9b63f1e 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/Batch.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/Batch.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016, 2020 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -13,18 +13,18 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.JsonValue; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.JsonValue; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; /** - * This class defines the Batch parameters section of the FHIR server + * This class defines the Batch parameters section of the IBM FHIR server * AuditLogEntry. */ public class Batch { @@ -37,6 +37,10 @@ public class Batch { private Long resourcesUpdated; + private Long resourcesDeleted; + + private Long resourcesExecuted; + public Batch() { super(); } @@ -73,6 +77,22 @@ public void setResourcesUpdated(Long resourcesUpdated) { this.resourcesUpdated = resourcesUpdated; } + public Long getResourcesDeleted() { + return resourcesDeleted; + } + + public void setResourcesDeleted(Long resourcesDeleted) { + this.resourcesDeleted = resourcesDeleted; + } + + public Long getResourcesExecuted() { + return resourcesExecuted; + } + + public void setResourcesExecuted(Long resourcesExecuted) { + this.resourcesExecuted = resourcesExecuted; + } + /** * Generates JSON from this object. */ @@ -120,6 +140,14 @@ public static void generate(Batch obj, JsonGenerator generator) generator.write("resources_updated", obj.getResourcesUpdated()); } + if (obj.getResourcesDeleted() != null) { + generator.write("resources_deleted", obj.getResourcesDeleted()); + } + + if (obj.getResourcesExecuted() != null) { + generator.write("resources_executed", obj.getResourcesExecuted()); + } + if (obj.getStatus() != null) { generator.write("status", obj.getStatus()); } @@ -169,6 +197,18 @@ public static Batch parse(JsonObject jsonObject) { builder.resourcesUpdated(resourcesUpdated); } + t = jsonObject.get("resources_deleted"); + if (t != null) { + long resourcesDeleted = jsonObject.getInt("resources_deleted"); + builder.resourcesDeleted(resourcesDeleted); + } + + t = jsonObject.get("resources_executed"); + if (t != null) { + long resourcesExecuted = jsonObject.getInt("resources_executed"); + builder.resourcesExecuted(resourcesExecuted); + } + t = jsonObject.get("status"); if (t != null) { String status = jsonObject.getString("status"); @@ -209,6 +249,16 @@ public Builder resourcesUpdated(long resourcesUpdated) { return this; } + public Builder resourcesDeleted(long resourcesDeleted) { + batch.setResourcesDeleted(resourcesDeleted); + return this; + } + + public Builder resourcesExecuted(long resourcesExecuted) { + batch.setResourcesExecuted(resourcesExecuted); + return this; + } + public Batch build() { return batch; } diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/ConfigData.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/ConfigData.java index 00fe984723a..4972f174a39 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/ConfigData.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/ConfigData.java @@ -13,13 +13,13 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.JsonValue; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.JsonValue; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/Context.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/Context.java index 160d621035e..50a0a9071a4 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/Context.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/Context.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016, 2020 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -13,13 +13,13 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.JsonValue; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.JsonValue; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/Data.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/Data.java index e8254dc8409..f99dc1ca3bb 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/Data.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/Data.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016, 2020 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -13,13 +13,13 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.JsonValue; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.JsonValue; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/FHIRContext.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/FHIRContext.java index 23120145078..9039d136a57 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/FHIRContext.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/beans/FHIRContext.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -13,13 +13,13 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.JsonValue; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.JsonValue; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfAttachment.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfAttachment.java index 5e99fe06e1d..431ee7058a9 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfAttachment.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfAttachment.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -18,12 +18,12 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfCredential.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfCredential.java index cd2d078b787..624500546b5 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfCredential.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfCredential.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -15,13 +15,13 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonArray; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfEndpoint.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfEndpoint.java index 90633833d73..dccf8c88d9e 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfEndpoint.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfEndpoint.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -13,12 +13,12 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfEvent.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfEvent.java index 6cb0f9e452e..b149e57aa53 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfEvent.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfEvent.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -18,14 +18,14 @@ import java.util.Map; import java.util.UUID; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.JsonValue; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonArray; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.JsonValue; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.audit.cadf.enums.Action; import com.ibm.fhir.audit.cadf.enums.EventType; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfGeolocation.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfGeolocation.java index 1aaa4c39a48..9dfc2b46fec 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfGeolocation.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfGeolocation.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -16,13 +16,13 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonArray; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfMapItem.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfMapItem.java index fc61c4bc2d7..f42cbef377b 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfMapItem.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfMapItem.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -18,12 +18,12 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfMeasurement.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfMeasurement.java index 9dc99274d70..e9f2d4fa1ad 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfMeasurement.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfMeasurement.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -18,12 +18,12 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfMetric.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfMetric.java index c287f3c19ba..f168a36ec15 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfMetric.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfMetric.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -15,13 +15,13 @@ import java.util.List; import java.util.Map; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonArray; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfReason.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfReason.java index e609f5b72ae..4ebaedcd623 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfReason.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfReason.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -13,12 +13,12 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfReporterStep.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfReporterStep.java index 453de25b61b..5139edb53ed 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfReporterStep.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfReporterStep.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -22,13 +22,13 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonArray; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.audit.cadf.enums.ReporterRole; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfResource.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfResource.java index 9b8f5e4a31e..c7c4f859aed 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfResource.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/cadf/CadfResource.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -15,14 +15,14 @@ import java.util.Collections; import java.util.Map; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.JsonValue; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; +import jakarta.json.Json; +import jakarta.json.JsonArray; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.JsonValue; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; import com.ibm.fhir.audit.cadf.enums.ResourceType; import com.ibm.fhir.exception.FHIRException; diff --git a/fhir-audit/src/main/java/com/ibm/fhir/audit/configuration/type/IBMEventStreamsType.java b/fhir-audit/src/main/java/com/ibm/fhir/audit/configuration/type/IBMEventStreamsType.java index 3796d5e6799..56924541727 100644 --- a/fhir-audit/src/main/java/com/ibm/fhir/audit/configuration/type/IBMEventStreamsType.java +++ b/fhir-audit/src/main/java/com/ibm/fhir/audit/configuration/type/IBMEventStreamsType.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -16,17 +16,17 @@ import java.util.logging.Logger; import java.util.stream.Collectors; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.JsonString; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; - import com.ibm.fhir.exception.FHIRException; +import jakarta.json.Json; +import jakarta.json.JsonArray; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.JsonString; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; + /** * Helper class to process IBM Event Streams bindings into useful Kafka * entries. @@ -222,7 +222,7 @@ public static EventStreamsCredentials parse(String in) } return builder.build(); - } catch (javax.json.stream.JsonParsingException jpe) { + } catch (jakarta.json.stream.JsonParsingException jpe) { throw new FHIRException("Parsed invalid ", jpe); } } diff --git a/fhir-audit/src/test/java/com/ibm/fhir/audit/cadf/test/AuditCadfTest.java b/fhir-audit/src/test/java/com/ibm/fhir/audit/cadf/test/AuditCadfTest.java index 035333d3c88..838ee68cfde 100644 --- a/fhir-audit/src/test/java/com/ibm/fhir/audit/cadf/test/AuditCadfTest.java +++ b/fhir-audit/src/test/java/com/ibm/fhir/audit/cadf/test/AuditCadfTest.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -12,9 +12,9 @@ import java.util.Date; -import javax.json.Json; -import javax.json.JsonBuilderFactory; -import javax.json.JsonObject; +import jakarta.json.Json; +import jakarta.json.JsonBuilderFactory; +import jakarta.json.JsonObject; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; diff --git a/fhir-audit/src/test/java/com/ibm/fhir/audit/configuration/ConfigurationTest.java b/fhir-audit/src/test/java/com/ibm/fhir/audit/configuration/ConfigurationTest.java index 8cb3f498844..291db6931c2 100644 --- a/fhir-audit/src/test/java/com/ibm/fhir/audit/configuration/ConfigurationTest.java +++ b/fhir-audit/src/test/java/com/ibm/fhir/audit/configuration/ConfigurationTest.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2020 + * (C) Copyright IBM Corp. 2020, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -8,9 +8,9 @@ import static org.junit.Assert.assertNotNull; import static org.testng.Assert.assertEquals; -import javax.json.Json; -import javax.json.JsonBuilderFactory; -import javax.json.JsonObject; +import jakarta.json.Json; +import jakarta.json.JsonBuilderFactory; +import jakarta.json.JsonObject; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; diff --git a/fhir-audit/src/test/java/com/ibm/fhir/audit/environment/KafkaEnvironmentTest.java b/fhir-audit/src/test/java/com/ibm/fhir/audit/environment/KafkaEnvironmentTest.java index 497f0e01040..5f35f7578fd 100644 --- a/fhir-audit/src/test/java/com/ibm/fhir/audit/environment/KafkaEnvironmentTest.java +++ b/fhir-audit/src/test/java/com/ibm/fhir/audit/environment/KafkaEnvironmentTest.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2020 + * (C) Copyright IBM Corp. 2020, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -9,9 +9,9 @@ import java.util.Properties; -import javax.json.Json; -import javax.json.JsonBuilderFactory; -import javax.json.JsonObject; +import jakarta.json.Json; +import jakarta.json.JsonBuilderFactory; +import jakarta.json.JsonObject; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; diff --git a/fhir-benchmark/pom.xml b/fhir-benchmark/pom.xml index f70b7122b4b..162f02ca502 100644 --- a/fhir-benchmark/pom.xml +++ b/fhir-benchmark/pom.xml @@ -5,7 +5,7 @@ com.ibm.fhir fhir-benchmark - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT jar IBM FHIR Server - FHIR Benchmark @@ -14,7 +14,7 @@ true UTF-8 - 1.21 + 1.32 1.8 @@ -38,17 +38,17 @@ com.ibm.fhir fhir-model - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT com.ibm.fhir fhir-examples - 4.8.0-SNAPSHOT + 4.8.2 com.ibm.fhir fhir-validation - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT diff --git a/fhir-benchmark/src/main/java/com/ibm/fhir/benchmark/FHIRIndexParserBenchmark.java b/fhir-benchmark/src/main/java/com/ibm/fhir/benchmark/FHIRIndexParserBenchmark.java new file mode 100644 index 00000000000..24f4cb56b68 --- /dev/null +++ b/fhir-benchmark/src/main/java/com/ibm/fhir/benchmark/FHIRIndexParserBenchmark.java @@ -0,0 +1,127 @@ +/* + * (C) Copyright IBM Corp. 2019, 2021 + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.ibm.fhir.benchmark; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; + +import org.apache.commons.io.IOUtils; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; + +import com.ibm.fhir.benchmark.runner.FHIRBenchmarkRunner; +import com.ibm.fhir.examples.ExamplesUtil; +import com.ibm.fhir.examples.Index; +import com.ibm.fhir.model.format.Format; +import com.ibm.fhir.model.parser.FHIRParser; +import com.ibm.fhir.model.parser.exception.FHIRParserException; + + +public class FHIRIndexParserBenchmark { + @State(Scope.Benchmark) + public static class FHIRParserState { + public static final Index INDEX = Index.PROFILES_PDEX_PLAN_NET_JSON; + + Set JSON_SPEC_EXAMPLES = new HashSet<>(); + + @Setup + public void setUp() throws IOException { + System.out.println("Setting up for index " + INDEX); + + // Each line of the index file should be a path to an example resource and an expected outcome + try (BufferedReader br = new BufferedReader(ExamplesUtil.indexReader(INDEX))) { + String line; + + while ((line = br.readLine()) != null) { + String[] tokens = line.split("\\s+"); + if (tokens.length == 2) { + String expectation = tokens[0]; + String example = tokens[1]; + if ("OK".equals(expectation)) { + Reader resourceReader = ExamplesUtil.resourceReader(example); + JSON_SPEC_EXAMPLES.add(IOUtils.toString(resourceReader)); + } + } + } + } + } + } + + @Benchmark + public Set benchmarkJsonParserStream(FHIRParserState state) throws Exception { + return state.JSON_SPEC_EXAMPLES.stream() + .map(s -> new StringReader(s)) + .map(r -> { + try { + FHIRParser parser = FHIRParser.parser(Format.JSON); + return parser.parse(r); + } catch (FHIRParserException e) { + throw new RuntimeException("exception during parse", e); + } + }) + .collect(Collectors.toSet()); + } + + @Benchmark + public Set benchmarkJsonParserStreamParallel(FHIRParserState state) throws Exception { + return state.JSON_SPEC_EXAMPLES.parallelStream() + .map(s -> new StringReader(s)) + .map(r -> { + try { + FHIRParser parser = FHIRParser.parser(Format.JSON); + return parser.parse(r); + } catch (FHIRParserException e) { + throw new RuntimeException("exception during parse", e); + } + }) + .collect(Collectors.toSet()); + } + + @Benchmark + public Set benchmarkJsonParserNonValidatingStream(FHIRParserState state) throws Exception { + return state.JSON_SPEC_EXAMPLES.stream() + .map(s -> new StringReader(s)) + .map(r -> { + try { + FHIRParser parser = FHIRParser.parser(Format.JSON); + parser.setValidating(false); + return parser.parse(r); + } catch (FHIRParserException e) { + throw new RuntimeException("exception during parse", e); + } + }) + .collect(Collectors.toSet()); + } + + @Benchmark + public Set benchmarkJsonParserNonValidatingStreamParallel(FHIRParserState state) throws Exception { + return state.JSON_SPEC_EXAMPLES.parallelStream() + .map(s -> new StringReader(s)) + .map(r -> { + try { + FHIRParser parser = FHIRParser.parser(Format.JSON); + parser.setValidating(false); + return parser.parse(r); + } catch (FHIRParserException e) { + throw new RuntimeException("exception during parse", e); + } + }) + .collect(Collectors.toSet()); + } + + + public static void main(String[] args) throws Exception { + new FHIRBenchmarkRunner(FHIRIndexParserBenchmark.class).run(); + } +} diff --git a/fhir-benchmark/src/main/java/com/ibm/fhir/benchmark/FHIRParserBenchmark.java b/fhir-benchmark/src/main/java/com/ibm/fhir/benchmark/FHIRParserBenchmark.java index eaf43fbcccf..b68374e6ec3 100644 --- a/fhir-benchmark/src/main/java/com/ibm/fhir/benchmark/FHIRParserBenchmark.java +++ b/fhir-benchmark/src/main/java/com/ibm/fhir/benchmark/FHIRParserBenchmark.java @@ -1,16 +1,17 @@ /* - * (C) Copyright IBM Corp. 2019 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ package com.ibm.fhir.benchmark; +import static com.ibm.fhir.benchmark.runner.FHIRBenchmarkRunner.PROPERTY_EXAMPLE_NAME; + import java.io.IOException; import java.io.StringReader; import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; @@ -31,23 +32,18 @@ public static class FHIRParsers { FHIRParser jsonParser = FHIRParser.parser(Format.JSON); FHIRParser xmlParser = FHIRParser.parser(Format.XML); } - + @State(Scope.Benchmark) public static class FHIRParserState { + public static final String SPEC_EXAMPLE_NAME = System.getProperty(PROPERTY_EXAMPLE_NAME); + FhirContext context; String JSON_SPEC_EXAMPLE; String XML_SPEC_EXAMPLE; - - // JMH will inject the value into the annotated field before any Setup method is called. - @Param({"valuesets"}) - public String exampleName; - + @Setup public void setUp() throws IOException { - if (exampleName == null) { - System.err.println("exampleName is null; if you're in Eclipse then make sure annotation processing is on and you've ran 'mvn clean package'."); - System.exit(1); - } + String exampleName = SPEC_EXAMPLE_NAME; System.out.println("Setting up for example " + exampleName); context = FhirContext.forR4(); context.setParserErrorHandler(new StrictErrorHandler()); @@ -55,28 +51,44 @@ public void setUp() throws IOException { XML_SPEC_EXAMPLE = BenchmarkUtil.getSpecExample(Format.XML, exampleName); } } - + @Benchmark public Resource benchmarkJsonParser(FHIRParsers parsers, FHIRParserState state) throws Exception { + parsers.jsonParser.setValidating(true); return parsers.jsonParser.parse(new StringReader(state.JSON_SPEC_EXAMPLE)); } - + + @Benchmark + public Resource benchmarkJsonParserNonValidating(FHIRParsers parsers, FHIRParserState state) throws Exception { + parsers.jsonParser.setValidating(false); + return parsers.jsonParser.parse(new StringReader(state.JSON_SPEC_EXAMPLE)); + } + @Benchmark public Resource benchmarkXMLParser(FHIRParsers parsers, FHIRParserState state) throws Exception { + parsers.xmlParser.setValidating(true); + return parsers.xmlParser.parse(new StringReader(state.XML_SPEC_EXAMPLE)); + } + + @Benchmark + public Resource benchmarkXMLParserNonValidating(FHIRParsers parsers, FHIRParserState state) throws Exception { + parsers.xmlParser.setValidating(false); return parsers.xmlParser.parse(new StringReader(state.XML_SPEC_EXAMPLE)); } - + @Benchmark public void benchmarkHAPIJsonParser(FHIRParserState state) throws Exception { state.context.newJsonParser().parseResource(new StringReader(state.JSON_SPEC_EXAMPLE)); } - + @Benchmark public void benchmarkHAPIXMLParser(FHIRParserState state) throws Exception { state.context.newXmlParser().parseResource(new StringReader(state.XML_SPEC_EXAMPLE)); } - + public static void main(String[] args) throws Exception { - new FHIRBenchmarkRunner(FHIRParserBenchmark.class).run(); + new FHIRBenchmarkRunner(FHIRParserBenchmark.class) + .property(PROPERTY_EXAMPLE_NAME, BenchmarkUtil.getRandomSpecExampleName()) + .run(); } } diff --git a/fhir-benchmark/src/main/java/com/ibm/fhir/benchmark/FHIRPatchBenchmark.java b/fhir-benchmark/src/main/java/com/ibm/fhir/benchmark/FHIRPatchBenchmark.java index 78296b88aec..0dc22cbe7ef 100644 --- a/fhir-benchmark/src/main/java/com/ibm/fhir/benchmark/FHIRPatchBenchmark.java +++ b/fhir-benchmark/src/main/java/com/ibm/fhir/benchmark/FHIRPatchBenchmark.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -9,10 +9,10 @@ import java.io.StringReader; import java.time.Instant; -import javax.json.Json; -import javax.json.JsonBuilderFactory; -import javax.json.JsonObject; -import javax.json.spi.JsonProvider; +import jakarta.json.Json; +import jakarta.json.JsonBuilderFactory; +import jakarta.json.JsonObject; +import jakarta.json.spi.JsonProvider; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Param; diff --git a/fhir-bucket/pom.xml b/fhir-bucket/pom.xml index 67d9c8021ec..2389ec0dbcf 100644 --- a/fhir-bucket/pom.xml +++ b/fhir-bucket/pom.xml @@ -7,7 +7,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../fhir-parent diff --git a/fhir-bulkdata-webapp/pom.xml b/fhir-bulkdata-webapp/pom.xml index c83eff78329..1c0b7e0cbb8 100644 --- a/fhir-bulkdata-webapp/pom.xml +++ b/fhir-bulkdata-webapp/pom.xml @@ -8,7 +8,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../fhir-parent @@ -107,6 +107,25 @@ fhir-provider ${project.version} + + + com.azure + azure-storage-blob + + + com.azure + azure-core-http-netty + + + + + com.azure + azure-core-http-okhttp + + + com.azure + azure-core + org.apache.spark spark-sql_2.12 diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/common/BulkDataUtils.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/common/BulkDataUtils.java index 637c9b99269..67707fba3a4 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/common/BulkDataUtils.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/common/BulkDataUtils.java @@ -15,11 +15,9 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; -import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Base64; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -28,18 +26,16 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonReader; +import jakarta.json.Json; +import jakarta.json.JsonArray; +import jakarta.json.JsonReader; import com.ibm.cloud.objectstorage.services.s3.AmazonS3; import com.ibm.cloud.objectstorage.services.s3.model.AbortMultipartUploadRequest; -import com.ibm.cloud.objectstorage.services.s3.model.CannedAccessControlList; import com.ibm.cloud.objectstorage.services.s3.model.CompleteMultipartUploadRequest; import com.ibm.cloud.objectstorage.services.s3.model.GetObjectRequest; import com.ibm.cloud.objectstorage.services.s3.model.InitiateMultipartUploadRequest; import com.ibm.cloud.objectstorage.services.s3.model.InitiateMultipartUploadResult; -import com.ibm.cloud.objectstorage.services.s3.model.ObjectMetadata; import com.ibm.cloud.objectstorage.services.s3.model.PartETag; import com.ibm.cloud.objectstorage.services.s3.model.S3Object; import com.ibm.cloud.objectstorage.services.s3.model.S3ObjectInputStream; @@ -76,20 +72,11 @@ private static void log(String method, Object msg) { logger.info(method + ": " + String.valueOf(msg)); } - public static String startPartUpload(AmazonS3 cosClient, String bucketName, String itemName, boolean isPublicAccess) throws Exception { + public static String startPartUpload(AmazonS3 cosClient, String bucketName, String itemName) throws Exception { try { log("startPartUpload", "Start multi-part upload for " + itemName + " to bucket - " + bucketName); InitiateMultipartUploadRequest initMultipartUploadReq = new InitiateMultipartUploadRequest(bucketName, itemName); - if (isPublicAccess) { - initMultipartUploadReq.setCannedACL(CannedAccessControlList.PublicRead); - ObjectMetadata metadata = new ObjectMetadata(); - // Set expiration time to 2 hours(7200 seconds). - // Note: IBM COS doesn't honor this but also doesn't fail on this. - metadata.setExpirationTime(Date.from(Instant.now().plusSeconds(7200))); - initMultipartUploadReq.setObjectMetadata(metadata); - } - InitiateMultipartUploadResult mpResult = cosClient.initiateMultipartUpload(initMultipartUploadReq); return mpResult.getUploadId(); } catch (Exception sdke) { diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/export/patient/resource/PatientResourceHandler.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/export/patient/resource/PatientResourceHandler.java index 4e9a7fe0f5e..45eab8be72a 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/export/patient/resource/PatientResourceHandler.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/export/patient/resource/PatientResourceHandler.java @@ -76,7 +76,7 @@ public void register(ExportTransientUserData chunkData, BulkDataContext ctx, FHI * @param patientIds the patient ids to use to scope the search * @throws Exception */ - public List executeSearch(List patientIds) throws Exception { + public List executeSearch(Set patientIds) throws Exception { List>> typeFilters = searchParametersForResoureTypes.get(resourceType); boolean isDoDuplicationCheck = typeFilters != null && typeFilters.size() > 1 ? true : adapter.shouldStorageProviderCheckDuplicate(ctx.getSource()); diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/context/BatchContextAdapter.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/context/BatchContextAdapter.java index fc542665f24..3e45fd1e674 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/context/BatchContextAdapter.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/context/BatchContextAdapter.java @@ -187,7 +187,7 @@ private void source(BulkDataContext ctx) { private void addImport(BulkDataContext ctx) { ctx.setPartitionResourceType(props.getProperty(OperationFields.PARTITION_RESOURCETYPE)); - ctx.setImportPartitionWorkitem(props.getProperty(OperationFields.PARTITTION_WORKITEM)); + ctx.setImportPartitionWorkitem(props.getProperty(OperationFields.PARTITION_WORKITEM)); ctx.setDataSourceStorageType(props.getProperty(OperationFields.FHIR_IMPORT_STORAGE_TYPE)); } } \ No newline at end of file diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/fast/ResourcePayloadReader.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/fast/ResourcePayloadReader.java index ed241b660b0..42c7f877f42 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/fast/ResourcePayloadReader.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/fast/ResourcePayloadReader.java @@ -38,6 +38,8 @@ import com.ibm.fhir.bulkdata.jbatch.export.fast.checkpoint.ResourceExportCheckpointAlgorithm; import com.ibm.fhir.bulkdata.jbatch.export.fast.data.CheckpointUserData; import com.ibm.fhir.bulkdata.jbatch.export.fast.data.TransientUserData; +import com.ibm.fhir.bulkdata.provider.Provider; +import com.ibm.fhir.bulkdata.provider.impl.AzureProvider; import com.ibm.fhir.bulkdata.provider.impl.S3Provider; import com.ibm.fhir.model.resource.Resource; import com.ibm.fhir.model.util.ModelSupport; @@ -45,6 +47,7 @@ import com.ibm.fhir.operation.bulkdata.config.ConfigurationFactory; import com.ibm.fhir.operation.bulkdata.model.type.BulkDataContext; import com.ibm.fhir.operation.bulkdata.model.type.OperationFields; +import com.ibm.fhir.operation.bulkdata.model.type.StorageType; import com.ibm.fhir.persistence.FHIRPersistence; import com.ibm.fhir.persistence.ResourcePayload; import com.ibm.fhir.persistence.helper.FHIRPersistenceHelper; @@ -86,8 +89,8 @@ public class ResourcePayloadReader extends AbstractItemReader { private BulkAuditLogger auditLogger = new BulkAuditLogger(); - // S3 client API to IBM Cloud Object Storage - private S3Provider wrapper = null; + // Provider client API to IBM Cloud Object Storage or Azure + private Provider provider = null; private AmazonS3 cosClient = null; // The handle to the persistence instance used to fetch the resources we want to export @@ -99,7 +102,6 @@ public class ResourcePayloadReader extends AbstractItemReader { private BulkDataContext ctx = null; String fhirResourceType; - private boolean isExportPublic = true; String cosBucketName; String cosBucketPathPrefix; @@ -263,14 +265,15 @@ public void open(Serializable checkpoint) throws Exception { fhirPersistence = fhirPersistenceHelper.getFHIRPersistenceImplementation(); resourceType = ModelSupport.getResourceType(fhirResourceType); - isExportPublic = adapter.isStorageProviderExportPublic(source); - - wrapper = new S3Provider(source); - - // Make sure we have the bucket and conditionally create it. - wrapper.createSource(); - - cosClient = wrapper.getClient(); + if (StorageType.AZURE == adapter.getStorageProviderStorageType(source)) { + provider = new AzureProvider(source); + } else { + // Make sure we have the bucket and conditionally create it. + S3Provider s3 = new S3Provider(source); + cosClient = s3.getClient(); + provider = s3; + } + provider.createSource(); } @Override @@ -322,7 +325,7 @@ public Object readItem() throws Exception { if (!isTxTimeExpired()) { // The fetchResourcePayloads returned before the tx time expired, so // we really don't have any more data - logger.fine(logPrefix() + " no more data"); + logger.fine(() -> logPrefix() + " no more data"); moreData = false; } } @@ -366,7 +369,6 @@ public Object readItem() throws Exception { * @return */ public Boolean processPayload(ResourcePayload t) { - try { // Track resources we've seen on the most recent timestamp. Resources will be fed // in timestamp order, but not necessarily resource order, so we need to skip resources @@ -444,16 +446,22 @@ protected boolean isTxTimeExpired() { private void uploadWhenReady() throws Exception { // Initiate the upload if we don't have one active if (this.uploadId == null) { - // Start a new upload - if (cosBucketPathPrefix != null && cosBucketPathPrefix.trim().length() > 0) { - this.currentObjectName = cosBucketPathPrefix + "/" + fhirResourceType + "_" + this.currentUploadNumber + ".ndjson"; - } else { - this.currentObjectName = "job" + jobContext.getExecutionId() + "/" + fhirResourceType + "_" + this.currentUploadNumber + ".ndjson"; - } - uploadId = BulkDataUtils.startPartUpload(cosClient, cosBucketName, this.currentObjectName, isExportPublic); + if (cosClient != null) { + // Start a new upload + if (cosBucketPathPrefix != null && cosBucketPathPrefix.trim().length() > 0) { + this.currentObjectName = cosBucketPathPrefix + "/" + fhirResourceType + "_" + this.currentUploadNumber + ".ndjson"; + } else { + this.currentObjectName = "job" + jobContext.getExecutionId() + "/" + fhirResourceType + "_" + this.currentUploadNumber + ".ndjson"; + } + uploadId = BulkDataUtils.startPartUpload(cosClient, cosBucketName, this.currentObjectName); - if (logger.isLoggable(Level.FINE)) { - logger.fine(logPrefix() + " Started new multi-part upload: '" + this.uploadId + "'"); + if (logger.isLoggable(Level.FINE)) { + logger.fine(logPrefix() + " Started new multi-part upload: '" + this.uploadId + "'"); + } + } else if (provider instanceof AzureProvider) { + // Must be Azure + uploadId = "azure"; + currentObjectName = cosBucketPathPrefix + "/" + fhirResourceType + "_" + this.currentUploadNumber + ".ndjson"; } } @@ -462,10 +470,30 @@ private void uploadWhenReady() throws Exception { // upload would take too long and exceed our transaction // timeout. if (this.ioBuffer.size() > this.partUploadTriggerSize) { - uploadPart(); + if (cosClient != null) { + uploadPart(); + } else { + uploadPartToAzure(); + } } } + /** + * writes to Azure blob + * @throws Exception + */ + private void uploadPartToAzure() throws Exception { + // Azure API: Part number must be an integer between 1 and 10000 + int currentObjectPartNumber = uploadedParts.size() + 1; + logger.fine(() -> logPrefix() + " Uploading part# " + currentObjectPartNumber + " ["+ ioBuffer.size() + " bytes] for uploadId '" + uploadId + "'"); + + // The ioBuffer can provide us with an InputStream without having to copy the byte-buffer + InputStream in = ioBuffer.inputStream(); + AzureProvider pro = (AzureProvider) provider; + pro.writeDirectly(currentObjectName, in, ioBuffer.size()); + ioBuffer.reset(); + } + /** * Upload the contents of the outputStream (data buffer) using the current multi-part upload * @throws Exception @@ -473,9 +501,7 @@ private void uploadWhenReady() throws Exception { private void uploadPart() throws Exception { // S3 API: Part number must be an integer between 1 and 10000 int currentObjectPartNumber = uploadedParts.size() + 1; - if (logger.isLoggable(Level.FINE)) { - logger.fine(logPrefix() + " Uploading part# " + currentObjectPartNumber + " ["+ ioBuffer.size() + " bytes] for uploadId '" + uploadId + "'"); - } + logger.fine(() -> logPrefix() + " Uploading part# " + currentObjectPartNumber + " ["+ ioBuffer.size() + " bytes] for uploadId '" + uploadId + "'"); // The ioBuffer can provide us with an InputStream without having to copy the byte-buffer InputStream is = ioBuffer.inputStream(); @@ -495,15 +521,20 @@ private void completeCurrentUpload() throws Exception { // upload any final amount of data we have in the buffer if (this.ioBuffer.size() > 0) { - logger.fine(logPrefix() + " uploading final part for '" + this.uploadId + "'"); - uploadPart(); + logger.fine(() -> logPrefix() + " uploading final part for '" + this.uploadId + "'"); + if (cosClient != null) { + uploadPart(); + } else { + uploadPartToAzure(); + } } // Ask COS to finalize the upload for the current object. try { - logger.fine(logPrefix() + " finishing multi-part upload '" + this.uploadId + "'"); - BulkDataUtils.finishMultiPartUpload(cosClient, cosBucketName, currentObjectName, uploadId, - uploadedParts); + logger.fine(() -> logPrefix() + " finishing multi-part upload '" + this.uploadId + "'"); + if (cosClient != null) { + BulkDataUtils.finishMultiPartUpload(cosClient, cosBucketName, currentObjectName, uploadId, uploadedParts); + } // record how many resources we've exported for COS object. This is // used by the collector/analyzer to generate a list of objects. Inherited from @@ -522,7 +553,7 @@ private void resetUploadState() { // Note this only resets the state related to upload...it does not and // should not affect the state related to reading because we might still // have more data to process and upload into a new COS object. - logger.fine(logPrefix() + " resetting state so we are ready to upload the next object"); + logger.fine(() -> logPrefix() + " resetting state so we are ready to upload the next object"); this.uploadedParts.clear(); this.uploadId = null; this.currentObjectName = null; diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/group/ChunkReader.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/group/ChunkReader.java index dff3d71d3ae..2500bcba788 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/group/ChunkReader.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/group/ChunkReader.java @@ -148,7 +148,7 @@ public Object readItem() throws Exception { if (!patientIds.isEmpty()) { patientHandler.register(chunkData, ctx, getPersistence(), pageSize, resourceType, searchParametersForResoureTypes, ctx.getSource()); - List resources = patientHandler.executeSearch(new ArrayList<>(patientIds)); + List resources = patientHandler.executeSearch(patientIds); if (FHIRMediaType.APPLICATION_PARQUET.equals(ctx.getFhirExportFormat())) { dto.setResources(resources); } diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/patient/ChunkReader.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/patient/ChunkReader.java index 33b7cb7ba56..3394a96d380 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/patient/ChunkReader.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/patient/ChunkReader.java @@ -241,9 +241,9 @@ public Object readItem() throws Exception { logger.fine("readItem[" + ctx.getPartitionResourceType() + "]: loaded " + patientResources.size() + " patients"); } - List patientIds = patientResources.stream() + Set patientIds = patientResources.stream() .map(item -> item.getId()) - .collect(Collectors.toList()); + .collect(Collectors.toSet()); if (!patientIds.isEmpty()) { handler.register(chunkData, ctx, fhirPersistence, pageSize, resourceType, searchParametersForResoureTypes, ctx.getSource()); diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/system/ChunkWriter.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/system/ChunkWriter.java index 5b678fdbbbc..7350d3712bd 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/system/ChunkWriter.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/export/system/ChunkWriter.java @@ -36,8 +36,6 @@ */ @Dependent public class ChunkWriter extends AbstractItemWriter { - private boolean isExportPublic = true; - private BulkDataContext ctx = null; private Provider wrapper = null; @@ -93,7 +91,7 @@ public void writeItems(List resourceLists) throws Exception { wrapper.createSource(); ExportTransientUserData chunkData = (ExportTransientUserData) stepCtx.getTransientUserData(); - wrapper.registerTransient(executionId, chunkData, cosBucketPathPrefix, fhirResourceType, isExportPublic); + wrapper.registerTransient(executionId, chunkData, cosBucketPathPrefix, fhirResourceType); if (!resourceLists.stream().allMatch(ReadResultDTO.class::isInstance)) { throw new IllegalStateException("Expected a list of ReadResultDTO"); diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/listener/StepChunkListener.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/listener/StepChunkListener.java index 4a02b6b92a1..f6a8126afcb 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/listener/StepChunkListener.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/listener/StepChunkListener.java @@ -3,6 +3,7 @@ * * SPDX-License-Identifier: Apache-2.0 */ + package com.ibm.fhir.bulkdata.jbatch.listener; import java.util.logging.Level; @@ -14,13 +15,12 @@ import javax.enterprise.context.Dependent; import javax.inject.Inject; - /** * Enables Logging for the Given Step */ @Dependent public class StepChunkListener implements ChunkListener { - private final static Logger logger = Logger.getLogger(StepChunkListener.class.getName()); + private static final Logger logger = Logger.getLogger(StepChunkListener.class.getName()); @Inject StepContext stepCtx; @@ -38,7 +38,7 @@ public void onError(Exception ex) throws Exception { long stepExecutionId = stepCtx.getStepExecutionId(); long jobExecutionId = jobCtx.getInstanceId(); logger.log(Level.SEVERE, "StepChunkListener: job[" + jobCtx.getJobName() + "/" + jobExecutionId + "/" + stepExecutionId + "] --- " + ex.getMessage(), ex); - // Enable PrintStackTrace when debugging in dev - ex.printStackTrace(); + logger.throwing("StepChunkListener", "onError", ex); } @Override diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ChunkReader.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ChunkReader.java index 4580ce0a2e3..a836c5af4ba 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ChunkReader.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ChunkReader.java @@ -49,7 +49,7 @@ public class ChunkReader extends AbstractItemReader { @Inject @Any - @BatchProperty(name = OperationFields.PARTITTION_WORKITEM) + @BatchProperty(name = OperationFields.PARTITION_WORKITEM) private String workItem; @Inject @@ -57,6 +57,11 @@ public class ChunkReader extends AbstractItemReader { @BatchProperty(name = OperationFields.PARTITION_RESOURCETYPE) private String resourceType; + @Inject + @Any + @BatchProperty(name = OperationFields.PARTITION_MATRIX) + private String matrix; + long numOfLinesToSkip = 0; private BulkDataContext ctx = null; @@ -89,6 +94,7 @@ public void open(Serializable checkpoint) throws Exception { } else { ImportTransientUserData chunkData = ImportTransientUserData.Builder.builder() .importPartitionWorkitem(ctx.getImportPartitionWorkitem()) + .matrixWorkItem(matrix) .numOfProcessedResources(numOfLinesToSkip) .importPartitionResourceType(ctx.getPartitionResourceType()) // This naming pattern is used in bulkdata operation to generate file links for import @@ -135,6 +141,7 @@ public Object readItem() throws Exception { ImportTransientUserData chunkData = (ImportTransientUserData) stepCtx.getTransientUserData(); numOfLinesToSkip = chunkData.getNumOfProcessedResources(); + logger.fine(() -> "Number of lines to skip are: '" + numOfLinesToSkip + "'"); Provider wrapper = ProviderFactory.getSourceWrapper(ctx.getSource(), ctx.getDataSourceStorageType()); wrapper.registerTransient(chunkData); diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ChunkWriter.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ChunkWriter.java index 25d69dab882..21c420ad867 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ChunkWriter.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ChunkWriter.java @@ -6,10 +6,14 @@ package com.ibm.fhir.bulkdata.jbatch.load; +import static com.ibm.fhir.model.type.String.string; + import java.io.Serializable; import java.sql.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -36,8 +40,14 @@ import com.ibm.fhir.model.format.Format; import com.ibm.fhir.model.generator.FHIRGenerator; import com.ibm.fhir.model.resource.OperationOutcome; +import com.ibm.fhir.model.resource.OperationOutcome.Issue; import com.ibm.fhir.model.resource.Resource; +import com.ibm.fhir.model.type.CodeableConcept; +import com.ibm.fhir.model.type.code.IssueSeverity; +import com.ibm.fhir.model.type.code.IssueType; import com.ibm.fhir.model.util.FHIRUtil; +import com.ibm.fhir.model.util.SaltHash; +import com.ibm.fhir.model.visitor.ResourceFingerprintVisitor; import com.ibm.fhir.operation.bulkdata.config.ConfigurationAdapter; import com.ibm.fhir.operation.bulkdata.config.ConfigurationFactory; import com.ibm.fhir.operation.bulkdata.model.type.BulkDataContext; @@ -46,6 +56,7 @@ import com.ibm.fhir.persistence.FHIRPersistence; import com.ibm.fhir.persistence.context.FHIRPersistenceContext; import com.ibm.fhir.persistence.context.FHIRPersistenceContextFactory; +import com.ibm.fhir.persistence.exception.FHIRPersistenceException; import com.ibm.fhir.persistence.helper.FHIRPersistenceHelper; import com.ibm.fhir.persistence.helper.FHIRTransactionHelper; import com.ibm.fhir.validation.exception.FHIRValidationException; @@ -70,9 +81,14 @@ public class ChunkWriter extends AbstractItemWriter { @Inject @Any - @BatchProperty (name = OperationFields.PARTITTION_WORKITEM) + @BatchProperty (name = OperationFields.PARTITION_WORKITEM) private String workItem; + @Inject + @Any + @BatchProperty(name = OperationFields.PARTITION_MATRIX) + private String matrix; + @Inject @Any @BatchProperty (name = OperationFields.PARTITION_RESOURCETYPE) @@ -163,8 +179,11 @@ public void writeItems(List arg0) throws Exception { // Similar code @see ImportPartitionCollector StorageType type = adapter.getStorageProviderStorageType(ctx.getOutcome()); boolean collectImportOperationOutcomes = adapter.shouldStorageProviderCollectOperationOutcomes(ctx.getSource()) - && (StorageType.AWSS3.equals(type) || StorageType.IBMCOS.equals(type)); + && (StorageType.AWSS3.equals(type) || StorageType.IBMCOS.equals(type) || StorageType.AZURE.equals(type)); + // Get the Skippable Update status + boolean skip = adapter.enableSkippableUpdates(); + Map localCache = new HashMap<>(); try { for (Object objResJsonList : arg0) { @SuppressWarnings("unchecked") @@ -190,8 +209,7 @@ public void writeItems(List arg0) throws Exception { } } else { long startTime = System.currentTimeMillis(); - operationOutcome = - fhirPersistence.update(persistenceContext, id, fhirResource).getOutcome(); + operationOutcome = conditionalFingerprintUpdate(chunkData, skip, localCache, fhirPersistence, persistenceContext, id, fhirResource); if (auditLogger.shouldLog()) { long endTime = System.currentTimeMillis(); String location = "@source:" + ctx.getSource() + "/" + ctx.getImportPartitionWorkitem(); @@ -236,9 +254,10 @@ public void writeItems(List arg0) throws Exception { // Pushes to the Outcome Site if (collectImportOperationOutcomes) { - Provider wrapper = ProviderFactory.getSourceWrapper(ctx.getOutcome(), "ibm-cos"); - wrapper.registerTransient(chunkData); - wrapper.pushOperationOutcomes(); + Provider provider = ProviderFactory.getSourceWrapper(ctx.getOutcome(), + ConfigurationFactory.getInstance().getStorageProviderType(ctx.getOutcome())); + provider.registerTransient(chunkData); + provider.pushOperationOutcomes(); } } catch (FHIRException e) { logger.log(Level.SEVERE, "Import ChunkWriter.writeItems during job[" + executionId + "] - " + e.getMessage(), e); @@ -248,4 +267,76 @@ public void writeItems(List arg0) throws Exception { throw e; } } + + /** + * conditional update checks to see if our cache contains the key, if not reads from the db, and calculates the cache. + * The cache is saved within the context of this particular execution, and then destroyed. + * + * @implNote considered using a shared cache, a few things with that to consider: + * 1 - the shared cache would have to be updated at the end of a transaction (we don't control it). + * 2 - we would have to use a transaction sync registry to control the synchronization of the cache. + * 3 - Instead, we're doing a read then update. + * + * @param chunkData the transient user data used increment the number of skips + * @param skip should skip the resource if it matches + * @param localCache map containing the key-saltHash + * @param persistence used to facilitate the calls to the underlying db + * @param context used in db calls + * @param logicalId the logical id of the FHIR resource (e.g. 1-2-3-4) + * @param resource the FHIR Resource + * @return outcomes including information or warnings + * @throws FHIRPersistenceException + */ + public OperationOutcome conditionalFingerprintUpdate(ImportTransientUserData chunkData, boolean skip, Map localCache, FHIRPersistence persistence, FHIRPersistenceContext context, String logicalId, Resource resource) throws FHIRPersistenceException { + OperationOutcome oo; + if (!skip) { + // Key is scoped to the ResourceType. + String key = resourceType + "/" + logicalId; + SaltHash oldBaseLine = localCache.get(key); + + Resource oldResource = null; + ResourceFingerprintVisitor fp = new ResourceFingerprintVisitor(); + if (oldBaseLine == null) { + // Go get the latest resource in the database and fingerprint the resource. + // If the resource exists, then we need to fingerprint. + oldResource = persistence.read(context, resource.getClass(), logicalId).getResource(); + if (oldResource != null) { + ResourceFingerprintVisitor fpOld = new ResourceFingerprintVisitor(); + oldResource.accept(fpOld); + oldBaseLine = fpOld.getSaltAndHash(); + fp = new ResourceFingerprintVisitor(oldBaseLine); + } + } + + resource.accept(fp); + SaltHash newBaseLine = fp.getSaltAndHash(); + + if (oldBaseLine != null && oldBaseLine.equals(newBaseLine)) { + if (logger.isLoggable(Level.FINE)) { + logger.fine("Skipping $import - update for '" + key + "'"); + } + chunkData.addToNumOfSkippedResources(1); + oo = OperationOutcome.builder() + .issue(Issue.builder() + .severity(IssueSeverity.INFORMATION) + .code(IssueType.INFORMATIONAL) + .details(CodeableConcept.builder() + .text(string("Update resource matches the existing resource; skipping the update for '" + key + "'")) + .build()) + .build()) + .build(); + } else { + // We need to update the db and update the local cache + if (oldResource != null) { + // Old Resource is set so we avoid an extra read + context.getPersistenceEvent().setPrevFhirResource(oldResource); + } + oo = persistence.update(context, logicalId, resource).getOutcome(); + localCache.put(key, newBaseLine); + } + } else { + oo = persistence.update(context, logicalId, resource).getOutcome(); + } + return oo; + } } \ No newline at end of file diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ImportJobListener.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ImportJobListener.java index 5dc65463040..e109840fd0f 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ImportJobListener.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ImportJobListener.java @@ -13,11 +13,12 @@ import javax.batch.api.listener.JobListener; import javax.batch.operations.JobOperator; import javax.batch.runtime.BatchRuntime; +import javax.batch.runtime.BatchStatus; import javax.batch.runtime.JobExecution; import javax.batch.runtime.context.JobContext; import javax.enterprise.context.Dependent; import javax.inject.Inject; -import javax.json.JsonArray; +import jakarta.json.JsonArray; import com.ibm.fhir.bulkdata.common.BulkDataUtils; import com.ibm.fhir.bulkdata.jbatch.context.BatchContextAdapter; @@ -48,6 +49,10 @@ public void beforeJob() { @Override public void afterJob() { + if (BatchStatus.FAILED.equals(jobCtx.getBatchStatus())) { + return; + } + long executionId = -1; try { executionId = jobCtx.getExecutionId(); @@ -89,4 +94,4 @@ public void afterJob() { throw e; } } -} \ No newline at end of file +} diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ImportPartitionCollector.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ImportPartitionCollector.java index cc77c05ae04..4e5f663efe2 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ImportPartitionCollector.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ImportPartitionCollector.java @@ -90,7 +90,7 @@ public Serializable collectPartitionData() throws Exception { if (partitionSummaryData.getBufferStreamForImport().size() > 0) { if (partitionSummaryData.getUploadIdForOperationOutcomes() == null) { partitionSummaryData.setUploadIdForOperationOutcomes(BulkDataUtils.startPartUpload(wrapper.getClient(), - cosOperationOutcomesBucketName, partitionSummaryData.getUniqueIDForImportOperationOutcomes(), true)); + cosOperationOutcomesBucketName, partitionSummaryData.getUniqueIDForImportOperationOutcomes())); } partitionSummaryData.getDataPacksForOperationOutcomes().add(BulkDataUtils.multiPartUpload(wrapper.getClient(), @@ -117,7 +117,7 @@ public Serializable collectPartitionData() throws Exception { if (partitionSummaryData.getBufferStreamForImportError().size() > 0) { if (partitionSummaryData.getUploadIdForFailureOperationOutcomes() == null) { partitionSummaryData.setUploadIdForFailureOperationOutcomes(BulkDataUtils.startPartUpload(wrapper.getClient(), - cosOperationOutcomesBucketName, partitionSummaryData.getUniqueIDForImportFailureOperationOutcomes(), true)); + cosOperationOutcomesBucketName, partitionSummaryData.getUniqueIDForImportFailureOperationOutcomes())); } partitionSummaryData.getDataPacksForFailureOperationOutcomes().add(BulkDataUtils.multiPartUpload(wrapper.getClient(), diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ImportPartitionMapper.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ImportPartitionMapper.java index 3344b9761ec..2d3aa17f994 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ImportPartitionMapper.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/ImportPartitionMapper.java @@ -6,7 +6,6 @@ package com.ibm.fhir.bulkdata.jbatch.load; -import java.util.ArrayList; import java.util.List; import java.util.Properties; import java.util.logging.Level; @@ -22,6 +21,7 @@ import javax.inject.Inject; import com.ibm.fhir.bulkdata.jbatch.context.BatchContextAdapter; +import com.ibm.fhir.bulkdata.jbatch.load.exception.FHIRLoadException; import com.ibm.fhir.bulkdata.load.partition.transformer.PartitionSourceTransformerFactory; import com.ibm.fhir.exception.FHIRException; import com.ibm.fhir.operation.bulkdata.config.ConfigurationAdapter; @@ -57,8 +57,7 @@ public PartitionPlan mapPartitions() throws Exception { ConfigurationAdapter adapter = ConfigurationFactory.getInstance(); adapter.registerRequestContext(ctx.getTenantId(), ctx.getDatastoreId(), ctx.getIncomingUrl()); - List bdSources = new ArrayList<>(); - bdSources = PartitionSourceTransformerFactory.transformToSources(ctx.getSource(), ctx.getDataSourcesInfo()); + List bdSources = PartitionSourceTransformerFactory.transformToSources(ctx.getSource(), ctx.getDataSourcesInfo()); PartitionPlanImpl pp = new PartitionPlanImpl(); pp.setPartitions(bdSources.size()); @@ -68,13 +67,18 @@ public PartitionPlan mapPartitions() throws Exception { int propCount = 0; for (BulkDataSource fhirDataSource : bdSources) { Properties p = new Properties(); - p.setProperty(OperationFields.PARTITTION_WORKITEM, fhirDataSource.getUrl()); + p.setProperty(OperationFields.PARTITION_WORKITEM, fhirDataSource.getUrl()); p.setProperty(OperationFields.PARTITION_RESOURCETYPE, fhirDataSource.getType()); + p.setProperty(OperationFields.PARTITION_MATRIX, fhirDataSource.getOriginalLocation()); partitionProps[propCount++] = p; } pp.setPartitionProperties(partitionProps); return pp; - }catch (FHIRException e) { + } catch (FHIRLoadException e) { + jobCtx.setExitStatus("FAILED_BAD_SOURCE"); + logger.log(Level.SEVERE, "Import PartitionMapper source[" + executionId + "] - " + e.getMessage(), e); + throw e; + } catch (FHIRException e) { logger.log(Level.SEVERE, "Import PartitionMapper.mapPartitions during job[" + executionId + "] - " + e.getMessage(), e); throw e; } catch (Exception e) { diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/data/ImportCheckPointData.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/data/ImportCheckPointData.java index 973144b894a..508449ecd8f 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/data/ImportCheckPointData.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/data/ImportCheckPointData.java @@ -18,16 +18,21 @@ public class ImportCheckPointData implements Serializable { private static final long serialVersionUID = 2189917861035732241L; // URL or COS/S3 object name. protected String importPartitionWorkitem; + protected String matrixWorkItem; // Values for metrics calculation. protected long numOfProcessedResources = 0; protected long numOfImportedResources = 0; protected long numOfImportFailures = 0; + protected long numOfSkipped = 0; protected long totalReadMilliSeconds = 0; protected long totalWriteMilliSeconds = 0; protected long totalValidationMilliSeconds = 0; protected long importFileSize = 0; + // Track the Azure Progress + protected long currentBytes = 0; + protected long inFlyRateBeginMilliSeconds = 0; // Value used to sign the successful ending of the import. @@ -88,6 +93,18 @@ public void addToNumOfImportedResources(long numOfImportedResources) { this.numOfImportedResources += numOfImportedResources; } + public long getNumOfSkippedResources() { + return numOfSkipped; + } + + public void setNumOfSkippedResources(long skipped) { + this.numOfSkipped = skipped; + } + + public void addToNumOfSkippedResources(long skipped) { + this.numOfSkipped += skipped; + } + public long getNumOfImportFailures() { return numOfImportFailures; } @@ -112,9 +129,18 @@ public String getImportPartitionResourceType() { return importPartitionResourceType; } + public long getCurrentBytes() { + return currentBytes; + } + + public void setCurrentBytes(long currentBytes) { + this.currentBytes = currentBytes; + } + public static ImportCheckPointData fromImportTransientUserData(ImportTransientUserData userData) { return ImportCheckPointData.Builder.builder() .importPartitionWorkitem(userData.getImportPartitionWorkitem()) + .matrixWorkItem(userData.matrixWorkItem) .numOfProcessedResources(userData.getNumOfProcessedResources()) .importPartitionResourceType(userData.getImportPartitionResourceType()) .numOfImportedResources(userData.getNumOfImportedResources()) @@ -132,6 +158,8 @@ public static ImportCheckPointData fromImportTransientUserData(ImportTransientUs .totalWriteMilliSeconds(userData.getTotalWriteMilliSeconds()) .importFileSize(userData.getImportFileSize()) .inFlyRateBeginMilliSeconds(userData.getInFlyRateBeginMilliSeconds()) + .numOfSkippedResources(userData.getNumOfSkippedResources()) + .currentBytes(userData.getCurrentBytes()) .build(); } @@ -247,9 +275,18 @@ public void setInFlyRateBeginMilliSeconds(long inFlyRateBeginMilliSeconds) { this.inFlyRateBeginMilliSeconds = inFlyRateBeginMilliSeconds; } + public void setMatrixWorkItem(String matrixWorkItem) { + this.matrixWorkItem = matrixWorkItem; + } + + public String getMatrixWorkItem() { + return matrixWorkItem; + } + public static class Builder { protected String importPartitionWorkitem; + protected String matrixWorkItem; protected long numOfProcessedResources; protected String importPartitionResourceType; protected long numOfImportedResources; @@ -267,6 +304,8 @@ public static class Builder { protected long totalWriteMilliSeconds; protected long importFileSize; protected long inFlyRateBeginMilliSeconds; + protected long currentBytes; + protected long numOfSkippedResources; public Builder() { super(); @@ -281,6 +320,11 @@ public Builder importPartitionWorkitem(String importPartitionWorkitem) { return this; } + public Builder matrixWorkItem(String matrixWorkItem) { + this.matrixWorkItem = matrixWorkItem; + return this; + } + public Builder numOfProcessedResources(long numOfProcessedResources) { this.numOfProcessedResources = numOfProcessedResources; return this; @@ -296,6 +340,11 @@ public Builder numOfImportedResources(long numOfImportedResources) { return this; } + public Builder numOfSkippedResources(long numOfSkippedResources) { + this.numOfSkippedResources = numOfSkippedResources; + return this; + } + public Builder numOfImportFailures(long numOfImportFailures) { this.numOfImportFailures = numOfImportFailures; return this; @@ -366,9 +415,15 @@ public Builder inFlyRateBeginMilliSeconds(long inFlyRateBeginMilliSeconds) { return this; } + public Builder currentBytes(long currentBytes) { + this.currentBytes = currentBytes; + return this; + } + public ImportCheckPointData build() { ImportCheckPointData importCheckPointData = new ImportCheckPointData(); importCheckPointData.importPartitionWorkitem = this.importPartitionWorkitem; + importCheckPointData.matrixWorkItem = this.matrixWorkItem; importCheckPointData.numOfProcessedResources = this.numOfProcessedResources; importCheckPointData.importPartitionResourceType = this.importPartitionResourceType; importCheckPointData.numOfImportedResources = this.numOfImportedResources; @@ -386,6 +441,8 @@ public ImportCheckPointData build() { importCheckPointData.totalWriteMilliSeconds = this.totalWriteMilliSeconds; importCheckPointData.importFileSize = this.importFileSize; importCheckPointData.inFlyRateBeginMilliSeconds = this.inFlyRateBeginMilliSeconds; + importCheckPointData.numOfSkipped = this.numOfSkippedResources; + importCheckPointData.currentBytes = this.currentBytes; return importCheckPointData; } } @@ -393,14 +450,15 @@ public ImportCheckPointData build() { @Override public String toString() { return "ImportCheckPointData [importPartitionWorkitem=" + importPartitionWorkitem + ", numOfProcessedResources=" + numOfProcessedResources + + ", matrixWorkItem=" + matrixWorkItem + ", numOfImportedResources=" + numOfImportedResources + ", numOfImportFailures=" + numOfImportFailures + ", totalReadMilliSeconds=" + totalReadMilliSeconds + ", totalWriteMilliSeconds=" + totalWriteMilliSeconds + ", totalValidationMilliSeconds=" + totalValidationMilliSeconds - + ", importFileSize=" + importFileSize + ", inFlyRateBeginMilliSeconds=" + inFlyRateBeginMilliSeconds + ", numOfToBeImported=" - + numOfToBeImported + ", numOfParseFailures=" + numOfParseFailures + ", importPartitionResourceType=" + importPartitionResourceType - + ", uniqueIDForImportOperationOutcomes=" + uniqueIDForImportOperationOutcomes + ", partNumForOperationOutcomes=" + partNumForOperationOutcomes - + ", uploadIdForOperationOutcomes=" + uploadIdForOperationOutcomes + ", dataPacksForOperationOutcomes=" + dataPacksForOperationOutcomes - + ", uniqueIDForImportFailureOperationOutcomes=" + uniqueIDForImportFailureOperationOutcomes + ", partNumForFailureOperationOutcomes=" - + partNumForFailureOperationOutcomes + ", uploadIdForFailureOperationOutcomes=" + uploadIdForFailureOperationOutcomes - + ", dataPacksForFailureOperationOutcomes=" + dataPacksForFailureOperationOutcomes + "]"; - } -} \ No newline at end of file + + ", importFileSize=" + importFileSize + ", currentBytes=" + currentBytes + ", inFlyRateBeginMilliSeconds=" + inFlyRateBeginMilliSeconds + + ", numOfToBeImported=" + numOfToBeImported + ", numOfParseFailures=" + numOfParseFailures + ", importPartitionResourceType=" + + importPartitionResourceType + ", uniqueIDForImportOperationOutcomes=" + uniqueIDForImportOperationOutcomes + ", partNumForOperationOutcomes=" + + partNumForOperationOutcomes + ", uploadIdForOperationOutcomes=" + uploadIdForOperationOutcomes + ", dataPacksForOperationOutcomes=" + + dataPacksForOperationOutcomes + ", uniqueIDForImportFailureOperationOutcomes=" + uniqueIDForImportFailureOperationOutcomes + + ", partNumForFailureOperationOutcomes=" + partNumForFailureOperationOutcomes + ", uploadIdForFailureOperationOutcomes=" + + uploadIdForFailureOperationOutcomes + ", dataPacksForFailureOperationOutcomes=" + dataPacksForFailureOperationOutcomes + "]"; + } +} diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/data/ImportTransientUserData.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/data/ImportTransientUserData.java index a8a63829223..ea559db2f55 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/data/ImportTransientUserData.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/data/ImportTransientUserData.java @@ -63,6 +63,7 @@ public void setBufferReader(BufferedReader bufferReader) { public static ImportTransientUserData fromImportCheckPointData(ImportCheckPointData importCheckPointData) { return ImportTransientUserData.Builder.builder() .importPartitionWorkitem(importCheckPointData.importPartitionWorkitem) + .matrixWorkItem(importCheckPointData.matrixWorkItem) .numOfProcessedResources(importCheckPointData.numOfProcessedResources) .importPartitionResourceType(importCheckPointData.importPartitionResourceType) .numOfImportedResources(importCheckPointData.numOfImportedResources) @@ -80,6 +81,7 @@ public static ImportTransientUserData fromImportCheckPointData(ImportCheckPointD .totalWriteMilliSeconds(importCheckPointData.totalWriteMilliSeconds) .importFileSize(importCheckPointData.importFileSize) .inFlyRateBeginMilliSeconds(importCheckPointData.inFlyRateBeginMilliSeconds) + .currentBytes(importCheckPointData.currentBytes) .build(); } @@ -94,6 +96,11 @@ public Builder importPartitionWorkitem(String importPartitionWorkitem) { return (Builder) super.importPartitionWorkitem(importPartitionWorkitem); } + @Override + public Builder matrixWorkItem(String matrixWorkItem) { + return (Builder) super.matrixWorkItem(matrixWorkItem); + } + @Override public Builder numOfProcessedResources(long numOfProcessedResources) { return (Builder) super.numOfProcessedResources(numOfProcessedResources); @@ -179,10 +186,16 @@ public Builder inFlyRateBeginMilliSeconds(long inFlyRateBeginMilliSeconds) { return (Builder) super.inFlyRateBeginMilliSeconds(inFlyRateBeginMilliSeconds); } + @Override + public Builder currentBytes(long currentBytes) { + return (Builder) super.currentBytes(currentBytes); + } + @Override public ImportTransientUserData build() { ImportTransientUserData importTransientUserData = new ImportTransientUserData(); importTransientUserData.importPartitionWorkitem = this.importPartitionWorkitem; + importTransientUserData.matrixWorkItem = this.matrixWorkItem; importTransientUserData.numOfProcessedResources = this.numOfProcessedResources; importTransientUserData.importPartitionResourceType = this.importPartitionResourceType; importTransientUserData.numOfImportedResources = this.numOfImportedResources; @@ -200,6 +213,7 @@ public ImportTransientUserData build() { importTransientUserData.totalWriteMilliSeconds = this.totalWriteMilliSeconds; importTransientUserData.importFileSize = this.importFileSize; importTransientUserData.inFlyRateBeginMilliSeconds = this.inFlyRateBeginMilliSeconds; + importTransientUserData.currentBytes = this.currentBytes; return importTransientUserData; } } @@ -207,6 +221,7 @@ public ImportTransientUserData build() { @Override public String toString() { return "ImportTransientUserData [bufferStreamForImportError=" + bufferStreamForImportError + ", bufferStreamForImport=" + bufferStreamForImport + + ", matrix=" + matrixWorkItem + ", inputStream=" + inputStream + ", bufferReader=" + bufferReader + ", importPartitionWorkitem=" + importPartitionWorkitem + ", numOfProcessedResources=" + numOfProcessedResources + ", numOfImportedResources=" + numOfImportedResources + ", numOfImportFailures=" + numOfImportFailures + ", totalReadMilliSeconds=" + totalReadMilliSeconds + ", totalWriteMilliSeconds=" + totalWriteMilliSeconds diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/exception/FHIRLoadException.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/exception/FHIRLoadException.java new file mode 100644 index 00000000000..c5ae239782c --- /dev/null +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/exception/FHIRLoadException.java @@ -0,0 +1,19 @@ +/* + * (C) Copyright IBM Corp. 2021 + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.ibm.fhir.bulkdata.jbatch.load.exception; + +import com.ibm.fhir.exception.FHIRException; + + +public class FHIRLoadException extends FHIRException { + + private static final long serialVersionUID = 12434123435239981L; + + public FHIRLoadException(String msg) { + super(msg); + } +} \ No newline at end of file diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/listener/ExitStatus.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/listener/ExitStatus.java index be7b73aac91..2992a168d7f 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/listener/ExitStatus.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/listener/ExitStatus.java @@ -12,13 +12,13 @@ import java.util.Map; import java.util.logging.Logger; -import javax.json.JsonArray; -import javax.json.JsonObject; -import javax.json.JsonValue; - import com.ibm.fhir.bulkdata.jbatch.load.data.ImportCheckPointData; import com.ibm.fhir.operation.bulkdata.model.type.OperationFields; +import jakarta.json.JsonArray; +import jakarta.json.JsonObject; +import jakarta.json.JsonValue; + /** * Adapts the partitionSummaries and DatasourceArray into an Exit Status */ @@ -45,14 +45,22 @@ public String generateResultExitStatus() { } String[] resultInExitStatus = new String[sequenceNum]; - System.out.println(partitionSummaries); + logger.fine(() -> "The partitions are " + partitionSummaries); for (ImportCheckPointData partitionSummary : partitionSummaries) { - String key = partitionSummary.getImportPartitionResourceType() + ":" + partitionSummary.getImportPartitionWorkitem(); + String key; + if (partitionSummary.getMatrixWorkItem() == null) { + key = partitionSummary.getImportPartitionResourceType() + ":" + partitionSummary.getImportPartitionWorkitem(); + } else { + // must be matrixed + key = partitionSummary.getImportPartitionResourceType() + ":" + partitionSummary.getMatrixWorkItem(); + } + if (!inputUrlSequenceMap.containsKey(key)) { // Highly unlikely to hit now that the partition-resource-type is fixed // So... this means that the Key is some how mutated. - logger.warning("Partition Key is incorrect '" + key + "'"); + logger.warning("Partition Key is incorrect '" + key + "' matrix='" + partitionSummary.getMatrixWorkItem() + "'"); } + int index = inputUrlSequenceMap.get(key); resultInExitStatus[index] = partitionSummary.getNumOfImportedResources() + ":" + partitionSummary.getNumOfImportFailures(); } diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/listener/Reporter.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/listener/Reporter.java index 0ea9267b863..bb73c598756 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/listener/Reporter.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/jbatch/load/listener/Reporter.java @@ -65,6 +65,7 @@ public void report(List partitionSummaries) { partitionSummaryInMap.setNumOfImportFailures(partitionSummaryInMap.getNumOfImportFailures() + partitionSummary.getNumOfImportFailures()); partitionSummaryInMap.setNumOfImportedResources(partitionSummaryInMap.getNumOfImportedResources() + partitionSummary.getNumOfImportedResources()); partitionSummaryInMap.setNumOfProcessedResources(partitionSummaryInMap.getNumOfProcessedResources() + partitionSummary.getNumOfProcessedResources()); + partitionSummaryInMap.setNumOfSkippedResources(partitionSummaryInMap.getNumOfSkippedResources() + partitionSummary.getNumOfSkippedResources()); partitionSummaryInMap.setTotalReadMilliSeconds(partitionSummaryInMap.getTotalReadMilliSeconds() + partitionSummary.getTotalReadMilliSeconds()); partitionSummaryInMap.setTotalValidationMilliSeconds(partitionSummaryInMap.getTotalValidationMilliSeconds() + partitionSummary.getTotalValidationMilliSeconds()); partitionSummaryInMap.setTotalWriteMilliSeconds(partitionSummaryInMap.getTotalWriteMilliSeconds() + partitionSummary.getTotalWriteMilliSeconds()); @@ -77,8 +78,8 @@ public void report(List partitionSummaries) { // log the simple metrics. logger.info("Operation Type: $import"); - logger.info(String.format("%-22s%-22s%-22s%-22s%-22s%-22s%-22s%-22s%-22s", - "Resource Type","failures", "success", "processed", "totalRead", "totalValidation", "totalWrite", "fileSize", "Resource Size")); + logger.info(String.format("%-22s%-22s%-22s%-22s%-22s%-22s%-22s%-22s%-22s%-22s", + "Resource Type","failures", "success", "processed", "totalRead", "totalSkip", "totalValidation", "totalWrite", "fileSize", "Resource Size")); long totalImportedFhirResources = 0; for (ImportCheckPointData importedResourceTypeSummary : importedResourceTypeSummaries.values()) { String resourceType = importedResourceTypeSummary.getImportPartitionResourceType(); @@ -86,6 +87,7 @@ public void report(List partitionSummaries) { long success = importedResourceTypeSummary.getNumOfImportedResources(); long totalRead = importedResourceTypeSummary.getTotalReadMilliSeconds(); long totalWrite = importedResourceTypeSummary.getTotalWriteMilliSeconds(); + long totalSkip = importedResourceTypeSummary.getNumOfSkippedResources(); long totalValidation = importedResourceTypeSummary.getTotalValidationMilliSeconds(); long processed = importedResourceTypeSummary.getNumOfImportedResources(); long fileSize = importedResourceTypeSummary.getImportFileSize(); @@ -98,8 +100,8 @@ public void report(List partitionSummaries) { } else { logger.fine("No Content was imported"); } - logger.info(String.format("%-22s%-22s%-22s%-22s%-22s%-22s%-22s%-22s%-22s", - resourceType,failures, success, processed, totalRead, totalValidation, totalWrite, fileSize, resourceSize)); + logger.info(String.format("%-22s%-22s%-22s%-22s%-22s%-22s%-22s%-22s%-22s%-22s", + resourceType,failures, success, processed, totalRead, totalSkip, totalValidation, totalWrite, fileSize, resourceSize)); } logger.info(" ---- Total: " + totalImportedFhirResources + " ImportRate: " + new DecimalFormat("#0.00").format(totalImportedFhirResources/jobProcessingSeconds) + " ----"); diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/load/partition/transformer/PartitionSourceTransformerFactory.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/load/partition/transformer/PartitionSourceTransformerFactory.java index 32e10043f13..f3d23e184fc 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/load/partition/transformer/PartitionSourceTransformerFactory.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/load/partition/transformer/PartitionSourceTransformerFactory.java @@ -3,16 +3,18 @@ * * SPDX-License-Identifier: Apache-2.0 */ + package com.ibm.fhir.bulkdata.load.partition.transformer; import java.util.ArrayList; import java.util.List; -import javax.json.JsonArray; -import javax.json.JsonObject; -import javax.json.JsonValue; +import jakarta.json.JsonArray; +import jakarta.json.JsonObject; +import jakarta.json.JsonValue; import com.ibm.fhir.bulkdata.common.BulkDataUtils; +import com.ibm.fhir.bulkdata.load.partition.transformer.impl.AzureTransformer; import com.ibm.fhir.bulkdata.load.partition.transformer.impl.FileTransformer; import com.ibm.fhir.bulkdata.load.partition.transformer.impl.HttpsTransformer; import com.ibm.fhir.bulkdata.load.partition.transformer.impl.S3Transformer; @@ -30,6 +32,7 @@ public class PartitionSourceTransformerFactory { private static final FileTransformer fileTransformer = new FileTransformer(); private static final HttpsTransformer httpsTransformer = new HttpsTransformer(); private static final S3Transformer s3Transformer = new S3Transformer(); + private static final AzureTransformer azureTransformer = new AzureTransformer(); private PartitionSourceTransformerFactory() { // No Operation @@ -66,6 +69,9 @@ public static List transformToSources(String source, String data case IBMCOS: sources.addAll(s3Transformer.transformToDataSources(source, type, location)); break; + case AZURE: + sources.addAll(azureTransformer.transformToDataSources(source, type, location)); + break; default: break; } diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/load/partition/transformer/impl/AzureTransformer.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/load/partition/transformer/impl/AzureTransformer.java new file mode 100644 index 00000000000..96e487afdc3 --- /dev/null +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/load/partition/transformer/impl/AzureTransformer.java @@ -0,0 +1,28 @@ +/* + * (C) Copyright IBM Corp. 2021 + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.ibm.fhir.bulkdata.load.partition.transformer.impl; + +import java.util.Arrays; +import java.util.List; + +import com.ibm.fhir.bulkdata.load.partition.transformer.PartitionSourceTransformer; +import com.ibm.fhir.bulkdata.provider.impl.AzureProvider; +import com.ibm.fhir.exception.FHIRException; +import com.ibm.fhir.operation.bulkdata.model.type.BulkDataSource; + +/** + * At most one BulkDataSource is created in a List, but throws when Azure doesn't exist. + */ +public class AzureTransformer implements PartitionSourceTransformer { + @Override + public List transformToDataSources(String source, String type, String location) throws FHIRException { + AzureProvider provider = new AzureProvider(source); + // We want to get the Provider + provider.getSize(location); + return Arrays.asList(new BulkDataSource(type, location)); + } +} \ No newline at end of file diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/load/partition/transformer/impl/S3Transformer.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/load/partition/transformer/impl/S3Transformer.java index 6f34c6d2b98..2b8b3dd9813 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/load/partition/transformer/impl/S3Transformer.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/load/partition/transformer/impl/S3Transformer.java @@ -6,12 +6,12 @@ package com.ibm.fhir.bulkdata.load.partition.transformer.impl; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.logging.Logger; import com.ibm.cloud.objectstorage.services.s3.model.ListObjectsV2Result; import com.ibm.cloud.objectstorage.services.s3.model.S3ObjectSummary; +import com.ibm.fhir.bulkdata.jbatch.load.exception.FHIRLoadException; import com.ibm.fhir.bulkdata.load.partition.transformer.PartitionSourceTransformer; import com.ibm.fhir.bulkdata.provider.impl.S3Provider; import com.ibm.fhir.exception.FHIRException; @@ -25,40 +25,34 @@ */ public class S3Transformer implements PartitionSourceTransformer { - private static final Logger logger = Logger.getLogger(S3Transformer.class.getName()); + private static final Logger LOG = Logger.getLogger(S3Transformer.class.getName()); @Override public List transformToDataSources(String source, String type, String location) throws FHIRException { - S3Provider wrapper = new S3Provider(source); - wrapper.listBuckets(); - // Checks and return empty list. - if (!wrapper.exists()) { - wrapper.listBuckets(); - return Collections.emptyList(); + List sources = new ArrayList<>(); + + S3Provider provider = new S3Provider(source); + if (!provider.exists()) { + provider.listBuckets(); } - List sources = new ArrayList<>(); + String loc = location.trim(); + LOG.fine(() -> "Location being verified is'" + loc + "'"); + String continuationToken = null; ListObjectsV2Result result = null; boolean shouldContinue = true; while (shouldContinue) { - result = wrapper.getListObject(continuationToken); + result = provider.getListObject(loc, continuationToken); for (S3ObjectSummary objectSummary : result.getObjectSummaries()) { - boolean isToBeProccessed = false; - if (location != null && !location.trim().isEmpty()) { - if (objectSummary.getKey().startsWith(location.trim())) { - isToBeProccessed = true; - } - } else { - isToBeProccessed = true; - } - if (isToBeProccessed) { - logger.info("ObjectStorge Object -'" + objectSummary.getKey() - + "' - '" + objectSummary.getSize() + "' bytes."); - if (objectSummary.getSize() >= 0) { - // We want these to line up when we align with the output of the Job Listener - sources.add(new BulkDataSource(type, objectSummary.getKey())); - } + LOG.fine(() -> "Object to be added [" + objectSummary.getKey() + "]"); + + if (!loc.isEmpty() && objectSummary.getKey().startsWith(loc)) { + LOG.fine(() -> "Object Summary -'" + objectSummary.getKey() + "' - '" + objectSummary.getSize() + "' bytes."); + + BulkDataSource ds = new BulkDataSource(type, objectSummary.getKey()); + ds.setOriginalLocation(location); + sources.add(ds); } } @@ -66,6 +60,11 @@ public List transformToDataSources(String source, String type, S continuationToken = result.getNextContinuationToken(); } + // We shouldn't hit this situation. + if (sources.isEmpty()) { + throw new FHIRLoadException("The source is not found '" + location + "'"); + } + return sources; } } \ No newline at end of file diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/Provider.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/Provider.java index dcb17c4c817..c20ed99ab21 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/Provider.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/Provider.java @@ -71,13 +71,13 @@ default void createSource() throws FHIRException { void registerTransient(ImportTransientUserData transientUserData); - void registerTransient(long executionId, ExportTransientUserData transientUserData, String cosBucketPathPrefix, String fhirResourceType, boolean isExportPublic) throws Exception; + void registerTransient(long executionId, ExportTransientUserData transientUserData, String cosBucketPathPrefix, String fhirResourceType) throws Exception; /** * Pushes the Operation Outcomes */ default void pushOperationOutcomes() throws FHIRException { - // No Operation; + // No Operation } void close() throws Exception; diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/ProviderFactory.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/ProviderFactory.java index a74583f1be2..43bdddddf63 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/ProviderFactory.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/ProviderFactory.java @@ -5,13 +5,14 @@ */ package com.ibm.fhir.bulkdata.provider; +import com.ibm.fhir.bulkdata.provider.impl.AzureProvider; import com.ibm.fhir.bulkdata.provider.impl.FileProvider; import com.ibm.fhir.bulkdata.provider.impl.HttpsProvider; import com.ibm.fhir.bulkdata.provider.impl.S3Provider; import com.ibm.fhir.operation.bulkdata.model.type.StorageType; /** - * Wrapper + * Provider Factory picks the ideal provider based on the type. */ public class ProviderFactory { @@ -27,21 +28,24 @@ private ProviderFactory() { */ public static Provider getSourceWrapper(String source, String type) throws Exception { StorageType storageType = StorageType.from(type); - Provider wrapper = null; + Provider provider = null; switch (storageType) { case HTTPS: - wrapper = new HttpsProvider(source); + provider = new HttpsProvider(source); break; case FILE: - wrapper = new FileProvider(source); + provider = new FileProvider(source); break; case AWSS3: case IBMCOS: - wrapper = new S3Provider(source); + provider = new S3Provider(source); + break; + case AZURE: + provider = new AzureProvider(source); break; default: throw new IllegalStateException ("Doesn't support data source storage type '" + type + "'!"); } - return wrapper; + return provider; } } \ No newline at end of file diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/AzureProvider.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/AzureProvider.java new file mode 100644 index 00000000000..0d89a815ed0 --- /dev/null +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/AzureProvider.java @@ -0,0 +1,392 @@ + +/* + * (C) Copyright IBM Corp. 2021 + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.ibm.fhir.bulkdata.provider.impl; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.stream.Collectors; + +import com.azure.storage.blob.BlobClient; +import com.azure.storage.blob.BlobClientBuilder; +import com.azure.storage.blob.BlobContainerClient; +import com.azure.storage.blob.BlobContainerClientBuilder; +import com.azure.storage.blob.models.BlobRange; +import com.azure.storage.blob.models.BlobRequestConditions; +import com.azure.storage.blob.models.BlobStorageException; +import com.azure.storage.blob.specialized.AppendBlobClient; +import com.ibm.fhir.bulkdata.dto.ReadResultDTO; +import com.ibm.fhir.bulkdata.jbatch.export.data.ExportTransientUserData; +import com.ibm.fhir.bulkdata.jbatch.load.data.ImportTransientUserData; +import com.ibm.fhir.bulkdata.jbatch.load.exception.FHIRLoadException; +import com.ibm.fhir.bulkdata.provider.Provider; +import com.ibm.fhir.exception.FHIRException; +import com.ibm.fhir.model.format.Format; +import com.ibm.fhir.model.generator.FHIRGenerator; +import com.ibm.fhir.model.parser.FHIRParser; +import com.ibm.fhir.model.parser.exception.FHIRParserException; +import com.ibm.fhir.model.resource.OperationOutcome; +import com.ibm.fhir.model.resource.Resource; +import com.ibm.fhir.model.type.code.IssueType; +import com.ibm.fhir.model.util.FHIRUtil; +import com.ibm.fhir.operation.bulkdata.config.ConfigurationFactory; + +/** + * AzureProvider integrates the BulkData feature with Azure Blob Storage. + * The code uses the Blob Clients. + * + * $export: The AppendBlobClient is used during upload to append to an export file. + * $import: The BlobClient with BlobRange is used to retrieve windows of data. + * + * @see https://docs.microsoft.com/en-us/dotnet/api/azure.storage.blobs.specialized.appendblobclient?view=azure-dotnet + */ +public class AzureProvider implements Provider { + private static final Logger LOG = Logger.getLogger(AzureProvider.class.getName()); + + private static final byte[] NEWLINE = "\r\n".getBytes(); + + private ImportTransientUserData transientUserData = null; + private ExportTransientUserData chunkData = null; + + private String cosBucketPathPrefix = null; + private String fhirResourceType = null; + + private List resources = new ArrayList<>(); + + private long parseFailures = 0; + private long currentBytes = 0; + + private String connectionString; + private String container; + + private String workItem; + + private boolean collect = false; + + private BlobClient client; + + /** + * Configures the Azure based on the storageProvider source + * @param source + */ + public AzureProvider(String source) { + this.connectionString = ConfigurationFactory.getInstance().getStorageProviderAuthTypeConnectionString(source); + this.container = ConfigurationFactory.getInstance().getStorageProviderBucketName(source); + this.collect = ConfigurationFactory.getInstance().shouldStorageProviderCollectOperationOutcomes(source); + } + + /** + * registers the overrides for testing. + * @param connectionString + * @param container the container (also known as a bucket) + * @param chunkData the export data + * @param cosBucketPathPrefix path prefix + * @param fhirResourceType resource type + * @param currentBytes the long value or location of the end of the last resource + */ + protected void registerOverride(String connectionString, String container, ExportTransientUserData chunkData, + String cosBucketPathPrefix, String fhirResourceType, long currentBytes) { + this.connectionString = connectionString; + this.container = container; + this.chunkData = chunkData; + this.cosBucketPathPrefix = cosBucketPathPrefix; + this.fhirResourceType = fhirResourceType; + this.currentBytes = currentBytes; + } + + /** + * initializes the blob client + * @param workItem + */ + protected void initializeBlobClient(String workItem) { + if (client == null) { + client = new BlobClientBuilder() + .connectionString(connectionString) + .containerName(container) + .blobName(workItem) + .buildClient(); + } + } + + @Override + public void createSource() throws FHIRException { + try { + BlobContainerClient blobContainerClient = new BlobContainerClientBuilder() + .connectionString(connectionString) + .containerName(container) + .buildClient(); + blobContainerClient.create(); + LOG.info("Container is created '" + container + "'"); + } catch (BlobStorageException error) { + LOG.fine("Can't create container. It already exists"); + LOG.throwing(this.getClass().getName(), "createSource", error); + } + } + + @Override + public long getSize(String workItem) throws FHIRException { + try { + initializeBlobClient(workItem); + long size = client.getProperties().getBlobSize(); + LOG.fine(() -> workItem + " [" + size + "]"); + return size; + } catch (Exception e) { + LOG.throwing("AzureProvider", "getSize", e); + LOG.fine("Error Getting File Size '" + container + "/" + workItem + "'"); + throw new FHIRLoadException("Error Getting File Size '" + container + "/" + workItem + "'"); + } + } + + /** + * lists the blobs on the container. + * @throws FHIRException + */ + public void listBlobsForContainer() throws FHIRException { + try { + BlobContainerClient containerClient = new BlobContainerClientBuilder() + .connectionString(connectionString) + .containerName(container) + .buildClient(); + LOG.info("Listing the blobs"); + containerClient.listBlobs().forEach(blob -> LOG.info("BLOB: " + blob.getName())); + LOG.info("Finished listing the blobs"); + } catch (Exception e) { + throw new FHIRException("Error listing the blobs for '" + container + "'", e); + } + } + + /** + * writes directly to Azure using AppendBlock client + * @param workItem the file + * @param in + * @param size + * @throws Exception + */ + public void writeDirectly(String workItem, InputStream in, int size) throws Exception{ + initializeBlobClient(workItem); + + AppendBlobClient aClient = client.getAppendBlobClient(); + if (!client.exists().booleanValue()) { + aClient.create(); + } + // Append a new line. + aClient.appendBlock(in, size); + try (ByteArrayInputStream bais = new ByteArrayInputStream(NEWLINE)) { + aClient.appendBlock(bais, NEWLINE.length); + } + } + + @Override + public void writeResources(String mediaType, List dtos) throws Exception { + String workItem = cosBucketPathPrefix + "/" + fhirResourceType + "_" + chunkData.getUploadCount() + ".ndjson"; + + initializeBlobClient(workItem); + + AppendBlobClient aClient = client.getAppendBlobClient(); + if (!client.exists().booleanValue()) { + aClient.create(); + } + aClient.appendBlock( + new ByteArrayInputStream(chunkData.getBufferStream().toByteArray()), + chunkData.getBufferStream().size()); + + chunkData.getBufferStream().reset(); + + if (chunkData.isFinishCurrentUpload()) { + // Partition status for the exported resources, e.g, Patient[1000,1000,200] + if (chunkData.getResourceTypeSummary() == null) { + chunkData.setResourceTypeSummary(fhirResourceType + "[" + chunkData.getCurrentUploadResourceNum()); + if (chunkData.getPageNum() >= chunkData.getLastPageNum()) { + chunkData.setResourceTypeSummary(chunkData.getResourceTypeSummary() + "]"); + } + } else { + chunkData.setResourceTypeSummary(chunkData.getResourceTypeSummary() + "," + chunkData.getCurrentUploadResourceNum()); + if (chunkData.getPageNum() >= chunkData.getLastPageNum()) { + chunkData.setResourceTypeSummary(chunkData.getResourceTypeSummary() + "]"); + } + } + + if (chunkData.getPageNum() < chunkData.getLastPageNum()) { + chunkData.setPartNum(1); + chunkData.setUploadId(null); + chunkData.setCurrentUploadResourceNum(0); + chunkData.setCurrentUploadSize(0); + chunkData.setFinishCurrentUpload(false); + chunkData.getCosDataPacks().clear(); + chunkData.setUploadCount(chunkData.getUploadCount() + 1); + } + } + } + + /* + * We process the BlobRange as a window + */ + @Override + public void readResources(long numOfLinesToSkip, String workItem) throws FHIRException { + initializeBlobClient(workItem); + this.workItem = workItem; + + boolean complete = false; + int window = 0; + + // 200 means 2000M! has been retrieved, our maximum single resource size. + StringBuilder previous = new StringBuilder(); + while (!complete && window < 200) { + BlobRequestConditions options = new BlobRequestConditions(); + BlobRange range = new BlobRange(currentBytes, 10000L); + // Now we need to calculate where we left off in the download, and adjust the resume point. + try (InputStream in = client.openInputStream(range, options); + CountInputStreamReader counter = new CountInputStreamReader(in); + BufferedReader reader = new BufferedReader(counter)) { + + List lines = reader.lines().collect(Collectors.toList()); + int idx = 1; + for (String line : lines) { + idx++; + String compLine = previous + line; + + try (ByteArrayInputStream bais = new ByteArrayInputStream(compLine.getBytes())) { + resources.add(FHIRParser.parser(Format.JSON).parse(bais)); + if (LOG.isLoggable(Level.FINE)) { + LOG.fine("Azure Resource [R] " + compLine); + } + // There is no reason to reset compLine as we're now stopping this proccessing block. + // previous, baos are all going to go out of scope. + if (window > 0) { + // Doesn't need to be closed per JavaDocs + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + baos.write(line.getBytes()); + currentBytes += baos.size(); + complete = true; + break; + } + } catch(FHIRParserException fpe) { + // We're on the last line, so there might be more + if (idx -1 == lines.size()) { + previous.append(line); + } else { + parseFailures++; + OperationOutcome.Issue ooi = FHIRUtil.buildOperationOutcomeIssue("Failed to Process " + this.transientUserData.getNumOfProcessedResources() + idx, IssueType.EXCEPTION); + OperationOutcome oo = OperationOutcome.builder().issue(ooi).build(); + FHIRGenerator.generator(Format.JSON).generate(oo, this.transientUserData.getBufferStreamForImportError()); + this.transientUserData.getBufferStreamForImportError().write("\r\n".getBytes()); + } + } + } + if (!complete) { + currentBytes += counter.getLength(); + window++; + } + + // Set so we can move the window forward. + this.transientUserData.setCurrentBytes(currentBytes); + LOG.fine(() -> "Number of bytes read are: '" + currentBytes + "'"); + } catch (IOException e) { + LOG.throwing("AzureProvider", "readResources", e); + LOG.severe("Problem accessing backend on Azure" + e.getMessage()); + throw new FHIRException("Problem accessing backend Container or Blob on Azure", e); + } + } + } + + /** + * CountInputStreamReader counts the size of the input. + */ + private static class CountInputStreamReader extends InputStreamReader { + private long l = 0; + + public CountInputStreamReader(InputStream in) { + super(in); + } + + @Override + public int read(char[] cbuf, int offset, int length) throws IOException { + int r = super.read(cbuf, offset, length); + if (r != -1) { + l += r; + } + return r; + } + + /** + * @return the length of the resources returned in the reader + */ + public long getLength() { + return l; + } + } + + @Override + public void pushOperationOutcomes() throws FHIRException { + if (collect && this.transientUserData.getBufferStreamForImportError().size() != 0) { + // Push the error + String workItemError = this.workItem + "_oo_errors.ndjson"; + LOG.fine(() -> "Outputting the error to " + workItemError); + initializeBlobClient(workItemError); + + AppendBlobClient aClient = client.getAppendBlobClient(); + if (!client.exists().booleanValue()) { + aClient.create(); + } + aClient.appendBlock( + new ByteArrayInputStream(this.transientUserData.getBufferStreamForImportError().toByteArray()), + this.transientUserData.getBufferStreamForImportError().size()); + + this.transientUserData.getBufferStreamForImportError().reset(); + // Push the success + // @implNote Sadly we don't do this right now. + } + } + + + @Override + public void close() throws Exception { + // No Operation + } + + @Override + public List getResources() throws FHIRException { + return resources; + } + + @Override + public long getNumberOfParseFailures() throws FHIRException { + return parseFailures; + } + + @Override + public long getNumberOfLoaded() throws FHIRException { + return resources.size(); + } + + @Override + public void registerTransient(ImportTransientUserData transientUserData) { + this.transientUserData = transientUserData; + this.currentBytes = transientUserData.getCurrentBytes(); + } + + @Override + public void registerTransient(long executionId, ExportTransientUserData transientUserData, String cosBucketPathPrefix, String fhirResourceType) throws Exception { + if (transientUserData == null) { + LOG.warning("registerTransient: chunkData is null, this should never happen!"); + throw new Exception("registerTransient: chunkData is null, this should never happen!"); + } + + this.cosBucketPathPrefix = cosBucketPathPrefix; + this.fhirResourceType = fhirResourceType; + + this.chunkData = transientUserData; + } +} diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/FileProvider.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/FileProvider.java index 35a051f7017..57cf0926d8c 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/FileProvider.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/FileProvider.java @@ -136,8 +136,7 @@ public long getNumberOfLoaded() throws FHIRException { } @Override - public void registerTransient(long executionId, ExportTransientUserData transientUserData, String exportPathPrefix, String fhirResourceType, - boolean isExportPublic) throws Exception { + public void registerTransient(long executionId, ExportTransientUserData transientUserData, String exportPathPrefix, String fhirResourceType) throws Exception { if (transientUserData == null) { String msg = "registerTransient: chunkData is null, this should never happen!"; logger.warning(msg); diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/HttpsProvider.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/HttpsProvider.java index 1a14fc822a2..4145db7173e 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/HttpsProvider.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/HttpsProvider.java @@ -85,8 +85,7 @@ public long getNumberOfLoaded() throws FHIRException { } @Override - public void registerTransient(long executionId, ExportTransientUserData transientUserData, String cosBucketPathPrefix, String fhirResourceType, - boolean isExportPublic) { + public void registerTransient(long executionId, ExportTransientUserData transientUserData, String cosBucketPathPrefix, String fhirResourceType) { } diff --git a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/S3Provider.java b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/S3Provider.java index d590cd0c04c..98ab9fc649d 100644 --- a/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/S3Provider.java +++ b/fhir-bulkdata-webapp/src/main/java/com/ibm/fhir/bulkdata/provider/impl/S3Provider.java @@ -44,6 +44,7 @@ import com.ibm.fhir.operation.bulkdata.client.HttpWrapper; import com.ibm.fhir.operation.bulkdata.config.ConfigurationAdapter; import com.ibm.fhir.operation.bulkdata.config.ConfigurationFactory; +import com.ibm.fhir.operation.bulkdata.config.s3.S3HostStyle; /** * S3Provider for ibm-cos and aws-s3 @@ -64,15 +65,21 @@ public class S3Provider implements Provider { private SparkParquetWriter parquetWriter = null; private String bucketName = null; + private boolean pathStyle; private boolean create = false; - private boolean isExportPublic = false; private long executionId = -1; private String cosBucketPathPrefix = null; private String fhirResourceType = null; + /** + * The provider loads the Client based on the Source. + * The Source (storageProvider) must be s3 compatible. + * @param source + * @throws FHIRException + */ public S3Provider(String source) throws FHIRException { ConfigurationAdapter adapter = ConfigurationFactory.getInstance(); @@ -80,10 +87,9 @@ public S3Provider(String source) throws FHIRException { String cosLocation = adapter.getStorageProviderLocation(source); String cosEndpointUrl = adapter.getStorageProviderEndpointInternal(source); - String bucketName = adapter.getStorageProviderBucketName(source); + bucketName = adapter.getStorageProviderBucketName(source); boolean iam = adapter.isStorageProviderAuthTypeIam(source); - isExportPublic = adapter.isStorageProviderExportPublic(source); String apiKey = null; String resourceId = null; @@ -103,11 +109,15 @@ public S3Provider(String source) throws FHIRException { // Set up the connection to Cos if (logger.isLoggable(Level.FINE)) { - logger.fine("Connecting to S3: " + cosEndpointUrl + " [" + cosLocation + "]"); + logger.fine("Connecting to S3: [" + cosEndpointUrl + "] [" + cosLocation + "]"); } create = adapter.shouldStorageProviderCreate(source); + // There are two styles PATH/VIRTUAL_HOST + S3HostStyle kind = adapter.getS3HostStyleByStorageProvider(source); + pathStyle = S3HostStyle.PATH.equals(kind); + // Create a COS/S3 client if it's not created yet. client = getClient(iam, apiKey, resourceId, cosEndpointUrl, cosLocation, useFhirServerTrustStore); @@ -115,15 +125,14 @@ public S3Provider(String source) throws FHIRException { logger.warning("Failed to get client!"); throw new FHIRException("Failed to get client!!"); } else { - logger.fine("Succeed get client!"); + logger.fine("Succeed to get client!"); } - if (bucketName == null) { - logger.warning("Failed to get BucketName!"); - } else { - logger.fine("Succeed get BucketName!"); + if (bucketName != null) { + logger.fine("Succeed to get BucketName!"); + // Naming convention has it as - The bucket name can be between 3 and 63 characters long, and can contain only lower-case characters, numbers, periods, and dashes. + this.bucketName = bucketName.trim().toLowerCase(); } - this.bucketName = bucketName.trim().toLowerCase(); if (adapter.isStorageProviderParquetEnabled(source)) { try { @@ -135,8 +144,17 @@ public S3Provider(String source) throws FHIRException { } } - private static AmazonS3 getClient(boolean iam, String cosApiKeyProperty, String cosSrvinstId, - String cosEndpointUrl, String cosLocation, boolean useFhirServerTrustStore) { + /** + * gets the s3 client used with ibm/aws/minio + * @param iam + * @param cosApiKeyProperty + * @param cosSrvinstId + * @param cosEndpointUrl + * @param cosLocation + * @param useFhirServerTrustStore + * @return + */ + private AmazonS3 getClient(boolean iam, String cosApiKeyProperty, String cosSrvinstId, String cosEndpointUrl, String cosLocation, boolean useFhirServerTrustStore) { ConfigurationAdapter configAdapter = ConfigurationFactory.getInstance(); AWSCredentials credentials; @@ -148,7 +166,10 @@ private static AmazonS3 getClient(boolean iam, String cosApiKeyProperty, String } ClientConfiguration clientConfig = - new ClientConfiguration().withRequestTimeout(configAdapter.getCoreCosRequestTimeout()).withTcpKeepAlive(configAdapter.getCoreCosTcpKeepAlive()).withSocketTimeout(configAdapter.getCoreCosSocketTimeout()); + new ClientConfiguration() + .withRequestTimeout(configAdapter.getCoreCosRequestTimeout()) + .withTcpKeepAlive(configAdapter.getCoreCosTcpKeepAlive()) + .withSocketTimeout(configAdapter.getCoreCosSocketTimeout()); if (useFhirServerTrustStore) { ApacheHttpClientConfig apacheClientConfig = clientConfig.getApacheHttpClientConfig(); @@ -162,7 +183,16 @@ private static AmazonS3 getClient(boolean iam, String cosApiKeyProperty, String } } - return AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials)).withEndpointConfiguration(new EndpointConfiguration(cosEndpointUrl, cosLocation)).withPathStyleAccessEnabled(true).withClientConfiguration(clientConfig).build(); + logger.fine(() -> "The Path Style access is '" + pathStyle + "'"); + + // A useful link for the builder describing the pathStyle: + // https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Builder.html#withPathStyleAccessEnabled-java.lang.Boolean- + return AmazonS3ClientBuilder.standard() + .withCredentials(new AWSStaticCredentialsProvider(credentials)) + .withEndpointConfiguration(new EndpointConfiguration(cosEndpointUrl, cosLocation)) + .withClientConfiguration(clientConfig) + .withPathStyleAccessEnabled(pathStyle) + .build(); } /** @@ -171,15 +201,13 @@ private static AmazonS3 getClient(boolean iam, String cosApiKeyProperty, String * @return */ public boolean exists() { - boolean ex = client != null && client.doesBucketExistV2(bucketName); - if (ex == false) { - logger.warning("Bucket '" + bucketName + "' not found! Client [" + (client != null) + "]"); - } - return ex; + // Only valid with a path access style, else we short circuit + return client != null && + (!pathStyle || !client.doesBucketExistV2(bucketName)); } /** - * lists the buckets when logging + * lists the buckets when logging out bucket details */ public void listBuckets() { if (client != null && logger.isLoggable(Level.FINE)) { @@ -195,15 +223,20 @@ public void listBuckets() { /** * get the list of objects based on the continuation token. * + * @param prefix the search key * @param continuationToken * null or string indicating a continuation token. * @return * @throws FHIRException */ - public ListObjectsV2Result getListObject(String continuationToken) throws FHIRException { + public ListObjectsV2Result getListObject(String prefix, String continuationToken) throws FHIRException { if (client != null) { ListObjectsV2Request request = - new ListObjectsV2Request().withBucketName(bucketName).withMaxKeys(1000).withContinuationToken(continuationToken); + new ListObjectsV2Request() + .withPrefix(prefix) + .withMaxKeys(1000) + .withContinuationToken(continuationToken) + .withBucketName(bucketName); return client.listObjectsV2(request); } else { throw new FHIRException("Client is not created"); @@ -256,7 +289,7 @@ public void pushOperationOutcomes() throws FHIRException { if (transientUserData.getBufferStreamForImport().size() > COS_PART_MINIMALSIZE) { if (transientUserData.getUploadIdForOperationOutcomes() == null) { transientUserData.setUploadIdForOperationOutcomes(BulkDataUtils.startPartUpload(client, - bucketName, transientUserData.getUniqueIDForImportOperationOutcomes(), true)); + bucketName, transientUserData.getUniqueIDForImportOperationOutcomes())); } transientUserData.getDataPacksForOperationOutcomes().add(BulkDataUtils.multiPartUpload(client, @@ -279,7 +312,7 @@ public void pushOperationOutcomes() throws FHIRException { if (transientUserData.getBufferStreamForImportError().size() > COS_PART_MINIMALSIZE) { if (transientUserData.getUploadIdForFailureOperationOutcomes() == null) { transientUserData.setUploadIdForFailureOperationOutcomes(BulkDataUtils.startPartUpload(client, - bucketName, transientUserData.getUniqueIDForImportFailureOperationOutcomes(), true)); + bucketName, transientUserData.getUniqueIDForImportFailureOperationOutcomes())); } transientUserData.getDataPacksForFailureOperationOutcomes().add(BulkDataUtils.multiPartUpload(client, @@ -350,8 +383,7 @@ public void writeResources(String mediaType, List dtos) throws Ex } @Override - public void registerTransient(long executionId, ExportTransientUserData transientUserData, String cosBucketPathPrefix, String fhirResourceType, - boolean isExportPublic) throws Exception { + public void registerTransient(long executionId, ExportTransientUserData transientUserData, String cosBucketPathPrefix, String fhirResourceType) throws Exception { if (transientUserData == null) { logger.warning("registerTransient: chunkData is null, this should never happen!"); throw new Exception("registerTransient: chunkData is null, this should never happen!"); @@ -361,7 +393,6 @@ public void registerTransient(long executionId, ExportTransientUserData transien this.chunkData = transientUserData; this.cosBucketPathPrefix = cosBucketPathPrefix; this.fhirResourceType = fhirResourceType; - this.isExportPublic = isExportPublic; } private void pushFhirJsonsToCos(InputStream in, int dataLength) throws Exception { @@ -374,7 +405,7 @@ private void pushFhirJsonsToCos(InputStream in, int dataLength) throws Exception String uploadId = chunkData.getUploadId(); if (uploadId == null) { - uploadId = BulkDataUtils.startPartUpload(client, bucketName, itemName, isExportPublic); + uploadId = BulkDataUtils.startPartUpload(client, bucketName, itemName); chunkData.setUploadId(uploadId); } diff --git a/fhir-bulkdata-webapp/src/main/resources/META-INF/batch-jobs/FhirBulkImportChunkJob.xml b/fhir-bulkdata-webapp/src/main/resources/META-INF/batch-jobs/FhirBulkImportChunkJob.xml index 13dd2735392..94f2a95edab 100644 --- a/fhir-bulkdata-webapp/src/main/resources/META-INF/batch-jobs/FhirBulkImportChunkJob.xml +++ b/fhir-bulkdata-webapp/src/main/resources/META-INF/batch-jobs/FhirBulkImportChunkJob.xml @@ -31,6 +31,7 @@ + @@ -43,6 +44,7 @@ + diff --git a/fhir-bulkdata-webapp/src/test/java/com/ibm/fhir/bulkdata/provider/impl/AzureProviderMain.java b/fhir-bulkdata-webapp/src/test/java/com/ibm/fhir/bulkdata/provider/impl/AzureProviderMain.java new file mode 100644 index 00000000000..f7f8fd1789e --- /dev/null +++ b/fhir-bulkdata-webapp/src/test/java/com/ibm/fhir/bulkdata/provider/impl/AzureProviderMain.java @@ -0,0 +1,181 @@ +/* + * (C) Copyright IBM Corp. 2021 + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.ibm.fhir.bulkdata.provider.impl; + +import static com.ibm.fhir.model.type.String.string; + +import java.io.ByteArrayOutputStream; +import java.time.LocalDate; +import java.time.ZoneOffset; +import java.time.temporal.ChronoUnit; +import java.util.Collections; +import java.util.UUID; + +import com.ibm.fhir.bulkdata.jbatch.export.data.ExportTransientUserData; +import com.ibm.fhir.exception.FHIRException; +import com.ibm.fhir.model.format.Format; +import com.ibm.fhir.model.generator.FHIRGenerator; +import com.ibm.fhir.model.resource.Observation; +import com.ibm.fhir.model.resource.Patient; +import com.ibm.fhir.model.type.Code; +import com.ibm.fhir.model.type.CodeableConcept; +import com.ibm.fhir.model.type.Coding; +import com.ibm.fhir.model.type.Date; +import com.ibm.fhir.model.type.DateTime; +import com.ibm.fhir.model.type.HumanName; +import com.ibm.fhir.model.type.Id; +import com.ibm.fhir.model.type.Instant; +import com.ibm.fhir.model.type.Meta; +import com.ibm.fhir.model.type.Narrative; +import com.ibm.fhir.model.type.Reference; +import com.ibm.fhir.model.type.Uri; +import com.ibm.fhir.model.type.Xhtml; +import com.ibm.fhir.model.type.code.AdministrativeGender; +import com.ibm.fhir.model.type.code.NarrativeStatus; +import com.ibm.fhir.model.type.code.ObservationStatus; + +public class AzureProviderMain { + + public static void main(String[] args) throws Exception { + AzureProviderMain main = new AzureProviderMain(); + AzureProvider provider = new AzureProvider("dummy"); + + main.test1(args[0]); + //main.test2(args[0], provider); + } + + public void test2(String arg0, AzureProvider provider) throws FHIRException { + ExportTransientUserData chunkData = ExportTransientUserData.Builder.builder().build(); + ByteArrayOutputStream os = chunkData.getBufferStream(); + + String cosBucketPathPrefix = "DEMO0.956558326916514"; + provider.registerOverride(arg0, "test", chunkData, cosBucketPathPrefix, "Patient", 0); + provider.readResources(0, cosBucketPathPrefix + "/Patient_1.ndjson"); + provider.readResources(0, cosBucketPathPrefix + "/Patient_1.ndjson"); + provider.readResources(0, cosBucketPathPrefix + "/Patient_1.ndjson"); + System.out.println(provider.getResources().size()); + } + + public void test1(String arg0) throws Exception { + AzureProviderMain main = new AzureProviderMain(); + Patient patient = main.buildTestPatient(); + Observation observation = main.buildObservation(patient.getId()); + + ExportTransientUserData chunkData = ExportTransientUserData.Builder.builder().build(); + ByteArrayOutputStream os = chunkData.getBufferStream(); + + FHIRGenerator.generator(Format.JSON).generate(patient, os); + os.write("\r\n".getBytes()); + FHIRGenerator.generator(Format.JSON).generate(observation, os); + os.write("\r\n".getBytes()); + + String cosBucketPathPrefix = ("DEMO" + Math.random()); + + AzureProvider provider = new AzureProvider("dummy"); + provider.registerOverride(arg0, "test", chunkData, cosBucketPathPrefix, "Patient", 0); + provider.createSource(); + provider.listBlobsForContainer(); + provider.writeResources("application/ndjson", Collections.emptyList()); + provider.listBlobsForContainer(); + System.out.println(provider.getSize(cosBucketPathPrefix + "/null_1.ndjson")); + + os = chunkData.getBufferStream(); + FHIRGenerator.generator(Format.JSON).generate(patient, os); + os.write("\r\n".getBytes()); + FHIRGenerator.generator(Format.JSON).generate(observation, os); + os.write("\r\n".getBytes()); + provider.writeResources("application/ndjson", Collections.emptyList()); + provider.listBlobsForContainer(); + System.out.println(provider.getSize(cosBucketPathPrefix + "/null_1.ndjson")); + + os = chunkData.getBufferStream(); + FHIRGenerator.generator(Format.JSON).generate(patient, os); + os.write("\r\n".getBytes()); + FHIRGenerator.generator(Format.JSON).generate(observation, os); + os.write("\r\n".getBytes()); + provider.writeResources("application/ndjson", Collections.emptyList()); + provider.listBlobsForContainer(); + System.out.println(provider.getSize(cosBucketPathPrefix + "/null_1.ndjson")); + + provider.readResources(0, cosBucketPathPrefix + "/Patient_1.ndjson"); + provider.readResources(0, cosBucketPathPrefix + "/Patient_1.ndjson"); + provider.readResources(0, cosBucketPathPrefix + "/Patient_1.ndjson"); + provider.readResources(0, cosBucketPathPrefix + "/Patient_1.ndjson"); + System.out.println(provider.getResources().size()); + + } + + private Patient buildTestPatient() { + String id = UUID.randomUUID().toString(); + Meta meta = + Meta.builder() + .versionId(Id.of("1")) + .lastUpdated(Instant.now(ZoneOffset.UTC)) + .build(); + + com.ibm.fhir.model.type.String given = + com.ibm.fhir.model.type.String.builder() + .value("John") + .build(); + + HumanName name = + HumanName.builder() + .id("someId") + .given(given) + .family(string("Doe")).build(); + + java.lang.String uUID = UUID.randomUUID().toString(); + + Reference providerRef = + Reference.builder().reference(string("urn:uuid:" + uUID)).build(); + + return Patient.builder().id(id) + .active(com.ibm.fhir.model.type.Boolean.TRUE) + .multipleBirth(com.ibm.fhir.model.type.Integer.of(2)) + .meta(meta).name(name).birthDate(Date.of(LocalDate.now().minus(30,ChronoUnit.YEARS))) + .gender(AdministrativeGender.FEMALE) + .generalPractitioner(providerRef).text( + Narrative.builder() + .div(Xhtml.of("
    loaded from the datastore
    ")) + .status(NarrativeStatus.GENERATED).build()) + .build(); + } + + public Observation buildObservation(String patientId) { + CodeableConcept code = CodeableConcept.builder().coding( + Coding.builder() + .code(Code.of("82810-3")) + .system(Uri.of("http://loinc.org")) + .display(string("Pregnancy status")) + .build()) + .text(string("Pregnancy status")) + .build(); + + Narrative text = Narrative.builder() + .div(Xhtml.of("
    loaded from the datastore
    ")) + .status(NarrativeStatus.GENERATED).build(); + + CodeableConcept value = CodeableConcept.builder().coding( + Coding.builder() + .code(Code.of("LA15173-0")) + .system(Uri.of("http://loinc.org")) + .display(string("Pregnant")) + .build()) + .text(string("Pregnant")) + .build(); + + Observation observation = Observation.builder() + .text(text) + .status(ObservationStatus.FINAL) + .code(code) + .subject(Reference.builder().reference(string("Patient/" + patientId)).build()) + .value(value) + .effective(DateTime.of(LocalDate.of(2020, 6, 20))) + .build(); + return observation; + } +} diff --git a/fhir-cache/pom.xml b/fhir-cache/pom.xml index e47aaf46f1c..142572c433d 100644 --- a/fhir-cache/pom.xml +++ b/fhir-cache/pom.xml @@ -5,7 +5,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../fhir-parent fhir-cache diff --git a/fhir-cli/.gitignore b/fhir-cli/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/fhir-cli/pom.xml b/fhir-cli/pom.xml deleted file mode 100644 index 08c83acb9ac..00000000000 --- a/fhir-cli/pom.xml +++ /dev/null @@ -1,66 +0,0 @@ - - 4.0.0 - - - com.ibm.fhir - fhir-parent - 4.8.0-SNAPSHOT - ../fhir-parent - - - fhir-cli - Command-line interface for FHIR Client API - jar - - - - - - - ${project.groupId} - fhir-core - ${project.version} - - - ${project.groupId} - fhir-client - ${project.version} - - - commons-cli - commons-cli - - - org.testng - testng - test - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - fhir-cli - - single - - package - - fhir-cli - false - true - - src/main/assembly/distribution.xml - - - - - - - - diff --git a/fhir-cli/src/main/assembly/distribution.xml b/fhir-cli/src/main/assembly/distribution.xml deleted file mode 100644 index 527e0bc4014..00000000000 --- a/fhir-cli/src/main/assembly/distribution.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - distribution - fhir-cli - true - - zip - - - - - src/main/resources/scripts - - 0755 - - - - - src/main/resources/fhir-cli.properties - - 0644 - - - - - true - lib - 0755 - 0755 - - - diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/FHIRCLI.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/FHIRCLI.java deleted file mode 100644 index 771ce3391f9..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/FHIRCLI.java +++ /dev/null @@ -1,388 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016, 2020 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli; - -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintStream; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.io.Writer; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; - -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.CommandLineParser; -import org.apache.commons.cli.DefaultParser; -import org.apache.commons.cli.HelpFormatter; -import org.apache.commons.cli.Option; -import org.apache.commons.cli.Options; - -import com.ibm.fhir.cli.invoker.BatchInvoker; -import com.ibm.fhir.cli.invoker.ConditionalCreateInvoker; -import com.ibm.fhir.cli.invoker.ConditionalDeleteInvoker; -import com.ibm.fhir.cli.invoker.ConditionalUpdateInvoker; -import com.ibm.fhir.cli.invoker.CreateInvoker; -import com.ibm.fhir.cli.invoker.DeleteInvoker; -import com.ibm.fhir.cli.invoker.HistoryInvoker; -import com.ibm.fhir.cli.invoker.InvocationContext; -import com.ibm.fhir.cli.invoker.MetadataInvoker; -import com.ibm.fhir.cli.invoker.OperationInvoker; -import com.ibm.fhir.cli.invoker.ReadInvoker; -import com.ibm.fhir.cli.invoker.SearchAllInvoker; -import com.ibm.fhir.cli.invoker.SearchInvoker; -import com.ibm.fhir.cli.invoker.SearchPostInvoker; -import com.ibm.fhir.cli.invoker.TransactionInvoker; -import com.ibm.fhir.cli.invoker.UpdateInvoker; -import com.ibm.fhir.cli.invoker.ValidateInvoker; -import com.ibm.fhir.cli.invoker.VreadInvoker; -import com.ibm.fhir.client.FHIRResponse; -import com.ibm.fhir.core.FHIRMediaType; -import com.ibm.fhir.model.format.Format; -import com.ibm.fhir.model.generator.FHIRGenerator; -import com.ibm.fhir.model.resource.Resource; - -/** - * This class provides a command-line interface (CLI) to the FHIR Client API, allowing - * the user to invoke commands on the command-line that invoke the FHIR Client API to - * carry out various FHIR-related operations. - * - * @author padams - */ -public class FHIRCLI { - - public static void main(String[] args) { - FHIRCLI fhircli = null; - try { - println(copyright); - fhircli = new FHIRCLI(args); - fhircli.processCommand(); - System.exit(0); - } catch (Throwable t) { - println("\nUnexpected exception: " + t); - println(getStackTrace(t)); - System.exit(1); - } - } - - private static final String copyright = "\nFHIR Client Command Line Interface (fhir-cli) (c) Copyright IBM Corporation, 2018, 2020.\n"; - private static final String header = "\nProvides access to the FHIR Client API via the command line.\n\nOptions:\n"; - private static final String syntax = "fhir-cli [options]"; - private static final String DEFAULT_MIMETYPE = FHIRMediaType.APPLICATION_FHIR_JSON; - - private static PrintStream console = System.err; - - private String[] args; - - private Map invokers = null; - - public FHIRCLI(String[] args) { - this.args = args; - initInvokersMap(); - } - - public static void setConsoleStream(PrintStream stream) { - console = stream; - } - - private static void println(String s) { - console.println(s); - } - - private static void print(String s) { - console.print(s); - } - - public static String getStackTrace(Throwable t) { - StringWriter sw = new StringWriter(); - t.printStackTrace(new PrintWriter(sw)); - return sw.toString(); - } - - /** - * Instantiates an OperationInvoker for each supported operation and adds it to a Map. - */ - private void initInvokersMap() { - invokers = new HashMap(); - invokers.put(Operations.BATCH, new BatchInvoker()); - invokers.put(Operations.CREATE, new CreateInvoker()); - invokers.put(Operations.COND_CREATE, new ConditionalCreateInvoker()); - invokers.put(Operations.DELETE, new DeleteInvoker()); - invokers.put(Operations.COND_DELETE, new ConditionalDeleteInvoker()); - invokers.put(Operations.HISTORY, new HistoryInvoker()); - invokers.put(Operations.METADATA, new MetadataInvoker()); - invokers.put(Operations.READ, new ReadInvoker()); - invokers.put(Operations.SEARCH, new SearchInvoker()); - invokers.put(Operations.SEARCHALL, new SearchAllInvoker()); - invokers.put(Operations.SEARCH_POST, new SearchPostInvoker()); - invokers.put(Operations.TRANSACTION, new TransactionInvoker()); - invokers.put(Operations.UPDATE, new UpdateInvoker()); - invokers.put(Operations.COND_UPDATE, new ConditionalUpdateInvoker()); - invokers.put(Operations.VALIDATE, new ValidateInvoker()); - invokers.put(Operations.VREAD, new VreadInvoker()); - } - - public void processCommand() throws Exception { - Options options = createOptions(); - - // Parse the command-line args into a CommandLine. - CommandLineParser parser = new DefaultParser(); - CommandLine cmdline = null; - try { - cmdline = parser.parse(options, args); - } catch (Throwable t) { - throw new IllegalArgumentException("Error while parsing command line options.", t); - } - - // If "help" was requested, then let's display that and we're done. - if (cmdline.hasOption(OptionNames.HELP.getShortName())) { - displayHelp(options); - return; - } - - try { - // Next, build an InvocationContext object. - InvocationContext context = buildInvocationContext(cmdline); - - // Invoke the operation. - invokeOperation(context); - - // Process the response. - processResponse(context); - - } catch (Throwable t) { - throw new IllegalStateException("Unexpected exception occurred while invoking the operation.", t); - } - } - - /** - * Builds an InvocationContext that holds all the important pieces of context for the - * requested API invocation. - * @param cmdline a CommandLine object that holds all the command-line options specified by the user - */ - private InvocationContext buildInvocationContext(CommandLine cmdline) { - InvocationContext ic = new InvocationContext(); - - // Set the operation in the IC. - if (cmdline.hasOption(OptionNames.OPERATION.getShortName())) { - String opString = cmdline.getOptionValue(OptionNames.OPERATION.getShortName()); - Operations operation = Operations.fromString(opString); - if (operation == null) { - throw new IllegalArgumentException("Unrecognized operation name: " + opString); - } - ic.setOperation(operation); - } else { - throw new IllegalArgumentException("The 'operation' option was missing."); - } - - // Set the mime type. - ic.setMimeType(getMimetype(cmdline)); - - // Set the properties filename in the IC. - if (cmdline.hasOption(OptionNames.PROPERTIES.getShortName())) { - ic.setPropertiesFile(cmdline.getOptionValue(OptionNames.PROPERTIES.getShortName())); - } else { - throw new IllegalArgumentException("The 'properties' option was missing."); - } - - // Set the resource filename in the IC. - if (cmdline.hasOption(OptionNames.RESOURCE.getShortName())) { - ic.setResourceFile(cmdline.getOptionValue(OptionNames.RESOURCE.getShortName())); - } - - // Set the resource type in the IC. - if (cmdline.hasOption(OptionNames.RESOURCETYPE.getShortName())) { - ic.setResourceType(cmdline.getOptionValue(OptionNames.RESOURCETYPE.getShortName())); - } - - // Set the object id in the IC. - if (cmdline.hasOption(OptionNames.ID.getShortName())) { - ic.setResourceId(cmdline.getOptionValue(OptionNames.ID.getShortName())); - } - - // Set the version # in the IC. - if (cmdline.hasOption(OptionNames.VERSIONID.getShortName())) { - ic.setVersionId(cmdline.getOptionValue(OptionNames.VERSIONID.getShortName())); - } - - // Set the output filename in the IC. - if (cmdline.hasOption(OptionNames.OUTPUT.getShortName())) { - ic.setOutputFile(cmdline.getOptionValue(OptionNames.OUTPUT.getShortName())); - } - - // Set the verbose flag in the IC. - if (cmdline.hasOption(OptionNames.VERBOSE.getShortName())) { - ic.setVerbose(true); - } - - collectQueryParameters(cmdline, ic); - collectHeaders(cmdline, ic); - - return ic; - } - - /** - * Invokes the operation that is described by the InvocationContext. - * @param ic the InvocationContext that holds all the relevant information - * @throws Exception - */ - private void invokeOperation(InvocationContext ic) throws Exception { - OperationInvoker invoker = invokers.get(ic.getOperation()); - if (invoker == null) { - throw new UnsupportedOperationException("Operation '" + ic.getOperation().getOpName() + "' is not yet implemented"); - } - - long startTime = 0; - - print("Invoking operation '" + ic.getOperation().getOpName() + "'..."); - startTime = System.currentTimeMillis(); - - invoker.invoke(ic); - - long elapsedTime = System.currentTimeMillis() - startTime; - print(" done! (" + elapsedTime + "ms)\n"); - } - - /** - * Processes the results of the operation invocation by retrieving the - * response information from the InvocationContext and displaying it - * according to the specified options. - * - * @param context the InvocationContext that holds the response information - * @throws Exception - */ - private void processResponse(InvocationContext ic) throws Exception { - FHIRResponse response = ic.getResponse(); - if (response != null) { - Response jaxrsResponse = response.getResponse(); - - println("Status code: " + response.getStatus()); - - String locationURI = response.getLocation(); - if (locationURI != null) { - println("Location URI: " + locationURI); - } - - String etag = response.getETag(); - if (etag != null) { - println("ETag: " + etag); - } - - String lastModified = (response.getLastModified() != null ? response.getLastModified().toString() : null); - if (lastModified != null) { - println("Last modified: " + lastModified); - } - - // If verbose is requested, then display the headers. - if (ic.isVerbose()) { - println("Response headers:"); - MultivaluedMap headers = jaxrsResponse.getStringHeaders(); - for (Map.Entry> headerEntry : headers.entrySet()) { - for (String value : headerEntry.getValue()) { - println(" " + headerEntry.getKey() + ": " + value); - } - } - println(""); - } - - if (!response.isEmpty()) { - Resource responseObj = response.getResource(Resource.class); - if (responseObj != null) { - Writer writer = null; - String outputFile = ic.getOutputFile(); - if (outputFile != null && !outputFile.isEmpty()) { - FileOutputStream os = new FileOutputStream(outputFile); - writer = new OutputStreamWriter(os); - println("Response resource written to file: " + outputFile); - } else { - writer = new OutputStreamWriter(console); - println("Response resource:\n"); - } - - FHIRGenerator.generator( Format.JSON, false).generate(responseObj, writer); - } - } - } - } - - /** - * Visits each "header" option and adds it to the InvocationContext. - */ - private void collectHeaders(CommandLine cmdline, InvocationContext ic) { - for (Option option : cmdline.getOptions()) { - if (option.getOpt().equals(OptionNames.HEADER.getShortName())) { - List values = option.getValuesList(); - if (values != null && values.size() >= 2) { - ic.addHeader(values.get(0), values.get(1)); - } - } - } - } - - /** - * Visits each "queryParameter" option and adds it to the InvocationContext. - */ - private void collectQueryParameters(CommandLine cmdline, InvocationContext ic) { - for (Option option : cmdline.getOptions()) { - if (option.getOpt().equals(OptionNames.QUERYPARAMETER.getShortName())) { - List values = option.getValuesList(); - if (values != null && values.size() >= 2) { - ic.addQueryParameter(values.get(0), values.get(1)); - } - } - } - } - - /** - * Determines the correct mimeType to use for the request, based on the command line options. - */ - private String getMimetype(CommandLine cmdline) { - String mimeType = DEFAULT_MIMETYPE; -// if (cmdline.hasOption(OptionNames.XML.getShortName())) { -// mimeType = "application/fhir+xml"; -// } - return mimeType; - } - - /** - * Returns an Options object with the set of options supported by this tool. - */ - private Options createOptions() { - Options options = new Options(); - options - .addOption(Option.builder(OptionNames.HELP.getShortName()).longOpt(OptionNames.HELP.getLongName()).desc(OptionNames.HELP.getDesc()).build()) - .addOption(Option.builder(OptionNames.VERBOSE.getShortName()).longOpt(OptionNames.VERBOSE.getLongName()).desc(OptionNames.VERBOSE.getDesc()).build()) - .addOption(Option.builder(OptionNames.OPERATION.getShortName()).longOpt(OptionNames.OPERATION.getLongName()).desc(OptionNames.OPERATION.getDesc()).hasArg().argName(OptionNames.OPERATION.getArgName()).build()) - .addOption(Option.builder(OptionNames.PROPERTIES.getShortName()).longOpt(OptionNames.PROPERTIES.getLongName()).desc(OptionNames.PROPERTIES.getDesc()).hasArg().argName(OptionNames.PROPERTIES.getArgName()).build()) - .addOption(Option.builder(OptionNames.RESOURCE.getShortName()).longOpt(OptionNames.RESOURCE.getLongName()).desc(OptionNames.RESOURCE.getDesc()).hasArg().argName(OptionNames.RESOURCE.getArgName()).build()) - .addOption(Option.builder(OptionNames.RESOURCETYPE.getShortName()).longOpt(OptionNames.RESOURCETYPE.getLongName()).desc(OptionNames.RESOURCETYPE.getDesc()).hasArg().argName(OptionNames.RESOURCETYPE.getArgName()).build()) - .addOption(Option.builder(OptionNames.ID.getShortName()).longOpt(OptionNames.ID.getLongName()).desc(OptionNames.ID.getDesc()).hasArg().argName(OptionNames.ID.getArgName()).build()) - .addOption(Option.builder(OptionNames.VERSIONID.getShortName()).longOpt(OptionNames.VERSIONID.getLongName()).desc(OptionNames.VERSIONID.getDesc()).hasArg().argName(OptionNames.VERSIONID.getArgName()).build()) - .addOption(Option.builder(OptionNames.OUTPUT.getShortName()).longOpt(OptionNames.OUTPUT.getLongName()).desc(OptionNames.OUTPUT.getDesc()).hasArg().argName(OptionNames.OUTPUT.getArgName()).build()) - .addOption(Option.builder(OptionNames.QUERYPARAMETER.getShortName()).longOpt(OptionNames.QUERYPARAMETER.getLongName()).desc(OptionNames.QUERYPARAMETER.getDesc()).numberOfArgs(2).argName(OptionNames.QUERYPARAMETER.getArgName()).valueSeparator().build()) - .addOption(Option.builder(OptionNames.HEADER.getShortName()).longOpt(OptionNames.HEADER.getLongName()).desc(OptionNames.HEADER.getDesc()).numberOfArgs(2).argName(OptionNames.HEADER.getArgName()).valueSeparator().build()); - - return options; - } - - /** - * Displays the help text and usage syntax on the console. - */ - private void displayHelp(Options options) { - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - HelpFormatter helpFormatter = new HelpFormatter(); - String footer = "\nOPERATION should be one of: " + Operations.validOperations() - + "\n\nEach supported operation requires the following command-line options:\n" + Operations.operationsAndRequiredOptions(); - helpFormatter.printHelp(pw, 100, syntax, header, options, 3, 3, footer); - println(sw.toString()); - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/Operations.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/Operations.java deleted file mode 100644 index f586298ee86..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/Operations.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli; - -/** - * This enum defines the valid operations that can be invoked via the command-line tool. - * - * @author padams - */ -public enum Operations { - BATCH("batch", OptionNames.RESOURCE), - CREATE("create", OptionNames.RESOURCE), - COND_CREATE("conditional-create", OptionNames.RESOURCE), - DELETE("delete", OptionNames.RESOURCETYPE, OptionNames.ID), - COND_DELETE("conditional-delete", OptionNames.RESOURCETYPE), - HISTORY("history", OptionNames.RESOURCETYPE, OptionNames.ID), - METADATA("metadata"), - READ("read", OptionNames.RESOURCETYPE, OptionNames.ID), - SEARCH("search", OptionNames.RESOURCETYPE), - SEARCHALL("search-all"), - SEARCH_POST("search-post", OptionNames.RESOURCETYPE), - TRANSACTION("transaction", OptionNames.RESOURCE), - UPDATE("update", OptionNames.RESOURCE), - COND_UPDATE("conditional-update", OptionNames.RESOURCE), - VALIDATE("validate", OptionNames.RESOURCE), - VREAD("vread", OptionNames.RESOURCETYPE, OptionNames.ID, OptionNames.VERSIONID); - - private String opName; - private OptionNames[] requiredOptions; - - private Operations(String opName, OptionNames... requiredOptions) { - this.opName = opName; - this.requiredOptions = requiredOptions; - } - - public String getOpName() { - return this.opName; - } - - public static Operations fromString(String s) { - for (Operations op : Operations.values()) { - if (op.getOpName().equals(s)) { - return op; - } - } - return null; - } - - public static String validOperations() { - StringBuilder sb = new StringBuilder(); - boolean needSep = false; - for (Operations op : Operations.values()) { - if (needSep) { - sb.append(" | "); - } - sb.append(op.getOpName()); - needSep = true; - } - return sb.toString(); - } - - public static String operationsAndRequiredOptions() { - StringBuilder sb = new StringBuilder(); - for (Operations op : Operations.values()) { - sb.append(" "); - sb.append(op.getOpName() + ": "); - OptionNames [] reqOptions = op.getRequiredOptions(); - if (reqOptions != null && reqOptions.length != 0) { - boolean needSep = false; - for (OptionNames option : reqOptions) { - if (needSep) { - sb.append(", "); - } - needSep = true; - sb.append("--" + option.getLongName()); - } - - } else { - sb.append("No options required"); - } - sb.append("\n"); - } - return sb.toString(); - } - - public OptionNames[] getRequiredOptions() { - return requiredOptions; - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/OptionNames.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/OptionNames.java deleted file mode 100644 index 7bb9fe64865..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/OptionNames.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli; - -/** - * This enum defines each of the command-line options, including the long name, short name, description and an optional - * "argName" field for options which take an additional argument. - * - * @author padams - */ -public enum OptionNames { - - OPERATION("operation", "op", "The operation to be invoked", "OPERATION"), - RESOURCE("resource", "r", "Use FHIR resource contained in for operation invocation (e.g. patient.json)", "FILE"), - RESOURCETYPE("type", "t", "Use resource type for the operation invocation (e.g. \"Patient\")", "TYPE"), - ID("resourceId", "id", "Use resource identifier for the operation invocation", "ID"), - VERSIONID("versionId", "vid", "Use version # for the operation invocation", "VID"), - PROPERTIES("properties", "p", "Use FHIR Client properties contained in (e.g. fhir-cli.properties)", "FILE"), - QUERYPARAMETER("queryParameter", "qp", "Include query parameter NAME=VALUE with the operation invocation (e.g. _count=100).", "NAME=VALUE"), - HEADER("header", "H", "Include the specified request header NAME=VALUE with the operation invocation (e.g. If-Match=W/\"3\").", "NAME=VALUE"), - OUTPUT("output", "o", "Write output resource to (e.g. searchresults.json)", "FILE"), - HELP("help", "h", "Display this help text"), - VERBOSE("verbose", "v", "Display detailed output"); - // JSON("json", "j", "Use JSON format for requests and responses"), - // XML("xml", "x", "Use XML format for requests and responses"); - // HEADER("header", "H", "Define a request header with the specified name and value", "HEADER=VALUE"); - - private String longName; - private String shortName; - private String desc; - private String argName; - - private OptionNames(String longName, String shortName, String desc) { - this.longName = longName; - this.shortName = shortName; - this.desc = desc; - } - private OptionNames(String longName, String shortName, String desc, String argName) { - this(longName, shortName, desc); - this.argName = argName; - } - - public String getLongName() { - return this.longName; - } - - public String getShortName() { - return this.shortName; - } - - public String getDesc() { - return this.desc; - } - - public String getArgName() { - return this.argName; - } - -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/BatchInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/BatchInvoker.java deleted file mode 100644 index 22f6230d740..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/BatchInvoker.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -import com.ibm.fhir.model.resource.Bundle; - -/** - * This class is the OperationInvoker implementation for the 'batch' operation. - * - * @author padams - */ -public class BatchInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - Object resource = ic.getRequestResourceWithExcp(); - if (resource instanceof Bundle) { - response = client.batch((Bundle)resource, requestHeaders); - } else { - throw new IllegalArgumentException("Input resource must be a Bundle."); - } - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ConditionalCreateInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ConditionalCreateInvoker.java deleted file mode 100644 index 2021ad0b5c2..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ConditionalCreateInvoker.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2017,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -import javax.json.JsonObject; - -import com.ibm.fhir.model.resource.Resource; - -/** - * This class is the OperationInvoker implementation for the 'conditional create' operation. - * - * @author padams - */ -public class ConditionalCreateInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - Object resource = ic.getRequestResourceWithExcp(); - if (resource instanceof Resource) { - response = client.conditionalCreate((Resource)resource, queryParameters, requestHeaders); - } else { - response = client.conditionalCreate((JsonObject)resource, queryParameters, requestHeaders); - } - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ConditionalDeleteInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ConditionalDeleteInvoker.java deleted file mode 100644 index 2e53c05cca3..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ConditionalDeleteInvoker.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2017,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -/** - * This class is the OperationInvoker implementation for the 'conditional delete' operation. - * - * @author padams - */ -public class ConditionalDeleteInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - String resourceType = ic.getResourceTypeWithExcp(); - - response = client.conditionalDelete(resourceType, queryParameters, requestHeaders); - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ConditionalUpdateInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ConditionalUpdateInvoker.java deleted file mode 100644 index 355f0417b3a..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ConditionalUpdateInvoker.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2017,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -import javax.json.JsonObject; - -import com.ibm.fhir.model.resource.Resource; - -/** - * This class is the OperationInvoker implementation for the 'conditional update' operation. - * - * @author padams - */ -public class ConditionalUpdateInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - Object resource = ic.getRequestResourceWithExcp(); - if (resource instanceof Resource) { - response = client.conditionalUpdate((Resource)resource, queryParameters, requestHeaders); - } else { - response = client.conditionalUpdate((JsonObject)resource, queryParameters, requestHeaders); - } - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/CreateInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/CreateInvoker.java deleted file mode 100644 index be70d8ba4f1..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/CreateInvoker.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -import javax.json.JsonObject; - -import com.ibm.fhir.model.resource.Resource; - -/** - * This class is the OperationInvoker implementation for the 'create' operation. - * - * @author padams - */ -public class CreateInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - Object resource = ic.getRequestResourceWithExcp(); - if (resource instanceof Resource) { - response = client.create((Resource)resource, requestHeaders); - } else { - response = client.create((JsonObject)resource, requestHeaders); - } - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/DeleteInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/DeleteInvoker.java deleted file mode 100644 index e91dd78d521..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/DeleteInvoker.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2017,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -/** - * This class is the OperationInvoker implementation for the 'delete' operation. - * - * @author padams - */ -public class DeleteInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - String resourceType = ic.getResourceTypeWithExcp(); - String resourceId = ic.getResourceIdWithExcp(); - - response = client.delete(resourceType, resourceId, requestHeaders); - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/HistoryInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/HistoryInvoker.java deleted file mode 100644 index d19e05a0d3f..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/HistoryInvoker.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -/** - * This class is the OperationInvoker implementation for the 'history' operation. - * - * @author padams - */ -public class HistoryInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - String resourceType = ic.getResourceTypeWithExcp(); - String resourceId = ic.getResourceIdWithExcp(); - - response = client.history(resourceType, resourceId, queryParameters, requestHeaders); - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/InvocationContext.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/InvocationContext.java deleted file mode 100644 index 882ea16a1aa..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/InvocationContext.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -import java.io.FileInputStream; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -import com.ibm.fhir.cli.Operations; -import com.ibm.fhir.client.FHIRResponse; -import com.ibm.fhir.model.format.Format; -import com.ibm.fhir.model.parser.FHIRParser; - -/** - * This class serves as a holder of context information for a particular operation invocation. - * - * @author padams - */ -public class InvocationContext { - - public class NameValuePair { - private String name; - private String value; - - public NameValuePair(String name, String value) { - this.name = name; - this.value = value; - } - - public String getName() { - return name; - } - - public String getValue() { - return value; - } - } - - private Operations operation; - private String mimeType; - private Properties clientProperties; - private String resourceType; - private String resourceId; - private String versionId; - private String outputFile; - private String propertiesFile; - private String resourceFile; - private boolean verbose; - private FHIRResponse response; - private List queryParameters = new ArrayList<>(); - private List headers = new ArrayList<>(); - - public InvocationContext() { - } - - public Operations getOperation() { - return operation; - } - - public void setOperation(Operations operation) { - this.operation = operation; - } - - public String getMimeType() { - return mimeType; - } - - public void setMimeType(String mimeType) { - this.mimeType = mimeType; - } - - public Properties getClientProperties() { - return clientProperties; - } - - public void setClientProperties(Properties clientProperties) { - this.clientProperties = clientProperties; - } - - public String getResourceType() { - return resourceType; - } - - public void setResourceType(String resourceType) { - this.resourceType = resourceType; - } - - public String getResourceId() { - return resourceId; - } - - public void setResourceId(String resourceId) { - this.resourceId = resourceId; - } - - public String getVersionId() { - return versionId; - } - - public void setVersionId(String versionId) { - this.versionId = versionId; - } - - public String getOutputFile() { - return outputFile; - } - - public void setOutputFile(String outputFile) { - this.outputFile = outputFile; - } - - public String getPropertiesFile() { - return propertiesFile; - } - - public void setPropertiesFile(String propertiesFile) { - this.propertiesFile = propertiesFile; - } - - public String getResourceFile() { - return resourceFile; - } - - public void setResourceFile(String resourceFile) { - this.resourceFile = resourceFile; - } - - public boolean isVerbose() { - return verbose; - } - - public void setVerbose(boolean verbose) { - this.verbose = verbose; - } - - public FHIRResponse getResponse() { - return response; - } - - public void setResponse(FHIRResponse response) { - this.response = response; - } - - public List getQueryParameters() { - return queryParameters; - } - - public List getHeaders() { - return headers; - } - - public void addQueryParameter(String name, String value) { - queryParameters.add(new NameValuePair(name, value)); - } - - public void addHeader(String name, String value) { - headers.add(new NameValuePair(name, value)); - } - - public String getResourceTypeWithExcp() throws Exception { - if (resourceType == null || resourceType.isEmpty()) { - throw new IllegalArgumentException("The 'type' parameter was missing."); - } - - return resourceType; - } - - public String getResourceIdWithExcp() throws Exception { - if (resourceId == null || resourceId.isEmpty()) { - throw new IllegalArgumentException("The 'id' parameter was missing."); - } - - return resourceId; - } - - public String getVersionIdWithExcp() throws Exception { - if (versionId == null || versionId.isEmpty()) { - throw new IllegalArgumentException("The 'versionId' parameter was missing."); - } - - return versionId; - } - - public Object getRequestResourceWithExcp() throws Exception { - Reader reader = null; - InputStream is = null; - - try { - // If the user specified the resource filename then we'll try to read - // the resource from there; otherwise, we'll get it from System.in. - if (resourceFile != null && !resourceFile.isEmpty()) { - is = new FileInputStream(resourceFile); - reader = new InputStreamReader(is); - } else { - reader = new InputStreamReader(System.in); - } - - return FHIRParser.parser(Format.JSON).parse(reader); - } catch (Throwable t) { - throw t; - } finally { - if (reader != null) { - reader.close(); - } - if (is != null) { - is.close(); - } - } - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/MetadataInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/MetadataInvoker.java deleted file mode 100644 index 1878f40b05f..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/MetadataInvoker.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -/** - * This class is the OperationInvoker implementation for the 'metadata' operation. - * - * @author padams - */ -public class MetadataInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - response = client.metadata(requestHeaders); - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/OperationInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/OperationInvoker.java deleted file mode 100644 index 925c74bfa4d..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/OperationInvoker.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.InputStream; -import java.util.List; -import java.util.Properties; - -import com.ibm.fhir.cli.invoker.InvocationContext.NameValuePair; -import com.ibm.fhir.client.FHIRClient; -import com.ibm.fhir.client.FHIRClientFactory; -import com.ibm.fhir.client.FHIRParameters; -import com.ibm.fhir.client.FHIRRequestHeader; -import com.ibm.fhir.client.FHIRResponse; - -/** - * This is a base class for all of the various operation invoker classes. - * - * @author padams - */ -public abstract class OperationInvoker { - protected FHIRClient client; - protected FHIRResponse response; - protected FHIRParameters queryParameters; - protected FHIRRequestHeader[] requestHeaders; - - public void invoke(InvocationContext ic) throws Exception { - preInvoke(ic); - doInvoke(ic); - postInvoke(ic); - } - - /** - * Performs the necessary steps before the operation is invoked. - */ - public void preInvoke(InvocationContext ic) throws Exception { - response = null; - queryParameters = null; - Properties properties = loadClientProperties(ic.getPropertiesFile()); - client = getClient(properties); - - // If query parameters were specified on the command line, - // then create a FHIRParameters object and store them in it. - List params = ic.getQueryParameters(); - if (params != null && !params.isEmpty()) { - queryParameters = new FHIRParameters(); - for (NameValuePair param : params) { - queryParameters.addMultivaluedParameter(param.getName(), param.getValue()); - } - } - - List headers = ic.getHeaders(); - if (headers != null && !headers.isEmpty()) { - requestHeaders = new FHIRRequestHeader[headers.size()]; - for (int i = 0; i < headers.size(); i++) { - NameValuePair header = headers.get(i); - requestHeaders[i] = new FHIRRequestHeader(header.getName(), header.getValue()); - } - } - } - - /** - * Each subclass will implement this method to invoke the appropriate FHIR Client API, based on the operation - * requested by the user. - */ - public abstract void doInvoke(InvocationContext ic) throws Exception; - - /** - * Saves off the relevant response information in the InvocationContext after the operation has been invoked. - */ - public void postInvoke(InvocationContext ic) throws Exception { - ic.setResponse(response); - } - - /** - * Loads the FHIRClient properties from the specified file. - */ - protected Properties loadClientProperties(String filename) throws Exception { - InputStream is = null; - try { - Properties props = new Properties(); - - // Open the properties file specified by the user. - File f = new File(filename); - if (f.exists()) { - is = new FileInputStream(f); - } else { - throw new FileNotFoundException("Properties file '" + filename + "' not found."); - } - - // Load the properties. - props.load(is); - is.close(); - - return props; - } finally { - if (is != null) { - is.close(); - } - } - } - - /** - * Retrieves a new FHIRClient instance using the specified properties. - */ - protected FHIRClient getClient(Properties properties) throws Exception { - return FHIRClientFactory.getClient(properties); - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ReadInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ReadInvoker.java deleted file mode 100644 index 0a20da74d17..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ReadInvoker.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -/** - * This class is the OperationInvoker implementation for the 'read' operation. - * - * @author padams - */ -public class ReadInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - String resourceType = ic.getResourceTypeWithExcp(); - String resourceId = ic.getResourceIdWithExcp(); - - response = client.read(resourceType, resourceId, requestHeaders); - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/SearchAllInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/SearchAllInvoker.java deleted file mode 100644 index cc60374c0f4..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/SearchAllInvoker.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -/** - * This class is the OperationInvoker implementation for the 'search-all' operation. - * - */ -public class SearchAllInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - response = client.searchAll(queryParameters, false, requestHeaders); - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/SearchInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/SearchInvoker.java deleted file mode 100644 index 91e96240e0f..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/SearchInvoker.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -/** - * This class is the OperationInvoker implementation for the 'search' operation. - * - * @author padams - */ -public class SearchInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - String resourceType = ic.getResourceTypeWithExcp(); - - response = client.search(resourceType, queryParameters, requestHeaders); - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/SearchPostInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/SearchPostInvoker.java deleted file mode 100644 index 273cf9b2328..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/SearchPostInvoker.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -/** - * This class is the OperationInvoker implementation for the '_search' operation. - * - * @author padams - */ -public class SearchPostInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - String resourceType = ic.getResourceTypeWithExcp(); - - response = client._search(resourceType, queryParameters, requestHeaders); - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/TransactionInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/TransactionInvoker.java deleted file mode 100644 index f4d2e122e61..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/TransactionInvoker.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -import com.ibm.fhir.model.resource.Bundle; - -/** - * This class is the OperationInvoker implementation for the 'transaction' operation. - * - * @author padams - */ -public class TransactionInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - Object resource = ic.getRequestResourceWithExcp(); - if (resource instanceof Bundle) { - response = client.transaction((Bundle)resource, requestHeaders); - } else { - throw new IllegalArgumentException("Input resource must be a Bundle."); - } - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/UpdateInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/UpdateInvoker.java deleted file mode 100644 index e1e557cea84..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/UpdateInvoker.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -import javax.json.JsonObject; - -import com.ibm.fhir.model.resource.Resource; - -/** - * This class is the OperationInvoker implementation for the 'update' operation. - * - * @author padams - */ -public class UpdateInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - Object resource = ic.getRequestResourceWithExcp(); - if (resource instanceof Resource) { - response = client.update((Resource)resource, requestHeaders); - } else { - response = client.update((JsonObject)resource, requestHeaders); - } - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ValidateInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ValidateInvoker.java deleted file mode 100644 index de94bf075b9..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/ValidateInvoker.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -import javax.json.JsonObject; - -import com.ibm.fhir.model.resource.Resource; - -/** - * This class is the OperationInvoker implementation for the 'validate' operation. - * - * @author padams - */ -public class ValidateInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - Object resource = ic.getRequestResourceWithExcp(); - if (resource instanceof Resource) { - response = client.validate((Resource)resource, requestHeaders); - } else { - response = client.validate((JsonObject)resource, requestHeaders); - } - } -} diff --git a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/VreadInvoker.java b/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/VreadInvoker.java deleted file mode 100644 index c3877659aaa..00000000000 --- a/fhir-cli/src/main/java/com/ibm/fhir/cli/invoker/VreadInvoker.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * (C) Copyright IBM Corp. 2016,2019 - * - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.ibm.fhir.cli.invoker; - -/** - * This class is the OperationInvoker implementation for the 'vread' operation. - * - * @author padams - */ -public class VreadInvoker extends OperationInvoker { - - /* (non-Javadoc) - * @see com.ibm.fhir.cli.OperationInvoker#invoke(com.ibm.fhir.cli.InvocationContext) - */ - @Override - public void doInvoke(InvocationContext ic) throws Exception { - String resourceType = ic.getResourceTypeWithExcp(); - String resourceId = ic.getResourceIdWithExcp(); - String versionId = ic.getVersionIdWithExcp(); - - response = client.vread(resourceType, resourceId, versionId, requestHeaders); - } -} diff --git a/fhir-cli/src/main/resources/fhir-cli.properties b/fhir-cli/src/main/resources/fhir-cli.properties deleted file mode 100644 index 3a0bc69e7ad..00000000000 --- a/fhir-cli/src/main/resources/fhir-cli.properties +++ /dev/null @@ -1,21 +0,0 @@ -# FHIR Client Properties - -fhirclient.rest.base.url = http://localhost:9080/fhir-server/api/v4 - -fhirclient.default.mimetype = application/fhir+json - -fhirclient.basicauth.enabled = true -fhirclient.basicauth.username = fhiruser -fhirclient.basicauth.password = change-password - -fhirclient.clientauth.enabled = false -fhirclient.keystore.location = fhirClientKeystore.jks -fhirclient.keystore.password = change-password -fhirclient.keystore.key.password = change-password -fhirclient.truststore.location = fhirClientTruststore.jks -fhirclient.truststore.password = change-password - -fhirclient.encryption.enabled = false -fhirclient.encryption.keystore.location = fhirkeys.jceks -fhirclient.encryption.keystore.password = change-password -fhirclient.encryption.key.password = change-password diff --git a/fhir-cli/src/main/resources/scripts/fhir-cli b/fhir-cli/src/main/resources/scripts/fhir-cli deleted file mode 100644 index 106dcd7cda5..00000000000 --- a/fhir-cli/src/main/resources/scripts/fhir-cli +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -############################################################################### -# (C) Copyright IBM Corp. 2016, 2017, 2019 -# -# SPDX-License-Identifier: Apache-2.0 -############################################################################### - -# Determine the location of this script. -dirname=`dirname "$0"` -basedir=`unset CDPATH; cd $dirname && pwd` - -# build classpath from all jars in lib -CP_SEP=":" -CP=. -for i in $basedir/lib/*.jar; do - CP="${CP}${CP_SEP}${i}" -done - -# add any JVM options here -#JAVA_OPTS="" - -java -cp "${CP}" ${JAVA_OPTS} com.ibm.fhir.cli.FHIRCLI ${1+"$@"} diff --git a/fhir-cli/src/main/resources/scripts/fhir-cli.bat b/fhir-cli/src/main/resources/scripts/fhir-cli.bat deleted file mode 100644 index 0f851cbae70..00000000000 --- a/fhir-cli/src/main/resources/scripts/fhir-cli.bat +++ /dev/null @@ -1,37 +0,0 @@ -@echo off -@REM ---------------------------------------------------------------------------- -@REM (C) Copyright IBM Corp. 2016,2017,2019 -@REM -@REM SPDX-License-Identifier: Apache-2.0 -@REM ---------------------------------------------------------------------------- - -if "%OS%" == "Windows_NT" setlocal - -setlocal enabledelayedexpansion - - -@REM Determine the location of this script. -set BASEDIR=%~dp0 - -@REM Remove any trailing \ from BASEDIR -if %BASEDIR:~-1%==\ set BASEDIR=%BASEDIR:~0,-1% - -@REM build classpath from all jars in lib -set CP=. -for /R %BASEDIR%\lib %%f in (*.jar) do set CP=!CP!;%%f - -set CMD_LINE_ARGS=%1 -if ""%1""=="""" goto done -shift -:setup -if ""%1""=="""" goto done -set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 -shift -goto setup -:done - -IF NOT DEFINED JAVA_OPTS set JAVA_OPTS= -@REM echo classpath: %CP% -@REM echo arguments: %CMD_LINE_ARGS% - -java -cp "%CP%" %JAVA_OPTS% com.ibm.fhir.cli.FHIRCLI %CMD_LINE_ARGS% diff --git a/fhir-cli/src/test/resources/.empty b/fhir-cli/src/test/resources/.empty deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/fhir-client/pom.xml b/fhir-client/pom.xml index 9cc3d42e57c..a7773de3f7a 100644 --- a/fhir-client/pom.xml +++ b/fhir-client/pom.xml @@ -5,7 +5,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../fhir-parent diff --git a/fhir-client/src/main/java/com/ibm/fhir/client/FHIRClient.java b/fhir-client/src/main/java/com/ibm/fhir/client/FHIRClient.java index 7c70919fec2..4f50439cfd2 100644 --- a/fhir-client/src/main/java/com/ibm/fhir/client/FHIRClient.java +++ b/fhir-client/src/main/java/com/ibm/fhir/client/FHIRClient.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016,2021 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -8,7 +8,7 @@ import java.security.KeyStore; -import javax.json.JsonObject; +import jakarta.json.JsonObject; import javax.ws.rs.client.WebTarget; import com.ibm.fhir.model.resource.Bundle; @@ -140,13 +140,6 @@ public interface FHIRClient { */ WebTarget getWebTarget(String baseURL) throws Exception; - /** - * Returns a JAX-RS 2.0 WebTarget object associated with a given REST API endpoint. - * @return a WebTarget instance that can be used to invoke REST APIs. - * @throws Exception - */ - WebTarget getWebTargetUsingBasicAuth(String baseURL, String username, String pwd) throws Exception; - /** * Sets the default mime-type to be used by the FHIRClient interface when invoking REST API operations. * @param mimeType a string containing the mime-type (e.g. "application/fhir+json") @@ -486,5 +479,5 @@ public interface FHIRClient { /** * Allow the client consumer to be able to get and reuse the same TrustStore if necessary. */ - public KeyStore getTrustStore(); + KeyStore getTrustStore(); } diff --git a/fhir-client/src/main/java/com/ibm/fhir/client/FHIRParameters.java b/fhir-client/src/main/java/com/ibm/fhir/client/FHIRParameters.java index 9bf37899ad5..f74df008c5d 100644 --- a/fhir-client/src/main/java/com/ibm/fhir/client/FHIRParameters.java +++ b/fhir-client/src/main/java/com/ibm/fhir/client/FHIRParameters.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016,2019 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -12,6 +12,8 @@ import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.MultivaluedMap; +import com.ibm.fhir.model.type.code.ResourceType; + /** * This class is used as a container for request parameters associated with a FHIR Client API request. */ @@ -27,18 +29,22 @@ public class FHIRParameters { /** * The valid set of modifiers that can be used when constructing the parameters for a search operation. + * @implNote please keep in sync with {@link com.ibm.fhir.search.SearchConstants.Modifier} */ public enum Modifier { - MISSING("missing"), - EXACT("exact"), - CONTAINS("contains"), - TEXT("text"), - IN("in"), - BELOW("below"), - ABOVE("above"), - NOT("not"), - NOT_IN("not-in"), - TYPE("[type]"); + MISSING("missing"), + EXACT("exact"), + CONTAINS("contains"), + TEXT("text"), + IN("in"), + BELOW("below"), + ABOVE("above"), + NOT("not"), + NOT_IN("not-in"), + // For TYPE, the ResourceType class is used instead + IDENTIFIER("identifier"), + OF_TYPE("of-type"), + ITERATE("iterate"); private String text; @@ -53,16 +59,17 @@ public String text() { /** * The valid set of value prefixes that can be used when constructing the parameters for a search operation. + * @implNote please keep in sync with {@link com.ibm.fhir.search.SearchConstants.Prefix} */ public static enum ValuePrefix { - EQ("eq"), - NE("ne"), - GT("gt"), - LT("lt"), - GE("ge"), - LE("le"), - SA("sa"), - EB("eb"), + EQ("eq"), + NE("ne"), + GT("gt"), + LT("lt"), + GE("ge"), + LE("le"), + SA("sa"), + EB("eb"), AP("ap"); private String text; @@ -83,7 +90,7 @@ public FHIRParameters() { /** * Convenience method which sets the "_format" query parameter. - * + * * @param mimeType * the mimeType to use for the request * @return a handle to the FHIRParameters object @@ -94,7 +101,7 @@ public FHIRParameters format(String mimeType) { /** * Convenience method which sets the "_count" query parameter. - * + * * @param count * the count value to use for the request * @return a handle to the FHIRParameters object @@ -105,7 +112,7 @@ public FHIRParameters count(int count) { /** * Convenience method which sets the "_page" query parameter. - * + * * @param page * the page number to use for the request * @return a handle to the FHIRParameters object @@ -116,7 +123,7 @@ public FHIRParameters page(int page) { /** * Convenience method which sets the "_since" query parameter. - * + * * @param since * a string representing the "since" date value to use for the request * @return a handle to the FHIRParameters object @@ -127,7 +134,7 @@ public FHIRParameters since(String since) { /** * Clears the set of parameters currently contained in the FHIRParameters object. - * + * * @return a handle to the FHIRParameters object */ public FHIRParameters clear() { @@ -137,7 +144,7 @@ public FHIRParameters clear() { /** * Adds the specified query parameter name and value to 'this'. - * + * * @param name * the parameter name * @param value @@ -151,7 +158,7 @@ public FHIRParameters queryParam(String name, String value) { /** * Adds the specified search parameter (name, modifier, values) to 'this'. - * + * * @param name * the parameter name * @param modifier @@ -167,9 +174,27 @@ public FHIRParameters searchParam(String name, Modifier modifier, String... valu return this; } + /** + * Adds the specified search parameter (name, resourceType, values) to 'this'. + * + * @param name + * the parameter name + * @param resourceType + * a resource type (e.g. Patient) as a modifier + * @param values + * one or more values associated with the search parameter + * @return a handle to the FHIRParameters object + */ + public FHIRParameters searchParam(String name, ResourceType resourceType, String... values) { + String parameterName = name + ":" + resourceType.getValue(); + String value = getValueString(values); + addMultivaluedParameter(parameterName, value); + return this; + } + /** * Adds the specified search parameter (name, value-prefix, values) to 'this'. - * + * * @param name * the parameter name * @param prefix @@ -186,7 +211,7 @@ public FHIRParameters searchParam(String name, ValuePrefix prefix, String... val /** * Returns a comma-separated string containing the elements of the 'values' array. - * + * * @param values * an array of strings containing parameter values */ @@ -205,7 +230,7 @@ private String getValueString(String[] values) { /** * Adds the specified search parameter name and values to 'this'. - * + * * @param name * the name of the search parameter * @param values @@ -222,7 +247,7 @@ public FHIRParameters searchParam(String name, String... values) { /** * Returns the collection of parameters that have been added to 'this'. - * + * * @return a MultivalueMap where the key (query parameter name) maps to a list of string values */ public final MultivaluedMap getParameterMap() { @@ -248,7 +273,7 @@ public void addMultivaluedParameter(String name, String value) { /** * Adds a single-valued parameter to 'this'. - * + * * @param name * @param value */ @@ -277,7 +302,7 @@ public String queryString(boolean includeSeparator) { } return sb.toString(); } - + public String queryString() { return queryString(true); } @@ -285,6 +310,7 @@ public String queryString() { /** * This method returns a string representation of the FHIRParameters object. */ + @Override public String toString() { return "FHIRParameters[parameters=" + (getParameters() != null ? getParameters().toString() : "" + "]"); } diff --git a/fhir-client/src/main/java/com/ibm/fhir/client/impl/FHIRClientImpl.java b/fhir-client/src/main/java/com/ibm/fhir/client/impl/FHIRClientImpl.java index 7d45494a4b0..b3edb44d63d 100644 --- a/fhir-client/src/main/java/com/ibm/fhir/client/impl/FHIRClientImpl.java +++ b/fhir-client/src/main/java/com/ibm/fhir/client/impl/FHIRClientImpl.java @@ -20,7 +20,7 @@ import java.util.Map; import java.util.Properties; -import javax.json.JsonObject; +import jakarta.json.JsonObject; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLSession; import javax.ws.rs.RuntimeType; @@ -93,11 +93,66 @@ public class FHIRClientImpl implements FHIRClient { // The tenantId to pass with the X-FHIR-TENANT-ID header private String tenantId; - protected FHIRClientImpl() { - } - public FHIRClientImpl(Properties props) throws Exception { initProperties(props); + + ClientBuilder cb = + ClientBuilder.newBuilder() + .register(new FHIRProvider(RuntimeType.CLIENT)) + .register(new FHIRJsonProvider(RuntimeType.CLIENT)) + .register(new FHIRJsonPatchProvider(RuntimeType.CLIENT)); + + // Add support for basic auth if enabled. + if (isBasicAuthEnabled()) { + cb = cb.register(new FHIRBasicAuthenticator(getBasicAuthUsername(), getBasicAuthPassword())); + } + + // Add support for OAuth 2.0 if enabled. + if (isOAuth2Enabled()) { + cb = cb.register(new FHIROAuth2Authenticator(getOAuth2AccessToken())); + } + + // If using oAuth 2.0 or clientauth, then we need to attach our Keystore. + if (isOAuth2Enabled() || isClientAuthEnabled()) { + cb = cb.keyStore(getKeyStore(), getKeyStoreKeyPassword()); + } + + // If using oAuth 2.0 or clientauth or an https endpoint, then we need to attach our Truststore. + KeyStore ks = getTrustStore(); + if (ks != null) { + cb = cb.trustStore(ks); + } + + // Add a hostname verifier if we're using an ssl transport. + if (usingSSLTransport() && !isHostnameVerificationEnabled()) { + cb = cb.hostnameVerifier(new HostnameVerifier() { + @Override + public boolean verify(String s, SSLSession sslSession) { + return true; + } + }); + } + + // Set the http client's receive timeout setting + cb.property("http.receive.timeout", getHttpTimeout()); // defaults to 60s + + // true: If need, tell Apache CXF to use the Async HTTP conduit for PATCH operation as the + // default HTTP conduit does not support PATCH + // false(default): To avoid the http async client time out issue (http://mail-archives.apache.org + // /mod_mbox/hc-dev/201909.mbox/%3CJIRA.13256372.1568301069000.62179.1568450580088@Atlassian.JIRA%3E), + // please set this to false. + cb.property("use.async.http.conduit", false); + + // Add request/response logging if enabled. + if (isLoggingEnabled()) { + cb.register(LoggingFeature.class); + } + + cb.property("thread.safe.client", true); + + // Save off our cached Client instance. + client = cb.build(); + } @Override @@ -387,11 +442,6 @@ public FHIRResponse vread(String resourceType, String resourceId, String version return new FHIRResponseImpl(response); } - /* - * (non-Javadoc) - * @see com.ibm.fhir.client.FHIRClient#history(java.lang.String, java.lang.String, - * com.ibm.fhir.client.FHIRParameters) - */ @Override public FHIRResponse history(String resourceType, String resourceId, FHIRParameters parameters, FHIRRequestHeader... headers) throws Exception { if (resourceType == null) { @@ -746,92 +796,13 @@ private Builder addRequestHeaders(Builder builder, FHIRRequestHeader[] headers) return builder; } - /** - * Retrieves a jax-rs Client from the ClientBuilder object. The Client instance is created if necessary. - */ - protected synchronized Client getClient() throws Exception { - if (client == null) { - ClientBuilder cb = ClientBuilder.newBuilder() - .register(new FHIRProvider(RuntimeType.CLIENT)) - .register(new FHIRJsonProvider(RuntimeType.CLIENT)) - .register(new FHIRJsonPatchProvider(RuntimeType.CLIENT)); - - // Add support for basic auth if enabled. - if (isBasicAuthEnabled()) { - cb = cb.register(new FHIRBasicAuthenticator(getBasicAuthUsername(), getBasicAuthPassword())); - } - - // Add support for OAuth 2.0 if enabled. - if (isOAuth2Enabled()) { - cb = cb.register(new FHIROAuth2Authenticator(getOAuth2AccessToken())); - } - - // If using oAuth 2.0 or clientauth, then we need to attach our Keystore. - if (isOAuth2Enabled() || isClientAuthEnabled()) { - cb = cb.keyStore(getKeyStore(), getKeyStoreKeyPassword()); - } - - // If using oAuth 2.0 or clientauth or an https endpoint, then we need to attach our Truststore. - KeyStore ks = getTrustStore(); - if (ks != null) { - cb = cb.trustStore(ks); - } - - // Add a hostname verifier if we're using an ssl transport. - if (usingSSLTransport() && !isHostnameVerificationEnabled()) { - cb = cb.hostnameVerifier(new HostnameVerifier() { - - @Override - public boolean verify(String s, SSLSession sslSession) { - return true; - } - }); - } - - // Set the http client's receive timeout setting - cb.property("http.receive.timeout", getHttpTimeout()); // defaults to 60s - - // true: If need, tell Apache CXF to use the Async HTTP conduit for PATCH operation as the - // default HTTP conduit does not support PATCH - // false(default): To avoid the http async client time out issue (http://mail-archives.apache.org - // /mod_mbox/hc-dev/201909.mbox/%3CJIRA.13256372.1568301069000.62179.1568450580088@Atlassian.JIRA%3E), - // please set this to false. - cb.property("use.async.http.conduit", false); - - // Add request/response logging if enabled. - if (isLoggingEnabled()) { - cb.register(LoggingFeature.class); - } - - // Save off our cached Client instance. - client = cb.build(); - } - return client; - } - @Override public WebTarget getWebTarget() throws Exception { - return getClient().target(getBaseEndpointURL()); + return client.target(getBaseEndpointURL()); } @Override public WebTarget getWebTarget(String baseURL) throws Exception { - ClientBuilder cb = - ClientBuilder.newBuilder().register(new FHIRProvider(RuntimeType.CLIENT)).register(new FHIRJsonProvider(RuntimeType.CLIENT)).keyStore(getKeyStore(), getKeyStoreKeyPassword()); - - KeyStore ts = getTrustStore(); - - if (ts != null) { - cb = cb.trustStore(ts); - } - Client client = cb.build(); - return client.target(baseURL); - } - - @Override - public WebTarget getWebTargetUsingBasicAuth(String baseURL, String username, String pwd) throws Exception { - Client client = - ClientBuilder.newBuilder().register(new FHIRProvider(RuntimeType.CLIENT)).register(new FHIRJsonProvider(RuntimeType.CLIENT)).register(new FHIRBasicAuthenticator(username, pwd)).keyStore(getKeyStore(), getKeyStoreKeyPassword()).trustStore(getTrustStore()).build(); return client.target(baseURL); } @@ -1022,6 +993,7 @@ private void setTrustStorePassword(String trustStorePassword) { this.trustStorePassword = trustStorePassword; } + @Override public KeyStore getTrustStore() { return trustStore; } diff --git a/fhir-client/src/main/java/com/ibm/fhir/client/impl/FHIRResponseImpl.java b/fhir-client/src/main/java/com/ibm/fhir/client/impl/FHIRResponseImpl.java index 59e0b2039cd..a8f5ade8dbb 100644 --- a/fhir-client/src/main/java/com/ibm/fhir/client/impl/FHIRResponseImpl.java +++ b/fhir-client/src/main/java/com/ibm/fhir/client/impl/FHIRResponseImpl.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016, 2020 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -10,7 +10,7 @@ import java.time.Instant; import java.util.Date; -import javax.json.JsonObject; +import jakarta.json.JsonObject; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; diff --git a/fhir-client/src/test/java/com/ibm/fhir/client/test/mains/FHIRClientSample.java b/fhir-client/src/test/java/com/ibm/fhir/client/test/mains/FHIRClientSample.java index 53ec54fd46c..5c5167852cd 100644 --- a/fhir-client/src/test/java/com/ibm/fhir/client/test/mains/FHIRClientSample.java +++ b/fhir-client/src/test/java/com/ibm/fhir/client/test/mains/FHIRClientSample.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016, 2020 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -44,7 +44,6 @@ */ public class FHIRClientSample { - public static void main(String[] args) throws Exception { FHIRClientSample sample = new FHIRClientSample(); sample.run(); diff --git a/fhir-client/src/test/java/com/ibm/fhir/client/test/mains/JaxrsClientTestMain.java b/fhir-client/src/test/java/com/ibm/fhir/client/test/mains/JaxrsClientTestMain.java index defc5bed513..ff5f95fc1ca 100644 --- a/fhir-client/src/test/java/com/ibm/fhir/client/test/mains/JaxrsClientTestMain.java +++ b/fhir-client/src/test/java/com/ibm/fhir/client/test/mains/JaxrsClientTestMain.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016,2019 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -38,30 +38,30 @@ import com.ibm.fhir.provider.FHIRProvider; public class JaxrsClientTestMain { - + public static void main(String[] args) throws Exception { Patient patient = buildPatient(); System.out.println("\nJSON:"); - + FHIRGenerator.generator( Format.JSON, false).generate(patient, System.out); System.out.println("\nXML:"); FHIRGenerator.generator( Format.XML, false).generate(patient, System.out); - + Client client = ClientBuilder.newBuilder() .register(new FHIRProvider(RuntimeType.CLIENT)) .build(); - + WebTarget target = client.target("http://localhost:9080/fhir-server/api/v4"); Entity entity = Entity.entity(patient, FHIRMediaType.APPLICATION_FHIR_XML); Response response = target.path("Patient").request().post(entity, Response.class); - + if (Response.Status.CREATED.getStatusCode() == response.getStatus()) { System.out.println(""); System.out.println(response.getStatus()); System.out.println(response.getStatusInfo().getReasonPhrase()); String location = response.getLocation().toString(); System.out.println("location: " + location); - + String id = location.substring(location.lastIndexOf("/") + 1); response = target.path("Patient/" + id).request(FHIRMediaType.APPLICATION_FHIR_JSON).get(); patient = response.readEntity(Patient.class); @@ -69,23 +69,23 @@ public static void main(String[] args) throws Exception { FHIRGenerator.generator( Format.JSON, false).generate(patient, System.out); System.out.println("\nXML:"); FHIRGenerator.generator( Format.XML, false).generate(patient, System.out); - + Observation observation = buildObservation(id); System.out.println("\nJSON:"); FHIRGenerator.generator( Format.JSON, false).generate(observation, System.out); System.out.println("\nXML:"); FHIRGenerator.generator( Format.XML, false).generate(observation, System.out); - + Entity observationEntity = Entity.entity(observation, FHIRMediaType.APPLICATION_FHIR_JSON); response = target.path("Observation").request().post(observationEntity, Response.class); - + if (Response.Status.CREATED.getStatusCode() == response.getStatus()) { System.out.println(""); System.out.println(response.getStatus()); System.out.println(response.getStatusInfo().getReasonPhrase()); location = response.getLocation().toString(); System.out.println("location: " + location); - + response = target.path("Observation").queryParam("subject", "Patient/" + id).request(FHIRMediaType.APPLICATION_FHIR_JSON).get(); Bundle bundle = response.readEntity(Bundle.class); System.out.println("\nJSON:"); @@ -105,7 +105,7 @@ public static void main(String[] args) throws Exception { System.out.println(response.readEntity(String.class)); } } - + public static Patient buildPatient() { Patient patient = Patient.builder().name(HumanName.builder() .family(string("Doe")) @@ -114,12 +114,12 @@ public static Patient buildPatient() { .telecom(ContactPoint.builder().system(ContactPointSystem.PHONE) .use(ContactPointUse.HOME).value(string("555-1234")).build()) .extension(Extension.builder().url("http://ibm.com/fhir/extension/Patient/favorite-color") - .value(string("blue")).build()).build(); + .value(string("blue")).build()).build(); return patient; } - + public static Observation buildObservation(String patientId) { - Observation observation = Observation.builder().status(ObservationStatus.FINAL).bodySite( + Observation observation = Observation.builder().status(ObservationStatus.FINAL).bodySite( CodeableConcept.builder().coding(Coding.builder().code(Code.of("55284-4")) .system(Uri.of("http://loinc.org")).build()) .text(string("Blood pressure systolic & diastolic")).build()) @@ -135,8 +135,8 @@ public static Observation buildObservation(String patientId) { .system(Uri.of("http://loinc.org")).build()) .text(string("Diastolic")).build()) .value(Quantity.builder().value(Decimal.of(93.7)).unit(string("mmHg")).build()).build()) - .build(); + .build(); return observation; - } + } } diff --git a/fhir-client/src/test/java/com/ibm/fhir/client/test/testng/FHIRClientImplTest.java b/fhir-client/src/test/java/com/ibm/fhir/client/test/testng/FHIRClientImplTest.java new file mode 100644 index 00000000000..304a70ef0e6 --- /dev/null +++ b/fhir-client/src/test/java/com/ibm/fhir/client/test/testng/FHIRClientImplTest.java @@ -0,0 +1,51 @@ +/* + * (C) Copyright IBM Corp. 2021 + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.ibm.fhir.client.test.testng; + +import static org.testng.Assert.assertNotNull; + +import java.util.Properties; + +import javax.ws.rs.client.WebTarget; + +import org.testng.annotations.Test; + +import com.ibm.fhir.client.FHIRClient; +import com.ibm.fhir.client.FHIRClientFactory; + +/** + * Tests FHIR Client configurations. + */ +public class FHIRClientImplTest { + + @Test + public void testClientImplWithoutKeyStore() throws Exception { + String baseURL = "http://localhost:9443/test"; + Properties properties = new Properties(); + properties.put(FHIRClient.PROPNAME_BASE_URL, baseURL); + FHIRClient client = FHIRClientFactory.getClient(properties); + WebTarget wt = client.getWebTarget(baseURL + "/Patient?_page=2"); + assertNotNull(wt); + } + + @Test(enabled = false) + public void testClientImplWithBasicAuth() throws Exception { + /* + * used during dev, it's handy test for basicauth, but not reliable for UT/IT. + */ + String baseURL = "https://jigsaw.w3.org/HTTP/Basic/"; + Properties properties = new Properties(); + properties.put("fhirclient.basicauth.enabled", "true"); + properties.put("fhirclient.basicauth.username", "guest"); + properties.put("fhirclient.basicauth.password", "guest"); + properties.put("fhirclient.logging.enabled", "true"); + properties.put(FHIRClient.PROPNAME_BASE_URL, baseURL); + FHIRClient client = FHIRClientFactory.getClient(properties); + WebTarget wt = client.getWebTarget(baseURL); + assertNotNull(wt.request().get()); + } +} \ No newline at end of file diff --git a/fhir-client/src/test/java/com/ibm/fhir/client/test/testng/FHIRParametersTest.java b/fhir-client/src/test/java/com/ibm/fhir/client/test/testng/FHIRParametersTest.java index 389dfc55d02..4c7f8223e0c 100644 --- a/fhir-client/src/test/java/com/ibm/fhir/client/test/testng/FHIRParametersTest.java +++ b/fhir-client/src/test/java/com/ibm/fhir/client/test/testng/FHIRParametersTest.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016,2019 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -14,12 +14,13 @@ import com.ibm.fhir.client.FHIRParameters; import com.ibm.fhir.client.FHIRParameters.Modifier; import com.ibm.fhir.client.FHIRParameters.ValuePrefix; +import com.ibm.fhir.model.type.code.ResourceType; /** * Tests related to the FHIRParameters class. */ public class FHIRParametersTest { - + @Test public void testParameter1() { FHIRParameters p = new FHIRParameters(); @@ -31,7 +32,7 @@ public void testParameter1() { assertTrue(queryString.contains("_page=3")); assertTrue(queryString.contains("_since=2016-01-01")); } - + @Test public void testParameter2() { FHIRParameters p = new FHIRParameters(); @@ -42,7 +43,7 @@ public void testParameter2() { assertTrue(queryString.contains("name:contains=Ortiz")); assertTrue(queryString.contains("favorite-color:in=red,green,blue")); } - + @Test public void testParameter3() { FHIRParameters p = new FHIRParameters(); @@ -53,4 +54,17 @@ public void testParameter3() { assertTrue(queryString.contains("name=eqOrtiz")); assertTrue(queryString.contains("favorite-color=nered")); } + + @Test + public void testParameter4() { + FHIRParameters p = new FHIRParameters(); + p.searchParam("patient", Modifier.IDENTIFIER, "http://acme.org/fhir/identifier/mrn|123456") + .searchParam("identifier", Modifier.OF_TYPE, "http://terminology.hl7.org/CodeSystem/v2-0203|MR|446053") + .searchParam("subject", ResourceType.PATIENT, "Patient/23"); + String queryString = p.queryString(); + assertNotNull(queryString); + assertTrue(queryString.contains("patient:identifier=http://acme.org/fhir/identifier/mrn|123456")); + assertTrue(queryString.contains("identifier:of-type=http://terminology.hl7.org/CodeSystem/v2-0203|MR|446053")); + assertTrue(queryString.contains("subject:Patient=Patient/23")); + } } diff --git a/fhir-client/src/test/resources/test.basic.properties b/fhir-client/src/test/resources/test.basic.properties new file mode 100644 index 00000000000..0941a96675b --- /dev/null +++ b/fhir-client/src/test/resources/test.basic.properties @@ -0,0 +1,23 @@ +# Properties file containing test-related properties + +fhirclient.rest.base.url = https://jigsaw.w3.org/HTTP/Basic/ +fhirclient.default.mimetype = application/fhir+json + +fhirclient.basicauth.enabled = true +fhirclient.basicauth.username = guest +fhirclient.basicauth.password = guest + +fhirclient.clientauth.enabled = false +fhirclient.keystore.location = fhirClientKeyStore.p12 +fhirclient.keystore.password = change-password +fhirclient.keystore.key.password = change-password +fhirclient.truststore.location = fhirClientTrustStore.p12 +fhirclient.truststore.password = change-password + +fhirclient.oAuth2.enabled = false + +fhirclient.encryption.enabled = false + +fhirclient.logging.enabled = false + +fhirclient.hostnameVerification.enabled = false \ No newline at end of file diff --git a/fhir-config/pom.xml b/fhir-config/pom.xml index b6586b669d3..421f3c63734 100644 --- a/fhir-config/pom.xml +++ b/fhir-config/pom.xml @@ -5,7 +5,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../fhir-parent fhir-config diff --git a/fhir-config/src/main/java/com/ibm/fhir/config/ConfigurationService.java b/fhir-config/src/main/java/com/ibm/fhir/config/ConfigurationService.java index a8229833856..ab7d9866a87 100644 --- a/fhir-config/src/main/java/com/ibm/fhir/config/ConfigurationService.java +++ b/fhir-config/src/main/java/com/ibm/fhir/config/ConfigurationService.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016,2020 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -18,10 +18,10 @@ import java.nio.charset.StandardCharsets; import java.util.Map; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; /** * The ConfigurationService is used by the FHIR Server to retrieve JSON-based configuration data. diff --git a/fhir-config/src/main/java/com/ibm/fhir/config/FHIRConfigHelper.java b/fhir-config/src/main/java/com/ibm/fhir/config/FHIRConfigHelper.java index 749e59c4076..8a86c4a06d0 100644 --- a/fhir-config/src/main/java/com/ibm/fhir/config/FHIRConfigHelper.java +++ b/fhir-config/src/main/java/com/ibm/fhir/config/FHIRConfigHelper.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2017,2020 + * (C) Copyright IBM Corp. 2017, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -10,7 +10,7 @@ import java.util.logging.Level; import java.util.logging.Logger; -import javax.json.JsonValue; +import jakarta.json.JsonValue; /** * This class contains a set of static helper methods related to configuration parameters. diff --git a/fhir-config/src/main/java/com/ibm/fhir/config/FHIRConfiguration.java b/fhir-config/src/main/java/com/ibm/fhir/config/FHIRConfiguration.java index 67d044e3856..03666440726 100644 --- a/fhir-config/src/main/java/com/ibm/fhir/config/FHIRConfiguration.java +++ b/fhir-config/src/main/java/com/ibm/fhir/config/FHIRConfiguration.java @@ -40,8 +40,10 @@ public class FHIRConfiguration { public static final String PROPERTY_DEFAULT_PAGE_SIZE = "fhirServer/core/defaultPageSize"; public static final String PROPERTY_MAX_PAGE_SIZE = "fhirServer/core/maxPageSize"; public static final String PROPERTY_MAX_PAGE_INCLUDE_COUNT = "fhirServer/core/maxPageIncludeCount"; + public static final String PROPERTY_CAPABILITIES_URL = "fhirServer/core/capabilitiesUrl"; // Terminology service properties + public static final String PROPERTY_TERM_SERVICE_CAPABILITIES_URL = "fhirServer/term/capabilitiesUrl"; public static final String PROPERTY_GRAPH_TERM_SERVICE_PROVIDER_ENABLED = "fhirServer/term/graphTermServiceProvider/enabled"; public static final String PROPERTY_GRAPH_TERM_SERVICE_PROVIDER_TIME_LIMIT = "fhirServer/term/graphTermServiceProvider/timeLimit"; public static final String PROPERTY_GRAPH_TERM_SERVICE_PROVIDER_CONFIGURATION = "fhirServer/term/graphTermServiceProvider/configuration"; @@ -83,10 +85,13 @@ public class FHIRConfiguration { // Notification config properties public static final String PROPERTY_NOTIFICATION_RESOURCE_TYPES = "fhirServer/notifications/common/includeResourceTypes"; + public static final String PROPERTY_NOTIFICATION_NOTIFICATION_SIZE_BEHAVIOR = "fhirServer/notifications/common/maxNotificationSizeBehavior"; + public static final String PROPERTY_NOTIFICATION_MAX_SIZE = "fhirServer/notifications/common/maxNotificationSizeBytes"; public static final String PROPERTY_WEBSOCKET_ENABLED = "fhirServer/notifications/websocket/enabled"; public static final String PROPERTY_KAFKA_ENABLED = "fhirServer/notifications/kafka/enabled"; public static final String PROPERTY_KAFKA_TOPICNAME = "fhirServer/notifications/kafka/topicName"; public static final String PROPERTY_KAFKA_CONNECTIONPROPS = "fhirServer/notifications/kafka/connectionProperties"; + public static final String PROPERTY_KAFKA_SYNC = "fhirServer/notifications/kafka/sync"; public static final String PROPERTY_NATS_ENABLED = "fhirServer/notifications/nats/enabled"; public static final String PROPERTY_NATS_CLUSTER = "fhirServer/notifications/nats/cluster"; public static final String PROPERTY_NATS_CHANNEL = "fhirServer/notifications/nats/channel"; @@ -133,7 +138,6 @@ public class FHIRConfiguration { public static final String PROPERTY_BULKDATA_BATCHJOB_BATCHUSERPWD = "fhirServer/bulkdata/batch-user-password"; public static final String PROPERTY_BULKDATA_BATCHJOB_BATCHTRUSTSTORE = "fhirServer/bulkdata/batch-truststore"; public static final String PROPERTY_BULKDATA_BATCHJOB_BATCHTRUSTSTOREPWD = "fhirServer/bulkdata/batch-truststore-password"; - public static final String PROPERTY_BULKDATA_BATCHJOB_ISEXPORTPUBLIC = "fhirServer/bulkdata/isExportPublic"; public static final String PROPERTY_BULKDATA_BATCHJOB_USEFHIRSERVERTRUSTSTORE = "fhirServer/bulkdata/useFhirServerTrustStore"; public static final String PROPERTY_BULKDATA_BATCHJOB_ENABLEPARQUET = "fhirServer/bulkdata/enableParquet"; public static final String PROPERTY_BULKDATA_BATCHJOB_SYSTEMEXPIMPL = "fhirServer/bulkdata/systemExportImpl"; diff --git a/fhir-config/src/main/java/com/ibm/fhir/config/PropertyGroup.java b/fhir-config/src/main/java/com/ibm/fhir/config/PropertyGroup.java index 3a037bbf2a5..57d61636b49 100644 --- a/fhir-config/src/main/java/com/ibm/fhir/config/PropertyGroup.java +++ b/fhir-config/src/main/java/com/ibm/fhir/config/PropertyGroup.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016, 2020 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -11,11 +11,11 @@ import java.util.List; import java.util.Map; -import javax.json.JsonArray; -import javax.json.JsonNumber; -import javax.json.JsonObject; -import javax.json.JsonString; -import javax.json.JsonValue; +import jakarta.json.JsonArray; +import jakarta.json.JsonNumber; +import jakarta.json.JsonObject; +import jakarta.json.JsonString; +import jakarta.json.JsonValue; import com.ibm.fhir.core.FHIRUtilities; diff --git a/fhir-config/src/test/java/com/ibm/fhir/config/mock/MockPropertyGroup.java b/fhir-config/src/test/java/com/ibm/fhir/config/mock/MockPropertyGroup.java index 3e1038a548d..aa813b17097 100644 --- a/fhir-config/src/test/java/com/ibm/fhir/config/mock/MockPropertyGroup.java +++ b/fhir-config/src/test/java/com/ibm/fhir/config/mock/MockPropertyGroup.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016,2019 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -8,11 +8,11 @@ import java.io.ByteArrayInputStream; -import javax.json.Json; -import javax.json.JsonException; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; +import jakarta.json.Json; +import jakarta.json.JsonException; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; import com.google.gson.Gson; import com.ibm.fhir.config.PropertyGroup; diff --git a/fhir-config/src/test/java/com/ibm/fhir/config/test/MockPropertyGroupTest.java b/fhir-config/src/test/java/com/ibm/fhir/config/test/MockPropertyGroupTest.java index 6d3ec94f254..bc1d18a9360 100644 --- a/fhir-config/src/test/java/com/ibm/fhir/config/test/MockPropertyGroupTest.java +++ b/fhir-config/src/test/java/com/ibm/fhir/config/test/MockPropertyGroupTest.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016,2019 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -10,9 +10,9 @@ import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertNull; -import javax.json.Json; -import javax.json.JsonBuilderFactory; -import javax.json.JsonObject; +import jakarta.json.Json; +import jakarta.json.JsonBuilderFactory; +import jakarta.json.JsonObject; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; diff --git a/fhir-config/src/test/java/com/ibm/fhir/config/test/PropertyGroupTest.java b/fhir-config/src/test/java/com/ibm/fhir/config/test/PropertyGroupTest.java index 13652f945db..f1899169fe0 100644 --- a/fhir-config/src/test/java/com/ibm/fhir/config/test/PropertyGroupTest.java +++ b/fhir-config/src/test/java/com/ibm/fhir/config/test/PropertyGroupTest.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2016, 2020 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -14,9 +14,9 @@ import java.util.List; -import javax.json.Json; -import javax.json.JsonBuilderFactory; -import javax.json.JsonObject; +import jakarta.json.Json; +import jakarta.json.JsonBuilderFactory; +import jakarta.json.JsonObject; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; diff --git a/fhir-config/src/test/java/com/ibm/fhir/config/test/TestMockPropertyGroup.java b/fhir-config/src/test/java/com/ibm/fhir/config/test/TestMockPropertyGroup.java index 092e190a750..3b6e1632f5f 100644 --- a/fhir-config/src/test/java/com/ibm/fhir/config/test/TestMockPropertyGroup.java +++ b/fhir-config/src/test/java/com/ibm/fhir/config/test/TestMockPropertyGroup.java @@ -1,12 +1,12 @@ /* - * (C) Copyright IBM Corp. 2016,2019 + * (C) Copyright IBM Corp. 2016, 2021 * * SPDX-License-Identifier: Apache-2.0 */ package com.ibm.fhir.config.test; -import javax.json.JsonObject; +import jakarta.json.JsonObject; import com.ibm.fhir.config.PropertyGroup; diff --git a/fhir-core/pom.xml b/fhir-core/pom.xml index f4d45819277..8d68a678405 100644 --- a/fhir-core/pom.xml +++ b/fhir-core/pom.xml @@ -6,7 +6,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../fhir-parent diff --git a/fhir-core/src/main/java/com/ibm/fhir/core/FHIRConstants.java b/fhir-core/src/main/java/com/ibm/fhir/core/FHIRConstants.java index 64f509e08c6..a99c6bda616 100644 --- a/fhir-core/src/main/java/com/ibm/fhir/core/FHIRConstants.java +++ b/fhir-core/src/main/java/com/ibm/fhir/core/FHIRConstants.java @@ -37,6 +37,8 @@ public class FHIRConstants { public static final String UPDATE_IF_MODIFIED_HEADER = "X-FHIR-UPDATE-IF-MODIFIED"; + public static final String EXT_BASE = "http://ibm.com/fhir/extension/"; + /** * General parameter names that can be used with any FHIR interaction. * diff --git a/fhir-core/src/main/java/com/ibm/fhir/core/FHIRMediaType.java b/fhir-core/src/main/java/com/ibm/fhir/core/FHIRMediaType.java index cf733298f58..a1ab070ce23 100644 --- a/fhir-core/src/main/java/com/ibm/fhir/core/FHIRMediaType.java +++ b/fhir-core/src/main/java/com/ibm/fhir/core/FHIRMediaType.java @@ -1,17 +1,23 @@ /* - * (C) Copyright IBM Corp. 2019 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ package com.ibm.fhir.core; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + import javax.ws.rs.core.MediaType; /** * This class contains definitions of some non-standard media types. */ public class FHIRMediaType extends MediaType { + public final static String SUBTYPE_FHIR_JSON = "fhir+json"; public final static String APPLICATION_FHIR_JSON = "application/" + SUBTYPE_FHIR_JSON; public final static MediaType APPLICATION_FHIR_JSON_TYPE = new MediaType("application", SUBTYPE_FHIR_JSON); @@ -29,6 +35,12 @@ public class FHIRMediaType extends MediaType { public final static MediaType APPLICATION_FHIR_NDJSON_TYPE = new MediaType("application", SUBTYPE_FHIR_NDJSON); public final static String SUBTYPE_FHIR_PARQUET = "fhir+parquet"; - public static final String APPLICATION_PARQUET = "application/" + SUBTYPE_FHIR_PARQUET; + public static final String APPLICATION_PARQUET = "application/" + SUBTYPE_FHIR_PARQUET; public final static MediaType APPLICATION_FHIR_PARQUET_TYPE = new MediaType("application", SUBTYPE_FHIR_PARQUET); + + // Supported values for the MIME-type parameter fhirVersion. + // https://www.hl7.org/fhir/http.html#version-parameter + public static final String FHIR_VERSION_PARAMETER = "fhirVersion"; + public static final Set SUPPORTED_FHIR_VERSIONS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList("4.0","4.0.1"))); } diff --git a/fhir-database-utils/pom.xml b/fhir-database-utils/pom.xml index fc03bb5e3ea..9059a429046 100644 --- a/fhir-database-utils/pom.xml +++ b/fhir-database-utils/pom.xml @@ -6,7 +6,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../fhir-parent diff --git a/fhir-database-utils/src/main/java/com/ibm/fhir/database/utils/api/TableSpaceRemovalException.java b/fhir-database-utils/src/main/java/com/ibm/fhir/database/utils/api/TableSpaceRemovalException.java new file mode 100644 index 00000000000..ee8088d8970 --- /dev/null +++ b/fhir-database-utils/src/main/java/com/ibm/fhir/database/utils/api/TableSpaceRemovalException.java @@ -0,0 +1,61 @@ +/* + * (C) Copyright IBM Corp. 2021 + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.ibm.fhir.database.utils.api; + +/** + * When there is an issue removing the Tablespace + */ +public class TableSpaceRemovalException extends DataAccessException { + + // All exceptions are serializable + private static final long serialVersionUID = -338568883070014498L; + + private boolean transactionRetryable; + + /** + * Public constructor + * @param msg + */ + public TableSpaceRemovalException(String msg) { + super(msg); + } + + /** + * Public constructor + * @param msg + * @param t + */ + public TableSpaceRemovalException(String msg, Throwable t) { + super(msg, t); + } + + /** + * Public constructor + * @param t + */ + public TableSpaceRemovalException(Throwable t) { + super(t); + } + + /** + * Setter for the transactionRetryable flag + * @param flag + */ + @Override + public void setTransactionRetryable(boolean flag) { + this.transactionRetryable = flag; + } + + /** + * Getter for the transactionRetryable flag + * @return true if the transaction could be retried + */ + @Override + public boolean isTransactionRetryable() { + return this.transactionRetryable; + } +} diff --git a/fhir-database-utils/src/main/java/com/ibm/fhir/database/utils/model/BaseObject.java b/fhir-database-utils/src/main/java/com/ibm/fhir/database/utils/model/BaseObject.java index c3cb00e9f9a..7d99f1af293 100644 --- a/fhir-database-utils/src/main/java/com/ibm/fhir/database/utils/model/BaseObject.java +++ b/fhir-database-utils/src/main/java/com/ibm/fhir/database/utils/model/BaseObject.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -256,7 +256,8 @@ public void applyTx(IDatabaseAdapter target, ITransactionProvider tp, IVersionHi @Override public void applyVersion(IDatabaseAdapter target, IVersionHistoryService vhs) { // Only for Procedures do we skip the Version History Service check, and apply. - if (vhs.applies(getSchemaName(), getObjectType().name(), getObjectName(), version) || getObjectType().equals(DatabaseObjectType.PROCEDURE)) { + if (vhs.applies(getSchemaName(), getObjectType().name(), getObjectName(), version) + || getObjectType() == DatabaseObjectType.PROCEDURE) { logger.fine("Applying change [v" + version + "]: " + this.getTypeNameVersion()); // Apply this change to the target database diff --git a/fhir-database-utils/src/main/java/com/ibm/fhir/database/utils/tenant/DeleteTenantKeyDAO.java b/fhir-database-utils/src/main/java/com/ibm/fhir/database/utils/tenant/DeleteTenantKeyDAO.java new file mode 100644 index 00000000000..1fedfa6a46d --- /dev/null +++ b/fhir-database-utils/src/main/java/com/ibm/fhir/database/utils/tenant/DeleteTenantKeyDAO.java @@ -0,0 +1,71 @@ +/* + * (C) Copyright IBM Corp. 2021 + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.ibm.fhir.database.utils.tenant; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +import com.ibm.fhir.database.utils.api.IDatabaseStatement; +import com.ibm.fhir.database.utils.api.IDatabaseTranslator; +import com.ibm.fhir.database.utils.common.DataDefinitionUtil; + +/** + * Db2-only DAO to delete a tenant key record + */ +public class DeleteTenantKeyDAO implements IDatabaseStatement { + private final String schemaName; + private final int tenantId; + private final String tenantKey; + private int count = 0; + + /** + * Public constructor + * + * @param schemaName + * @param tenantId + * @param tenantKey + */ + public DeleteTenantKeyDAO(String schemaName, int tenantId, String tenantKey) { + DataDefinitionUtil.assertValidName(schemaName); + this.schemaName = schemaName; + this.tenantId = tenantId; + this.tenantKey = tenantKey; + } + + @Override + public void run(IDatabaseTranslator translator, Connection c) { + final String tableName = DataDefinitionUtil.getQualifiedName(schemaName, "TENANT_KEYS"); + final String SQL; + if (tenantKey == null) { + SQL = "DELETE FROM " + tableName + " WHERE mt_id = ?"; + } else { + SQL = "DELETE FROM " + tableName + " WHERE mt_id = ?" + + " AND tenant_hash = sysibm.hash(tenant_salt || ?, 2)"; + } + + try (PreparedStatement ps = c.prepareStatement(SQL)) { + ps.setInt(1, tenantId); + + if (tenantKey != null) { + ps.setString(2, tenantKey); + } + count = ps.executeUpdate(); + } catch (SQLException x) { + // Translate the exception into something a little more meaningful + // for this database type and application + throw translator.translate(x); + } + } + + /** + * @return total number of keys removed + */ + public int getCount() { + return count; + } +} diff --git a/fhir-examples-generator/pom.xml b/fhir-examples-generator/pom.xml index 148f5a46bdf..8feff6e52d8 100644 --- a/fhir-examples-generator/pom.xml +++ b/fhir-examples-generator/pom.xml @@ -9,7 +9,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../fhir-parent diff --git a/fhir-examples-generator/src/main/java/com/ibm/fhir/examples/CompleteMockDataCreator.java b/fhir-examples-generator/src/main/java/com/ibm/fhir/examples/CompleteMockDataCreator.java index 9b10e6ce694..b492033505f 100644 --- a/fhir-examples-generator/src/main/java/com/ibm/fhir/examples/CompleteMockDataCreator.java +++ b/fhir-examples-generator/src/main/java/com/ibm/fhir/examples/CompleteMockDataCreator.java @@ -501,7 +501,7 @@ protected void handleCode(Code.Builder code) throws IllegalAccessException, Ille Class[] classes = elementClass.getClasses(); // If the element has a ValueSet, set one of the values randomly for (Class clazz : classes) { - if ("ValueSet".equals(clazz.getSimpleName())) { + if ("Value".equals(clazz.getSimpleName())) { Object[] enumConstants = clazz.getEnumConstants(); Object enumConstant = enumConstants[ThreadLocalRandom.current().nextInt(0, enumConstants.length)]; diff --git a/fhir-examples-generator/src/test/resources/examplesplugin/pom.xml b/fhir-examples-generator/src/test/resources/examplesplugin/pom.xml index 5206a10896f..be3d0aeca1d 100644 --- a/fhir-examples-generator/src/test/resources/examplesplugin/pom.xml +++ b/fhir-examples-generator/src/test/resources/examplesplugin/pom.xml @@ -6,7 +6,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../fhir-parent diff --git a/fhir-examples/pom.xml b/fhir-examples/pom.xml index acc534afc15..061410f9339 100644 --- a/fhir-examples/pom.xml +++ b/fhir-examples/pom.xml @@ -4,7 +4,7 @@ 4.0.0 fhir-examples com.ibm.fhir - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT IBM FHIR Server - Examples https://github.com/ibm/fhir diff --git a/fhir-examples/src/main/resources/json/ibm/basic/BasicDate.json b/fhir-examples/src/main/resources/json/ibm/basic/BasicDate.json index b2ceeffbc28..e86d6130c1f 100644 --- a/fhir-examples/src/main/resources/json/ibm/basic/BasicDate.json +++ b/fhir-examples/src/main/resources/json/ibm/basic/BasicDate.json @@ -98,7 +98,7 @@ "_start": { "extension": [{ "url": "http://hl7.org/fhir/StructureDefinition/data-absent-reason", - "valueString": "masked" + "valueCode": "masked" }] } } diff --git a/fhir-examples/src/main/resources/json/ibm/basic/BasicQuantity.json b/fhir-examples/src/main/resources/json/ibm/basic/BasicQuantity.json index 97728b0565b..ee0b13354dd 100644 --- a/fhir-examples/src/main/resources/json/ibm/basic/BasicQuantity.json +++ b/fhir-examples/src/main/resources/json/ibm/basic/BasicQuantity.json @@ -34,6 +34,14 @@ "value": 1 } }, + { + "url": "http://example.org/Quantity-unicodeLessThan", + "valueQuantity": { + "value": 3, + "unit": "ult", + "comparator": "\u003c" + } + }, { "url": "http://example.org/Quantity-lessThan", "valueQuantity": { @@ -83,6 +91,28 @@ } } }, + { + "url": "http://example.org/Range-noHigh", + "valueRange": { + "low": { + "value": 5, + "unit": "sec", + "system": "http://unitsofmeasure.org", + "code": "s" + } + } + }, + { + "url": "http://example.org/Range-noLow", + "valueRange": { + "high": { + "value": 10, + "unit": "sec", + "system": "http://unitsofmeasure.org", + "code": "s" + } + } + }, { "url": "http://example.org/Quantity-withExponent", "valueQuantity": { diff --git a/fhir-install/Dockerfile b/fhir-install/Dockerfile index 149e62341cb..acc89f02317 100644 --- a/fhir-install/Dockerfile +++ b/fhir-install/Dockerfile @@ -5,7 +5,7 @@ # ---------------------------------------------------------------------------- # Stage: Base -FROM openliberty/open-liberty:21.0.0.3-kernel-slim-java11-openj9-ubi as base +FROM openliberty/open-liberty:21.0.0.5-kernel-slim-java11-openj9-ubi as base USER root RUN yum install -y unzip @@ -22,10 +22,10 @@ COPY src/main/docker/ibm-fhir-server/bootstrap.sh /opt/ibm-fhir-server/ # ---------------------------------------------------------------------------- # Stage: Runnable -FROM openliberty/open-liberty:21.0.0.3-kernel-slim-java11-openj9-ubi +FROM openliberty/open-liberty:21.0.0.5-kernel-slim-java11-openj9-ubi ARG VERBOSE=true -ARG FHIR_VERSION=4.8.0-SNAPSHOT +ARG FHIR_VERSION=4.9.0-SNAPSHOT # The following labels are required: LABEL name='IBM FHIR Server' @@ -52,7 +52,8 @@ RUN features.sh COPY --chown=1001:0 --from=base /opt/ol/wlp/usr /opt/ol/wlp/usr -RUN configure.sh +RUN configure.sh && \ + mkdir -p /output/bulkdata COPY --chown=1001:0 --from=base /opt/ibm-fhir-server /opt/ibm-fhir-server diff --git a/fhir-install/pom.xml b/fhir-install/pom.xml index f16b5e95062..e55377911b9 100644 --- a/fhir-install/pom.xml +++ b/fhir-install/pom.xml @@ -5,7 +5,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../fhir-parent diff --git a/fhir-install/src/main/resources/scripts/install.bat b/fhir-install/src/main/resources/scripts/install.bat index b7c90550378..b698d2bfc1c 100644 --- a/fhir-install/src/main/resources/scripts/install.bat +++ b/fhir-install/src/main/resources/scripts/install.bat @@ -7,7 +7,7 @@ SETLOCAL ENABLEDELAYEDEXPANSION -set LIBERTY_VERSION=21.0.0.3 +set LIBERTY_VERSION=21.0.0.5 echo Executing %0 to deploy the fhir-server web application... diff --git a/fhir-install/src/main/resources/scripts/install.sh b/fhir-install/src/main/resources/scripts/install.sh index 066296b1240..4be69d0804d 100644 --- a/fhir-install/src/main/resources/scripts/install.sh +++ b/fhir-install/src/main/resources/scripts/install.sh @@ -5,7 +5,7 @@ # SPDX-License-Identifier: Apache-2.0 ############################################################################### -export LIBERTY_VERSION="21.0.0.3" +export LIBERTY_VERSION="21.0.0.5" echo " Executing $0 to deploy the fhir-server web application... diff --git a/fhir-model/pom.xml b/fhir-model/pom.xml index b7fca1c6b94..f0c628abf9a 100644 --- a/fhir-model/pom.xml +++ b/fhir-model/pom.xml @@ -8,7 +8,7 @@ com.ibm.fhir fhir-parent - 4.8.0-SNAPSHOT + 4.9.0-SNAPSHOT ../fhir-parent diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/builder/AbstractBuilder.java b/fhir-model/src/main/java/com/ibm/fhir/model/builder/AbstractBuilder.java index 8e8eaccd46d..c05da37f170 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/builder/AbstractBuilder.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/builder/AbstractBuilder.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -7,6 +7,30 @@ package com.ibm.fhir.model.builder; public abstract class AbstractBuilder implements Builder { + protected boolean validating = true; + + /** + * Set the validating builder indicator for this builder + * + *

    A validating builder may perform basic validation during object construction (e.g. cardinality checking, type checking, etc.) + * + * @param validating + * the validating builder indicator + */ + public void setValidating(boolean validating) { + this.validating = validating; + } + + /** + * Indicates whether this builder is a validating builder + * + * @return + * true if this builder is a validating builder, false otherwise + */ + public boolean isValidating() { + return validating; + } + @Override public abstract T build(); } diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/generator/FHIRJsonGenerator.java b/fhir-model/src/main/java/com/ibm/fhir/model/generator/FHIRJsonGenerator.java index 0cbf281f3e8..750d1b69f13 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/generator/FHIRJsonGenerator.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/generator/FHIRJsonGenerator.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -10,28 +10,15 @@ import static com.ibm.fhir.model.util.JsonSupport.nonClosingWriter; import static com.ibm.fhir.model.util.ModelSupport.isPrimitiveType; -import java.io.FilterOutputStream; -import java.io.FilterWriter; -import java.io.IOException; import java.io.OutputStream; import java.io.Writer; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; -import java.time.LocalDate; -import java.time.ZoneOffset; import java.util.Base64; -import java.util.HashMap; +import java.util.Collections; import java.util.List; -import java.util.Map; -import java.util.UUID; -import javax.json.Json; -import javax.json.stream.JsonGenerator; -import javax.json.stream.JsonGeneratorFactory; - -import com.ibm.fhir.model.format.Format; import com.ibm.fhir.model.generator.exception.FHIRGeneratorException; -import com.ibm.fhir.model.resource.Patient; import com.ibm.fhir.model.resource.Resource; import com.ibm.fhir.model.type.Base64Binary; import com.ibm.fhir.model.type.Boolean; @@ -40,20 +27,21 @@ import com.ibm.fhir.model.type.Decimal; import com.ibm.fhir.model.type.Element; import com.ibm.fhir.model.type.Extension; -import com.ibm.fhir.model.type.HumanName; -import com.ibm.fhir.model.type.Id; import com.ibm.fhir.model.type.Instant; import com.ibm.fhir.model.type.Integer; -import com.ibm.fhir.model.type.Meta; import com.ibm.fhir.model.type.String; import com.ibm.fhir.model.type.Time; import com.ibm.fhir.model.type.Uri; import com.ibm.fhir.model.type.Xhtml; import com.ibm.fhir.model.visitor.Visitable; +import jakarta.json.Json; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; + public class FHIRJsonGenerator extends FHIRAbstractGenerator { private static final JsonGeneratorFactory GENERATOR_FACTORY = Json.createGeneratorFactory(null); - private static final JsonGeneratorFactory PRETTY_PRINTING_GENERATOR_FACTORY = createPrettyPrintingGeneratorFactory(); + private static final JsonGeneratorFactory PRETTY_PRINTING_GENERATOR_FACTORY = Json.createGeneratorFactory(Collections.singletonMap(JsonGenerator.PRETTY_PRINTING, true)); private final boolean prettyPrinting; @@ -68,7 +56,7 @@ protected FHIRJsonGenerator(boolean prettyPrinting) { @Override public void generate(Visitable visitable, OutputStream out) throws FHIRGeneratorException { GeneratingVisitor visitor = null; - try (JsonGenerator generator = getGeneratorFactory().createGenerator(prettyPrinting ? wrap(out) : nonClosingOutputStream(out), StandardCharsets.UTF_8)) { + try (JsonGenerator generator = getGeneratorFactory().createGenerator(nonClosingOutputStream(out), StandardCharsets.UTF_8)) { visitor = new JsonGeneratingVisitor(generator); visitable.accept(visitor); generator.flush(); @@ -80,7 +68,7 @@ public void generate(Visitable visitable, OutputStream out) throws FHIRGenerator @Override public void generate(Visitable visitable, Writer writer) throws FHIRGeneratorException { GeneratingVisitor visitor = null; - try (JsonGenerator generator = getGeneratorFactory().createGenerator(prettyPrinting ? wrap(writer) : nonClosingWriter(writer))) { + try (JsonGenerator generator = getGeneratorFactory().createGenerator(nonClosingWriter(writer))) { visitor = new JsonGeneratingVisitor(generator); visitable.accept(visitor); generator.flush(); @@ -94,60 +82,13 @@ public boolean isPrettyPrinting() { return prettyPrinting; } - /** - * Temporary workaround for: https://github.com/eclipse-ee4j/jsonp/issues/190 - */ - private OutputStream wrap(OutputStream out) { - return new FilterOutputStream(out) { - private boolean first = true; - - @Override - public void write(int b) throws IOException { - if (first && b == '\n') { - first = false; - return; - } - out.write(b); - } - - @Override - public void close() { - // do nothing - } - }; - } - - /** - * Temporary workaround for: https://github.com/eclipse-ee4j/jsonp/issues/190 - */ - private Writer wrap(Writer writer) { - return new FilterWriter(writer) { - private boolean first = true; - - @Override - public void write(char[] cbuf, int off, int len) throws IOException { - if (first && cbuf.length > 1 && off == 0 && cbuf[0] == '\n') { - first = false; - out.write(cbuf, off + 1, len - 1); - return; - } - out.write(cbuf, off, len); - } - - @Override - public void close() { - // do nothing - } - }; - } - private static class JsonGeneratingVisitor extends GeneratingVisitor { private final JsonGenerator generator; - + private JsonGeneratingVisitor(JsonGenerator generator) { this.generator = generator; } - + private void generate(Element element) { if (element.getId() != null) { // visit id @@ -167,7 +108,7 @@ private void generate(Element element) { private boolean hasIdOrExtension(Element element) { return element.getId() != null || !element.getExtension().isEmpty(); } - + private boolean hasIdOrExtension(java.util.List visitables) { for (Visitable visitable : visitables) { if (hasIdOrExtension((Element) visitable)) { @@ -176,7 +117,7 @@ private boolean hasIdOrExtension(java.util.List visitables) } return false; } - + @Override public boolean visit(java.lang.String elementName, int elementIndex, Base64Binary base64Binary) { if (isChoiceElement(elementName)) { @@ -189,7 +130,7 @@ public boolean visit(java.lang.String elementName, int elementIndex, Base64Binar } return false; } - + @Override public boolean visit(java.lang.String elementName, int elementIndex, Boolean _boolean) { if (isChoiceElement(elementName)) { @@ -202,12 +143,12 @@ public boolean visit(java.lang.String elementName, int elementIndex, Boolean _bo } return false; } - + @Override public boolean visit(java.lang.String elementName, int elementIndex, Date date) { if (isChoiceElement(elementName)) { elementName = getChoiceElementName(elementName, Date.class); - } + } if (date.getValue() != null) { writeValue(elementName, elementIndex, Date.PARSER_FORMATTER.format(date.getValue())); } else { @@ -215,12 +156,12 @@ public boolean visit(java.lang.String elementName, int elementIndex, Date date) } return false; } - + @Override public boolean visit(java.lang.String elementName, int elementIndex, DateTime dateTime) { if (isChoiceElement(elementName)) { elementName = getChoiceElementName(elementName, DateTime.class); - } + } if (dateTime.getValue() != null) { writeValue(elementName, elementIndex, DateTime.PARSER_FORMATTER.format(dateTime.getValue())); } else { @@ -228,12 +169,12 @@ public boolean visit(java.lang.String elementName, int elementIndex, DateTime da } return false; } - + @Override public boolean visit(java.lang.String elementName, int elementIndex, Decimal decimal) { if (isChoiceElement(elementName)) { elementName = getChoiceElementName(elementName, Decimal.class); - } + } if (decimal.getValue() != null) { writeValue(elementName, elementIndex, decimal.getValue()); } else { @@ -241,12 +182,12 @@ public boolean visit(java.lang.String elementName, int elementIndex, Decimal dec } return false; } - + @Override public boolean visit(java.lang.String elementName, int elementIndex, Instant instant) { if (isChoiceElement(elementName)) { elementName = getChoiceElementName(elementName, Instant.class); - } + } if (instant.getValue() != null) { writeValue(elementName, elementIndex, Instant.PARSER_FORMATTER.format(instant.getValue())); } else { @@ -254,7 +195,7 @@ public boolean visit(java.lang.String elementName, int elementIndex, Instant ins } return false; } - + @Override public boolean visit(java.lang.String elementName, int elementIndex, Integer integer) { if (isChoiceElement(elementName)) { @@ -267,17 +208,17 @@ public boolean visit(java.lang.String elementName, int elementIndex, Integer int } return false; } - + @Override public void doVisit(java.lang.String elementName, java.lang.String value) { writeValue(elementName, -1, value); } - + @Override public boolean visit(java.lang.String elementName, int elementIndex, String string) { if (isChoiceElement(elementName)) { elementName = getChoiceElementName(elementName, string.getClass()); - } + } if (string.getValue() != null) { writeValue(elementName, elementIndex, string.getValue()); } else { @@ -285,12 +226,12 @@ public boolean visit(java.lang.String elementName, int elementIndex, String stri } return false; } - + @Override public boolean visit(java.lang.String elementName, int elementIndex, Time time) { if (isChoiceElement(elementName)) { elementName = getChoiceElementName(elementName, Time.class); - } + } if (time.getValue() != null) { writeValue(elementName, elementIndex, Time.PARSER_FORMATTER.format(time.getValue())); } else { @@ -298,7 +239,7 @@ public boolean visit(java.lang.String elementName, int elementIndex, Time time) } return false; } - + @Override public boolean visit(java.lang.String elementName, int elementIndex, Uri uri) { if (isChoiceElement(elementName)) { @@ -311,13 +252,13 @@ public boolean visit(java.lang.String elementName, int elementIndex, Uri uri) { } return false; } - + @Override public boolean visit(java.lang.String elementName, int elementIndex, Xhtml xhtml) { writeValue(elementName, elementIndex, xhtml.getValue()); return false; } - + @Override public void doVisitEnd(java.lang.String elementName, int elementIndex, Element element) { Class elementType = element.getClass(); @@ -337,7 +278,7 @@ public void doVisitEnd(java.lang.String elementName, int elementIndex, Element e generator.writeEnd(); } } - + @Override public void visitEnd(java.lang.String elementName, List visitables, Class type) { if (!visitables.isEmpty()) { @@ -357,12 +298,12 @@ public void visitEnd(java.lang.String elementName, List vis } } } - + @Override public void doVisitEnd(java.lang.String elementName, int elementIndex, Resource resource) { generator.writeEnd(); } - + @Override public void doVisitStart(java.lang.String elementName, int elementIndex, Element element) { Class elementType = element.getClass(); @@ -375,14 +316,14 @@ public void doVisitStart(java.lang.String elementName, int elementIndex, Element generator.writeStartObject(); } } - + @Override public void visitStart(java.lang.String elementName, List visitables, Class type) { if (!visitables.isEmpty()) { writeStartArray(elementName); } } - + @Override public void doVisitStart(java.lang.String elementName, int elementIndex, Resource resource) { writeStartObject(elementName, elementIndex); @@ -390,17 +331,17 @@ public void doVisitStart(java.lang.String elementName, int elementIndex, Resourc java.lang.String resourceTypeName = resourceType.getSimpleName(); generator.write("resourceType", resourceTypeName); } - + private void writeNull(java.lang.String elementName, int elementIndex, Element element) { if (elementIndex != -1 && hasIdOrExtension(element)) { generator.writeNull(); } } - + private void writeStartArray(java.lang.String elementName) { generator.writeStartArray(elementName); } - + private void writeStartObject(java.lang.String elementName, int elementIndex) { if (getDepth() > 1 && elementIndex == -1) { generator.writeStartObject(elementName); @@ -408,7 +349,7 @@ private void writeStartObject(java.lang.String elementName, int elementIndex) { generator.writeStartObject(); } } - + private void writeValue(java.lang.String elementName, int elementIndex, BigDecimal value) { if (elementIndex == -1) { generator.write(elementName, value); @@ -416,7 +357,7 @@ private void writeValue(java.lang.String elementName, int elementIndex, BigDecim generator.write(value); } } - + private void writeValue(java.lang.String elementName, int elementIndex, java.lang.Boolean value) { if (elementIndex == -1) { generator.write(elementName, value); @@ -424,7 +365,7 @@ private void writeValue(java.lang.String elementName, int elementIndex, java.lan generator.write(value); } } - + private void writeValue(java.lang.String elementName, int elementIndex, java.lang.Integer value) { if (elementIndex == -1) { generator.write(elementName, value); @@ -432,7 +373,7 @@ private void writeValue(java.lang.String elementName, int elementIndex, java.lan generator.write(value); } } - + private void writeValue(java.lang.String elementName, int elementIndex, java.lang.String value) { if (elementIndex == -1) { generator.write(elementName, value); @@ -442,56 +383,7 @@ private void writeValue(java.lang.String elementName, int elementIndex, java.lan } } - private static JsonGeneratorFactory createPrettyPrintingGeneratorFactory() { - Map properties = new HashMap<>(1); - properties.put(JsonGenerator.PRETTY_PRINTING, true); - return Json.createGeneratorFactory(properties); - } - private JsonGeneratorFactory getGeneratorFactory() { return prettyPrinting ? PRETTY_PRINTING_GENERATOR_FACTORY : GENERATOR_FACTORY; } - - public static void main(java.lang.String[] args) throws Exception { - java.lang.String id = UUID.randomUUID().toString(); - - Meta meta = Meta.builder().versionId(Id.of("1")) - .lastUpdated(Instant.now(ZoneOffset.UTC)) - .build(); - - String given = String.builder().value("John") - .extension(Extension.builder() - .url("http://www.ibm.com/someExtension") - .value(String.of("value and extension")) - .build()) - .build(); - - String otherGiven = String.builder() - .id("someOtherId") - .extension(Extension.builder() - .url("http://www.ibm.com/someExtension") - .value(String.of("extension only")) - .build()) - .build(); - - HumanName name = HumanName.builder() - .id("someId") - .given(given) - .given(otherGiven) - .given(String.of("value no extension")) - .family(String.of("Doe")) - .build(); - - Patient patient = Patient.builder() - .id(id) - .active(Boolean.TRUE) - .multipleBirth(Integer.of(2)) - .meta(meta) - .name(name) - .birthDate(Date.of(LocalDate.now())) - .build(); - - FHIRGenerator generator = FHIRGenerator.generator(Format.JSON, true); - generator.generate(patient, System.out); - } } diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/generator/FHIRXMLGenerator.java b/fhir-model/src/main/java/com/ibm/fhir/model/generator/FHIRXMLGenerator.java index dc106622d09..197e2099b6a 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/generator/FHIRXMLGenerator.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/generator/FHIRXMLGenerator.java @@ -1,12 +1,11 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ package com.ibm.fhir.model.generator; -import static com.ibm.fhir.model.type.Xhtml.xhtml; import static com.ibm.fhir.model.util.ModelSupport.isPrimitiveType; import static com.ibm.fhir.model.util.XMLSupport.FHIR_NS_URI; import static com.ibm.fhir.model.util.XMLSupport.createNonClosingStreamWriterDelegate; @@ -16,10 +15,7 @@ import java.io.OutputStream; import java.io.StringReader; import java.io.Writer; -import java.time.LocalDate; -import java.time.ZoneOffset; import java.util.Base64; -import java.util.UUID; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; @@ -28,9 +24,7 @@ import javax.xml.transform.stax.StAXResult; import javax.xml.transform.stream.StreamSource; -import com.ibm.fhir.model.format.Format; import com.ibm.fhir.model.generator.exception.FHIRGeneratorException; -import com.ibm.fhir.model.resource.Patient; import com.ibm.fhir.model.resource.Resource; import com.ibm.fhir.model.type.Base64Binary; import com.ibm.fhir.model.type.Boolean; @@ -39,17 +33,12 @@ import com.ibm.fhir.model.type.Decimal; import com.ibm.fhir.model.type.Element; import com.ibm.fhir.model.type.Extension; -import com.ibm.fhir.model.type.HumanName; -import com.ibm.fhir.model.type.Id; import com.ibm.fhir.model.type.Instant; import com.ibm.fhir.model.type.Integer; -import com.ibm.fhir.model.type.Meta; -import com.ibm.fhir.model.type.Narrative; import com.ibm.fhir.model.type.String; import com.ibm.fhir.model.type.Time; import com.ibm.fhir.model.type.Uri; import com.ibm.fhir.model.type.Xhtml; -import com.ibm.fhir.model.type.code.NarrativeStatus; import com.ibm.fhir.model.util.XMLSupport.StreamWriterDelegate; import com.ibm.fhir.model.visitor.Visitable; @@ -330,60 +319,4 @@ public void doVisitStart(java.lang.String elementName, int elementIndex, Resourc } } } - - public static void main(java.lang.String[] args) throws Exception { - java.lang.String div = "

    Generated Narrative

    "; - - java.lang.String id = UUID.randomUUID().toString(); - - Meta meta = Meta.builder().versionId(Id.of("1")) - .lastUpdated(Instant.now(ZoneOffset.UTC)) - .build(); - - String given = String.builder().value("John") - .extension(Extension.builder() - .url("http://www.ibm.com/someExtension") - .value(String.of("value and extension")) - .build()) - .build(); - - String otherGiven = String.builder() - .extension(Extension.builder() - .url("http://www.ibm.com/someExtension") - .value(String.of("extension only")) - .build()) - .build(); - - HumanName name = HumanName.builder() - .id("someId") - .given(given) - .given(otherGiven) - .given(String.of("value no extension")) - .family(String.of("Doe")) - .build(); - - Narrative text = Narrative.builder().status(NarrativeStatus.GENERATED).div(xhtml(div)).build(); - - Patient patient = Patient.builder() - .id(id) - .text(text) - .active(Boolean.TRUE) - .multipleBirth(Integer.of(2)) - .meta(meta) - .name(name) - .birthDate(Date.of(LocalDate.now())) - .build(); - - FHIRGenerator generator = FHIRGenerator.generator(Format.XML, true); - generator.generate(patient, System.out); - - System.out.println(""); - - generator.setProperty(PROPERTY_INDENT_AMOUNT, 4); - generator.generate(patient, System.out); - - System.out.println(""); - - System.out.println(patient.getMultipleBirth()); - } } diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRAbstractParser.java b/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRAbstractParser.java index 05d7613c223..dab7983338d 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRAbstractParser.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRAbstractParser.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2020 + * (C) Copyright IBM Corp. 2020, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -17,13 +17,35 @@ public abstract class FHIRAbstractParser implements FHIRParser { protected Map properties = new HashMap<>(); - + protected boolean validating = true; + protected boolean ignoringUnrecognizedElements = false; + @Override public abstract T parse(InputStream in) throws FHIRParserException; - + @Override public abstract T parse(Reader reader) throws FHIRParserException; - + + @Override + public void setValidating(boolean validating) { + this.validating = validating; + } + + @Override + public boolean isValidating() { + return validating; + } + + @Override + public void setIgnoringUnrecognizedElements(boolean ignoringUnrecognizedElements) { + this.ignoringUnrecognizedElements = ignoringUnrecognizedElements; + } + + @Override + public boolean isIgnoringUnrecognizedElements() { + return ignoringUnrecognizedElements; + } + @Override public void setProperty(String name, Object value) { Objects.requireNonNull(name); @@ -32,32 +54,32 @@ public void setProperty(String name, Object value) { } properties.put(name, Objects.requireNonNull(value)); } - + @Override public Object getProperty(String name) { return properties.get(Objects.requireNonNull(name)); } - + @Override public T getProperty(String name, Class type) { return Objects.requireNonNull(type).cast(getProperty(name)); } - + @Override public Object getPropertyOrDefault(String name, Object defaultValue) { return properties.getOrDefault(Objects.requireNonNull(name), Objects.requireNonNull(defaultValue)); } - + @Override public T getPropertyOrDefault(String name, T defaultValue, Class type) { return Objects.requireNonNull(type).cast(getPropertyOrDefault(name, defaultValue)); } - + @Override public boolean isPropertySupported(String name) { return false; } - + @Override public T as(Class parserClass) { return parserClass.cast(this); diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRJsonParser.java b/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRJsonParser.java index fb309e518dd..7b3c50f3f95 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRJsonParser.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRJsonParser.java @@ -18,18 +18,22 @@ import java.io.Reader; import java.nio.charset.StandardCharsets; import java.util.Collection; +import java.util.Collections; import java.util.Stack; import java.util.StringJoiner; import javax.annotation.Generated; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonNumber; -import javax.json.JsonObject; -import javax.json.JsonReader; -import javax.json.JsonReaderFactory; -import javax.json.JsonString; -import javax.json.JsonValue; + +import org.glassfish.json.api.JsonConfig; + +import jakarta.json.Json; +import jakarta.json.JsonArray; +import jakarta.json.JsonNumber; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonReaderFactory; +import jakarta.json.JsonString; +import jakarta.json.JsonValue; import com.ibm.fhir.model.parser.exception.FHIRParserException; import com.ibm.fhir.model.resource.*; @@ -39,14 +43,13 @@ import com.ibm.fhir.model.type.Integer; import com.ibm.fhir.model.type.String; import com.ibm.fhir.model.util.ElementFilter; - import net.jcip.annotations.NotThreadSafe; @NotThreadSafe @Generated("com.ibm.fhir.tools.CodeGenerator") public class FHIRJsonParser extends FHIRAbstractParser { public static boolean DEBUG = false; - private static final JsonReaderFactory JSON_READER_FACTORY = Json.createReaderFactory(null); + private static final JsonReaderFactory JSON_READER_FACTORY = Json.createReaderFactory(Collections.singletonMap(JsonConfig.REJECT_DUPLICATE_KEYS, true)); private final Stack stack = new Stack<>(); @@ -109,14 +112,6 @@ private void reset() { stack.clear(); } - @Override - public boolean isPropertySupported(java.lang.String name) { - if (FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS.equals(name)) { - return true; - } - return false; - } - private Resource parseResource(java.lang.String elementName, JsonObject jsonObject, int elementIndex) { if (jsonObject == null) { return null; @@ -424,10 +419,11 @@ private Account parseAccount(java.lang.String elementName, JsonObject jsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Account.class, jsonObject); } Account.Builder builder = Account.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -469,10 +465,11 @@ private Account.Coverage parseAccountCoverage(java.lang.String elementName, Json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Account.Coverage.class, jsonObject); } Account.Coverage.Builder builder = Account.Coverage.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.coverage(parseReference("coverage", getJsonValue(jsonObject, "coverage", JsonObject.class), -1)); builder.priority((PositiveInt) parseInteger(PositiveInt.builder(), "priority", getJsonValue(jsonObject, "priority", JsonNumber.class), jsonObject.get("_priority"), -1)); @@ -485,10 +482,11 @@ private Account.Guarantor parseAccountGuarantor(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Account.Guarantor.class, jsonObject); } Account.Guarantor.Builder builder = Account.Guarantor.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.party(parseReference("party", getJsonValue(jsonObject, "party", JsonObject.class), -1)); builder.onHold(parseBoolean("onHold", getJsonValue(jsonObject, "onHold", JsonValue.class), jsonObject.get("_onHold"), -1)); @@ -502,10 +500,11 @@ private ActivityDefinition parseActivityDefinition(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ActivityDefinition.class, jsonObject); } ActivityDefinition.Builder builder = ActivityDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -653,10 +652,11 @@ private ActivityDefinition.DynamicValue parseActivityDefinitionDynamicValue(java return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ActivityDefinition.DynamicValue.class, jsonObject); } ActivityDefinition.DynamicValue.Builder builder = ActivityDefinition.DynamicValue.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.path(parseString("path", getJsonValue(jsonObject, "path", JsonString.class), jsonObject.get("_path"), -1)); builder.expression(parseExpression("expression", getJsonValue(jsonObject, "expression", JsonObject.class), -1)); @@ -669,10 +669,11 @@ private ActivityDefinition.Participant parseActivityDefinitionParticipant(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ActivityDefinition.Participant.class, jsonObject); } ActivityDefinition.Participant.Builder builder = ActivityDefinition.Participant.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((ActivityParticipantType) parseString(ActivityParticipantType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.role(parseCodeableConcept("role", getJsonValue(jsonObject, "role", JsonObject.class), -1)); @@ -685,10 +686,11 @@ private Address parseAddress(java.lang.String elementName, JsonObject jsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Address.class, jsonObject); } Address.Builder builder = Address.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.use((AddressUse) parseString(AddressUse.builder(), "use", getJsonValue(jsonObject, "use", JsonString.class), jsonObject.get("_use"), -1)); builder.type((AddressType) parseString(AddressType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); @@ -715,10 +717,11 @@ private AdverseEvent parseAdverseEvent(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(AdverseEvent.class, jsonObject); } AdverseEvent.Builder builder = AdverseEvent.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.actuality((AdverseEventActuality) parseString(AdverseEventActuality.builder(), "actuality", getJsonValue(jsonObject, "actuality", JsonString.class), jsonObject.get("_actuality"), -1)); @@ -784,10 +787,11 @@ private AdverseEvent.SuspectEntity parseAdverseEventSuspectEntity(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(AdverseEvent.SuspectEntity.class, jsonObject); } AdverseEvent.SuspectEntity.Builder builder = AdverseEvent.SuspectEntity.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.instance(parseReference("instance", getJsonValue(jsonObject, "instance", JsonObject.class), -1)); JsonArray causalityArray = getJsonArray(jsonObject, "causality"); @@ -805,10 +809,11 @@ private AdverseEvent.SuspectEntity.Causality parseAdverseEventSuspectEntityCausa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(AdverseEvent.SuspectEntity.Causality.class, jsonObject); } AdverseEvent.SuspectEntity.Causality.Builder builder = AdverseEvent.SuspectEntity.Causality.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.assessment(parseCodeableConcept("assessment", getJsonValue(jsonObject, "assessment", JsonObject.class), -1)); builder.productRelatedness(parseString("productRelatedness", getJsonValue(jsonObject, "productRelatedness", JsonString.class), jsonObject.get("_productRelatedness"), -1)); @@ -823,10 +828,11 @@ private AllergyIntolerance parseAllergyIntolerance(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(AllergyIntolerance.class, jsonObject); } AllergyIntolerance.Builder builder = AllergyIntolerance.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -874,10 +880,11 @@ private AllergyIntolerance.Reaction parseAllergyIntoleranceReaction(java.lang.St return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(AllergyIntolerance.Reaction.class, jsonObject); } AllergyIntolerance.Reaction.Builder builder = AllergyIntolerance.Reaction.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.substance(parseCodeableConcept("substance", getJsonValue(jsonObject, "substance", JsonObject.class), -1)); JsonArray manifestationArray = getJsonArray(jsonObject, "manifestation"); @@ -905,10 +912,11 @@ private Annotation parseAnnotation(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Annotation.class, jsonObject); } Annotation.Builder builder = Annotation.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.author(parseChoiceElement("author", jsonObject, Reference.class, String.class)); builder.time(parseDateTime("time", getJsonValue(jsonObject, "time", JsonString.class), jsonObject.get("_time"), -1)); @@ -922,10 +930,11 @@ private Appointment parseAppointment(java.lang.String elementName, JsonObject js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Appointment.class, jsonObject); } Appointment.Builder builder = Appointment.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -1013,10 +1022,11 @@ private Appointment.Participant parseAppointmentParticipant(java.lang.String ele return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Appointment.Participant.class, jsonObject); } Appointment.Participant.Builder builder = Appointment.Participant.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray typeArray = getJsonArray(jsonObject, "type"); if (typeArray != null) { @@ -1037,10 +1047,11 @@ private AppointmentResponse parseAppointmentResponse(java.lang.String elementNam return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(AppointmentResponse.class, jsonObject); } AppointmentResponse.Builder builder = AppointmentResponse.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -1069,10 +1080,11 @@ private Attachment parseAttachment(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Attachment.class, jsonObject); } Attachment.Builder builder = Attachment.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.contentType((Code) parseString(Code.builder(), "contentType", getJsonValue(jsonObject, "contentType", JsonString.class), jsonObject.get("_contentType"), -1)); builder.language((Code) parseString(Code.builder(), "language", getJsonValue(jsonObject, "language", JsonString.class), jsonObject.get("_language"), -1)); @@ -1091,10 +1103,11 @@ private AuditEvent parseAuditEvent(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(AuditEvent.class, jsonObject); } AuditEvent.Builder builder = AuditEvent.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.type(parseCoding("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); JsonArray subtypeArray = getJsonArray(jsonObject, "subtype"); @@ -1136,10 +1149,11 @@ private AuditEvent.Agent parseAuditEventAgent(java.lang.String elementName, Json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(AuditEvent.Agent.class, jsonObject); } AuditEvent.Agent.Builder builder = AuditEvent.Agent.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); JsonArray roleArray = getJsonArray(jsonObject, "role"); @@ -1177,10 +1191,11 @@ private AuditEvent.Agent.Network parseAuditEventAgentNetwork(java.lang.String el return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(AuditEvent.Agent.Network.class, jsonObject); } AuditEvent.Agent.Network.Builder builder = AuditEvent.Agent.Network.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.address(parseString("address", getJsonValue(jsonObject, "address", JsonString.class), jsonObject.get("_address"), -1)); builder.type((AuditEventAgentNetworkType) parseString(AuditEventAgentNetworkType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); @@ -1193,10 +1208,11 @@ private AuditEvent.Entity parseAuditEventEntity(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(AuditEvent.Entity.class, jsonObject); } AuditEvent.Entity.Builder builder = AuditEvent.Entity.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.what(parseReference("what", getJsonValue(jsonObject, "what", JsonObject.class), -1)); builder.type(parseCoding("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -1226,10 +1242,11 @@ private AuditEvent.Entity.Detail parseAuditEventEntityDetail(java.lang.String el return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(AuditEvent.Entity.Detail.class, jsonObject); } AuditEvent.Entity.Detail.Builder builder = AuditEvent.Entity.Detail.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseString("type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.value(parseChoiceElement("value", jsonObject, String.class, Base64Binary.class)); @@ -1242,10 +1259,11 @@ private AuditEvent.Source parseAuditEventSource(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(AuditEvent.Source.class, jsonObject); } AuditEvent.Source.Builder builder = AuditEvent.Source.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.site(parseString("site", getJsonValue(jsonObject, "site", JsonString.class), jsonObject.get("_site"), -1)); builder.observer(parseReference("observer", getJsonValue(jsonObject, "observer", JsonObject.class), -1)); @@ -1260,6 +1278,7 @@ private AuditEvent.Source parseAuditEventSource(java.lang.String elementName, Js } private void parseBackboneElement(BackboneElement.Builder builder, JsonObject jsonObject) { + builder.setValidating(validating); parseElement(builder, jsonObject); JsonArray modifierExtensionArray = getJsonArray(jsonObject, "modifierExtension"); if (modifierExtensionArray != null) { @@ -1275,9 +1294,10 @@ private Base64Binary parseBase64Binary(java.lang.String elementName, JsonValue j } stackPush(elementName, elementIndex); Base64Binary.Builder builder = Base64Binary.builder(); + builder.setValidating(validating); if (_jsonValue != null && _jsonValue.getValueType() == JsonValue.ValueType.OBJECT) { JsonObject jsonObject = (JsonObject) _jsonValue; - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Element.class, jsonObject); } parseElement(builder, jsonObject); @@ -1299,10 +1319,11 @@ private Basic parseBasic(java.lang.String elementName, JsonObject jsonObject, in return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Basic.class, jsonObject); } Basic.Builder builder = Basic.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -1323,10 +1344,11 @@ private Binary parseBinary(java.lang.String elementName, JsonObject jsonObject, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Binary.class, jsonObject); } Binary.Builder builder = Binary.builder(); + builder.setValidating(validating); parseResource(builder, jsonObject); builder.contentType((Code) parseString(Code.builder(), "contentType", getJsonValue(jsonObject, "contentType", JsonString.class), jsonObject.get("_contentType"), -1)); builder.securityContext(parseReference("securityContext", getJsonValue(jsonObject, "securityContext", JsonObject.class), -1)); @@ -1340,10 +1362,11 @@ private BiologicallyDerivedProduct parseBiologicallyDerivedProduct(java.lang.Str return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(BiologicallyDerivedProduct.class, jsonObject); } BiologicallyDerivedProduct.Builder builder = BiologicallyDerivedProduct.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -1390,10 +1413,11 @@ private BiologicallyDerivedProduct.Collection parseBiologicallyDerivedProductCol return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(BiologicallyDerivedProduct.Collection.class, jsonObject); } BiologicallyDerivedProduct.Collection.Builder builder = BiologicallyDerivedProduct.Collection.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.collector(parseReference("collector", getJsonValue(jsonObject, "collector", JsonObject.class), -1)); builder.source(parseReference("source", getJsonValue(jsonObject, "source", JsonObject.class), -1)); @@ -1407,10 +1431,11 @@ private BiologicallyDerivedProduct.Manipulation parseBiologicallyDerivedProductM return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(BiologicallyDerivedProduct.Manipulation.class, jsonObject); } BiologicallyDerivedProduct.Manipulation.Builder builder = BiologicallyDerivedProduct.Manipulation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.time(parseChoiceElement("time", jsonObject, DateTime.class, Period.class)); @@ -1423,10 +1448,11 @@ private BiologicallyDerivedProduct.Processing parseBiologicallyDerivedProductPro return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(BiologicallyDerivedProduct.Processing.class, jsonObject); } BiologicallyDerivedProduct.Processing.Builder builder = BiologicallyDerivedProduct.Processing.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.procedure(parseCodeableConcept("procedure", getJsonValue(jsonObject, "procedure", JsonObject.class), -1)); @@ -1441,10 +1467,11 @@ private BiologicallyDerivedProduct.Storage parseBiologicallyDerivedProductStorag return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(BiologicallyDerivedProduct.Storage.class, jsonObject); } BiologicallyDerivedProduct.Storage.Builder builder = BiologicallyDerivedProduct.Storage.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.temperature(parseDecimal("temperature", getJsonValue(jsonObject, "temperature", JsonNumber.class), jsonObject.get("_temperature"), -1)); @@ -1459,10 +1486,11 @@ private BodyStructure parseBodyStructure(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(BodyStructure.class, jsonObject); } BodyStructure.Builder builder = BodyStructure.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -1497,9 +1525,10 @@ private Boolean parseBoolean(java.lang.String elementName, JsonValue jsonValue, } stackPush(elementName, elementIndex); Boolean.Builder builder = Boolean.builder(); + builder.setValidating(validating); if (_jsonValue != null && _jsonValue.getValueType() == JsonValue.ValueType.OBJECT) { JsonObject jsonObject = (JsonObject) _jsonValue; - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Element.class, jsonObject); } parseElement(builder, jsonObject); @@ -1520,10 +1549,11 @@ private Bundle parseBundle(java.lang.String elementName, JsonObject jsonObject, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Bundle.class, jsonObject); } Bundle.Builder builder = Bundle.builder(); + builder.setValidating(validating); parseResource(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.type((BundleType) parseString(BundleType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); @@ -1551,10 +1581,11 @@ private Bundle.Entry parseBundleEntry(java.lang.String elementName, JsonObject j return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Bundle.Entry.class, jsonObject); } Bundle.Entry.Builder builder = Bundle.Entry.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray linkArray = getJsonArray(jsonObject, "link"); if (linkArray != null) { @@ -1576,10 +1607,11 @@ private Bundle.Entry.Request parseBundleEntryRequest(java.lang.String elementNam return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Bundle.Entry.Request.class, jsonObject); } Bundle.Entry.Request.Builder builder = Bundle.Entry.Request.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.method((HTTPVerb) parseString(HTTPVerb.builder(), "method", getJsonValue(jsonObject, "method", JsonString.class), jsonObject.get("_method"), -1)); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); @@ -1596,10 +1628,11 @@ private Bundle.Entry.Response parseBundleEntryResponse(java.lang.String elementN return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Bundle.Entry.Response.class, jsonObject); } Bundle.Entry.Response.Builder builder = Bundle.Entry.Response.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.status(parseString("status", getJsonValue(jsonObject, "status", JsonString.class), jsonObject.get("_status"), -1)); builder.location(parseUri("location", getJsonValue(jsonObject, "location", JsonString.class), jsonObject.get("_location"), -1)); @@ -1615,10 +1648,11 @@ private Bundle.Entry.Search parseBundleEntrySearch(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Bundle.Entry.Search.class, jsonObject); } Bundle.Entry.Search.Builder builder = Bundle.Entry.Search.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.mode((SearchEntryMode) parseString(SearchEntryMode.builder(), "mode", getJsonValue(jsonObject, "mode", JsonString.class), jsonObject.get("_mode"), -1)); builder.score(parseDecimal("score", getJsonValue(jsonObject, "score", JsonNumber.class), jsonObject.get("_score"), -1)); @@ -1631,10 +1665,11 @@ private Bundle.Link parseBundleLink(java.lang.String elementName, JsonObject jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Bundle.Link.class, jsonObject); } Bundle.Link.Builder builder = Bundle.Link.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.relation(parseString("relation", getJsonValue(jsonObject, "relation", JsonString.class), jsonObject.get("_relation"), -1)); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); @@ -1647,10 +1682,11 @@ private CapabilityStatement parseCapabilityStatement(java.lang.String elementNam return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.class, jsonObject); } CapabilityStatement.Builder builder = CapabilityStatement.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); builder.version(parseString("version", getJsonValue(jsonObject, "version", JsonString.class), jsonObject.get("_version"), -1)); @@ -1747,10 +1783,11 @@ private CapabilityStatement.Document parseCapabilityStatementDocument(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.Document.class, jsonObject); } CapabilityStatement.Document.Builder builder = CapabilityStatement.Document.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.mode((DocumentMode) parseString(DocumentMode.builder(), "mode", getJsonValue(jsonObject, "mode", JsonString.class), jsonObject.get("_mode"), -1)); builder.documentation((Markdown) parseString(Markdown.builder(), "documentation", getJsonValue(jsonObject, "documentation", JsonString.class), jsonObject.get("_documentation"), -1)); @@ -1764,10 +1801,11 @@ private CapabilityStatement.Implementation parseCapabilityStatementImplementatio return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.Implementation.class, jsonObject); } CapabilityStatement.Implementation.Builder builder = CapabilityStatement.Implementation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.url((Url) parseUri(Url.builder(), "url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); @@ -1781,10 +1819,11 @@ private CapabilityStatement.Messaging parseCapabilityStatementMessaging(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.Messaging.class, jsonObject); } CapabilityStatement.Messaging.Builder builder = CapabilityStatement.Messaging.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray endpointArray = getJsonArray(jsonObject, "endpoint"); if (endpointArray != null) { @@ -1809,10 +1848,11 @@ private CapabilityStatement.Messaging.Endpoint parseCapabilityStatementMessaging return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.Messaging.Endpoint.class, jsonObject); } CapabilityStatement.Messaging.Endpoint.Builder builder = CapabilityStatement.Messaging.Endpoint.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.protocol(parseCoding("protocol", getJsonValue(jsonObject, "protocol", JsonObject.class), -1)); builder.address((Url) parseUri(Url.builder(), "address", getJsonValue(jsonObject, "address", JsonString.class), jsonObject.get("_address"), -1)); @@ -1825,10 +1865,11 @@ private CapabilityStatement.Messaging.SupportedMessage parseCapabilityStatementM return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.Messaging.SupportedMessage.class, jsonObject); } CapabilityStatement.Messaging.SupportedMessage.Builder builder = CapabilityStatement.Messaging.SupportedMessage.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.mode((EventCapabilityMode) parseString(EventCapabilityMode.builder(), "mode", getJsonValue(jsonObject, "mode", JsonString.class), jsonObject.get("_mode"), -1)); builder.definition((Canonical) parseUri(Canonical.builder(), "definition", getJsonValue(jsonObject, "definition", JsonString.class), jsonObject.get("_definition"), -1)); @@ -1841,10 +1882,11 @@ private CapabilityStatement.Rest parseCapabilityStatementRest(java.lang.String e return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.Rest.class, jsonObject); } CapabilityStatement.Rest.Builder builder = CapabilityStatement.Rest.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.mode((RestfulCapabilityMode) parseString(RestfulCapabilityMode.builder(), "mode", getJsonValue(jsonObject, "mode", JsonString.class), jsonObject.get("_mode"), -1)); builder.documentation((Markdown) parseString(Markdown.builder(), "documentation", getJsonValue(jsonObject, "documentation", JsonString.class), jsonObject.get("_documentation"), -1)); @@ -1889,10 +1931,11 @@ private CapabilityStatement.Rest.Interaction parseCapabilityStatementRestInterac return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.Rest.Interaction.class, jsonObject); } CapabilityStatement.Rest.Interaction.Builder builder = CapabilityStatement.Rest.Interaction.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((SystemRestfulInteraction) parseString(SystemRestfulInteraction.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.documentation((Markdown) parseString(Markdown.builder(), "documentation", getJsonValue(jsonObject, "documentation", JsonString.class), jsonObject.get("_documentation"), -1)); @@ -1905,10 +1948,11 @@ private CapabilityStatement.Rest.Resource parseCapabilityStatementRestResource(j return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.Rest.Resource.class, jsonObject); } CapabilityStatement.Rest.Resource.Builder builder = CapabilityStatement.Rest.Resource.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((ResourceType) parseString(ResourceType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.profile((Canonical) parseUri(Canonical.builder(), "profile", getJsonValue(jsonObject, "profile", JsonString.class), jsonObject.get("_profile"), -1)); @@ -1975,10 +2019,11 @@ private CapabilityStatement.Rest.Resource.Interaction parseCapabilityStatementRe return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.Rest.Resource.Interaction.class, jsonObject); } CapabilityStatement.Rest.Resource.Interaction.Builder builder = CapabilityStatement.Rest.Resource.Interaction.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((TypeRestfulInteraction) parseString(TypeRestfulInteraction.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.documentation((Markdown) parseString(Markdown.builder(), "documentation", getJsonValue(jsonObject, "documentation", JsonString.class), jsonObject.get("_documentation"), -1)); @@ -1991,10 +2036,11 @@ private CapabilityStatement.Rest.Resource.Operation parseCapabilityStatementRest return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.Rest.Resource.Operation.class, jsonObject); } CapabilityStatement.Rest.Resource.Operation.Builder builder = CapabilityStatement.Rest.Resource.Operation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.definition((Canonical) parseUri(Canonical.builder(), "definition", getJsonValue(jsonObject, "definition", JsonString.class), jsonObject.get("_definition"), -1)); @@ -2008,10 +2054,11 @@ private CapabilityStatement.Rest.Resource.SearchParam parseCapabilityStatementRe return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.Rest.Resource.SearchParam.class, jsonObject); } CapabilityStatement.Rest.Resource.SearchParam.Builder builder = CapabilityStatement.Rest.Resource.SearchParam.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.definition((Canonical) parseUri(Canonical.builder(), "definition", getJsonValue(jsonObject, "definition", JsonString.class), jsonObject.get("_definition"), -1)); @@ -2026,10 +2073,11 @@ private CapabilityStatement.Rest.Security parseCapabilityStatementRestSecurity(j return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.Rest.Security.class, jsonObject); } CapabilityStatement.Rest.Security.Builder builder = CapabilityStatement.Rest.Security.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.cors(parseBoolean("cors", getJsonValue(jsonObject, "cors", JsonValue.class), jsonObject.get("_cors"), -1)); JsonArray serviceArray = getJsonArray(jsonObject, "service"); @@ -2048,10 +2096,11 @@ private CapabilityStatement.Software parseCapabilityStatementSoftware(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CapabilityStatement.Software.class, jsonObject); } CapabilityStatement.Software.Builder builder = CapabilityStatement.Software.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.version(parseString("version", getJsonValue(jsonObject, "version", JsonString.class), jsonObject.get("_version"), -1)); @@ -2065,10 +2114,11 @@ private CarePlan parseCarePlan(java.lang.String elementName, JsonObject jsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CarePlan.class, jsonObject); } CarePlan.Builder builder = CarePlan.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -2174,10 +2224,11 @@ private CarePlan.Activity parseCarePlanActivity(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CarePlan.Activity.class, jsonObject); } CarePlan.Activity.Builder builder = CarePlan.Activity.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray outcomeCodeableConceptArray = getJsonArray(jsonObject, "outcomeCodeableConcept"); if (outcomeCodeableConceptArray != null) { @@ -2208,10 +2259,11 @@ private CarePlan.Activity.Detail parseCarePlanActivityDetail(java.lang.String el return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CarePlan.Activity.Detail.class, jsonObject); } CarePlan.Activity.Detail.Builder builder = CarePlan.Activity.Detail.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.kind((CarePlanActivityKind) parseString(CarePlanActivityKind.builder(), "kind", getJsonValue(jsonObject, "kind", JsonString.class), jsonObject.get("_kind"), -1)); JsonArray instantiatesCanonicalArray = getJsonArray(jsonObject, "instantiatesCanonical", true); @@ -2271,10 +2323,11 @@ private CareTeam parseCareTeam(java.lang.String elementName, JsonObject jsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CareTeam.class, jsonObject); } CareTeam.Builder builder = CareTeam.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -2338,10 +2391,11 @@ private CareTeam.Participant parseCareTeamParticipant(java.lang.String elementNa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CareTeam.Participant.class, jsonObject); } CareTeam.Participant.Builder builder = CareTeam.Participant.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray roleArray = getJsonArray(jsonObject, "role"); if (roleArray != null) { @@ -2361,10 +2415,11 @@ private CatalogEntry parseCatalogEntry(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CatalogEntry.class, jsonObject); } CatalogEntry.Builder builder = CatalogEntry.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -2418,10 +2473,11 @@ private CatalogEntry.RelatedEntry parseCatalogEntryRelatedEntry(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CatalogEntry.RelatedEntry.class, jsonObject); } CatalogEntry.RelatedEntry.Builder builder = CatalogEntry.RelatedEntry.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.relationtype((CatalogEntryRelationType) parseString(CatalogEntryRelationType.builder(), "relationtype", getJsonValue(jsonObject, "relationtype", JsonString.class), jsonObject.get("_relationtype"), -1)); builder.item(parseReference("item", getJsonValue(jsonObject, "item", JsonObject.class), -1)); @@ -2434,10 +2490,11 @@ private ChargeItem parseChargeItem(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ChargeItem.class, jsonObject); } ChargeItem.Builder builder = ChargeItem.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -2531,10 +2588,11 @@ private ChargeItem.Performer parseChargeItemPerformer(java.lang.String elementNa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ChargeItem.Performer.class, jsonObject); } ChargeItem.Performer.Builder builder = ChargeItem.Performer.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.function(parseCodeableConcept("function", getJsonValue(jsonObject, "function", JsonObject.class), -1)); builder.actor(parseReference("actor", getJsonValue(jsonObject, "actor", JsonObject.class), -1)); @@ -2547,10 +2605,11 @@ private ChargeItemDefinition parseChargeItemDefinition(java.lang.String elementN return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ChargeItemDefinition.class, jsonObject); } ChargeItemDefinition.Builder builder = ChargeItemDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -2637,10 +2696,11 @@ private ChargeItemDefinition.Applicability parseChargeItemDefinitionApplicabilit return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ChargeItemDefinition.Applicability.class, jsonObject); } ChargeItemDefinition.Applicability.Builder builder = ChargeItemDefinition.Applicability.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.language(parseString("language", getJsonValue(jsonObject, "language", JsonString.class), jsonObject.get("_language"), -1)); @@ -2654,10 +2714,11 @@ private ChargeItemDefinition.PropertyGroup parseChargeItemDefinitionPropertyGrou return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ChargeItemDefinition.PropertyGroup.class, jsonObject); } ChargeItemDefinition.PropertyGroup.Builder builder = ChargeItemDefinition.PropertyGroup.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray applicabilityArray = getJsonArray(jsonObject, "applicability"); if (applicabilityArray != null) { @@ -2680,10 +2741,11 @@ private ChargeItemDefinition.PropertyGroup.PriceComponent parseChargeItemDefinit return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ChargeItemDefinition.PropertyGroup.PriceComponent.class, jsonObject); } ChargeItemDefinition.PropertyGroup.PriceComponent.Builder builder = ChargeItemDefinition.PropertyGroup.PriceComponent.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((ChargeItemDefinitionPriceComponentType) parseString(ChargeItemDefinitionPriceComponentType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); @@ -2698,10 +2760,11 @@ private Claim parseClaim(java.lang.String elementName, JsonObject jsonObject, in return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Claim.class, jsonObject); } Claim.Builder builder = Claim.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -2779,10 +2842,11 @@ private Claim.Accident parseClaimAccident(java.lang.String elementName, JsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Claim.Accident.class, jsonObject); } Claim.Accident.Builder builder = Claim.Accident.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.date(parseDate("date", getJsonValue(jsonObject, "date", JsonString.class), jsonObject.get("_date"), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -2796,10 +2860,11 @@ private Claim.CareTeam parseClaimCareTeam(java.lang.String elementName, JsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Claim.CareTeam.class, jsonObject); } Claim.CareTeam.Builder builder = Claim.CareTeam.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.provider(parseReference("provider", getJsonValue(jsonObject, "provider", JsonObject.class), -1)); @@ -2815,10 +2880,11 @@ private Claim.Diagnosis parseClaimDiagnosis(java.lang.String elementName, JsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Claim.Diagnosis.class, jsonObject); } Claim.Diagnosis.Builder builder = Claim.Diagnosis.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.diagnosis(parseChoiceElement("diagnosis", jsonObject, CodeableConcept.class, Reference.class)); @@ -2839,10 +2905,11 @@ private Claim.Insurance parseClaimInsurance(java.lang.String elementName, JsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Claim.Insurance.class, jsonObject); } Claim.Insurance.Builder builder = Claim.Insurance.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.focal(parseBoolean("focal", getJsonValue(jsonObject, "focal", JsonValue.class), jsonObject.get("_focal"), -1)); @@ -2866,10 +2933,11 @@ private Claim.Item parseClaimItem(java.lang.String elementName, JsonObject jsonO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Claim.Item.class, jsonObject); } Claim.Item.Builder builder = Claim.Item.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); JsonArray careTeamSequenceArray = getJsonArray(jsonObject, "careTeamSequence", true); @@ -2955,10 +3023,11 @@ private Claim.Item.Detail parseClaimItemDetail(java.lang.String elementName, Jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Claim.Item.Detail.class, jsonObject); } Claim.Item.Detail.Builder builder = Claim.Item.Detail.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.revenue(parseCodeableConcept("revenue", getJsonValue(jsonObject, "revenue", JsonObject.class), -1)); @@ -3001,10 +3070,11 @@ private Claim.Item.Detail.SubDetail parseClaimItemDetailSubDetail(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Claim.Item.Detail.SubDetail.class, jsonObject); } Claim.Item.Detail.SubDetail.Builder builder = Claim.Item.Detail.SubDetail.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.revenue(parseCodeableConcept("revenue", getJsonValue(jsonObject, "revenue", JsonObject.class), -1)); @@ -3041,10 +3111,11 @@ private Claim.Payee parseClaimPayee(java.lang.String elementName, JsonObject jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Claim.Payee.class, jsonObject); } Claim.Payee.Builder builder = Claim.Payee.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.party(parseReference("party", getJsonValue(jsonObject, "party", JsonObject.class), -1)); @@ -3057,10 +3128,11 @@ private Claim.Procedure parseClaimProcedure(java.lang.String elementName, JsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Claim.Procedure.class, jsonObject); } Claim.Procedure.Builder builder = Claim.Procedure.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); JsonArray typeArray = getJsonArray(jsonObject, "type"); @@ -3086,10 +3158,11 @@ private Claim.Related parseClaimRelated(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Claim.Related.class, jsonObject); } Claim.Related.Builder builder = Claim.Related.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.claim(parseReference("claim", getJsonValue(jsonObject, "claim", JsonObject.class), -1)); builder.relationship(parseCodeableConcept("relationship", getJsonValue(jsonObject, "relationship", JsonObject.class), -1)); @@ -3103,10 +3176,11 @@ private Claim.SupportingInfo parseClaimSupportingInfo(java.lang.String elementNa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Claim.SupportingInfo.class, jsonObject); } Claim.SupportingInfo.Builder builder = Claim.SupportingInfo.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.category(parseCodeableConcept("category", getJsonValue(jsonObject, "category", JsonObject.class), -1)); @@ -3123,10 +3197,11 @@ private ClaimResponse parseClaimResponse(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClaimResponse.class, jsonObject); } ClaimResponse.Builder builder = ClaimResponse.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -3209,10 +3284,11 @@ private ClaimResponse.AddItem parseClaimResponseAddItem(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClaimResponse.AddItem.class, jsonObject); } ClaimResponse.AddItem.Builder builder = ClaimResponse.AddItem.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray itemSequenceArray = getJsonArray(jsonObject, "itemSequence", true); if (itemSequenceArray != null) { @@ -3295,10 +3371,11 @@ private ClaimResponse.AddItem.Detail parseClaimResponseAddItemDetail(java.lang.S return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClaimResponse.AddItem.Detail.class, jsonObject); } ClaimResponse.AddItem.Detail.Builder builder = ClaimResponse.AddItem.Detail.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.productOrService(parseCodeableConcept("productOrService", getJsonValue(jsonObject, "productOrService", JsonObject.class), -1)); JsonArray modifierArray = getJsonArray(jsonObject, "modifier"); @@ -3339,10 +3416,11 @@ private ClaimResponse.AddItem.Detail.SubDetail parseClaimResponseAddItemDetailSu return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClaimResponse.AddItem.Detail.SubDetail.class, jsonObject); } ClaimResponse.AddItem.Detail.SubDetail.Builder builder = ClaimResponse.AddItem.Detail.SubDetail.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.productOrService(parseCodeableConcept("productOrService", getJsonValue(jsonObject, "productOrService", JsonObject.class), -1)); JsonArray modifierArray = getJsonArray(jsonObject, "modifier"); @@ -3377,10 +3455,11 @@ private ClaimResponse.Error parseClaimResponseError(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClaimResponse.Error.class, jsonObject); } ClaimResponse.Error.Builder builder = ClaimResponse.Error.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.itemSequence((PositiveInt) parseInteger(PositiveInt.builder(), "itemSequence", getJsonValue(jsonObject, "itemSequence", JsonNumber.class), jsonObject.get("_itemSequence"), -1)); builder.detailSequence((PositiveInt) parseInteger(PositiveInt.builder(), "detailSequence", getJsonValue(jsonObject, "detailSequence", JsonNumber.class), jsonObject.get("_detailSequence"), -1)); @@ -3395,10 +3474,11 @@ private ClaimResponse.Insurance parseClaimResponseInsurance(java.lang.String ele return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClaimResponse.Insurance.class, jsonObject); } ClaimResponse.Insurance.Builder builder = ClaimResponse.Insurance.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.focal(parseBoolean("focal", getJsonValue(jsonObject, "focal", JsonValue.class), jsonObject.get("_focal"), -1)); @@ -3414,10 +3494,11 @@ private ClaimResponse.Item parseClaimResponseItem(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClaimResponse.Item.class, jsonObject); } ClaimResponse.Item.Builder builder = ClaimResponse.Item.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.itemSequence((PositiveInt) parseInteger(PositiveInt.builder(), "itemSequence", getJsonValue(jsonObject, "itemSequence", JsonNumber.class), jsonObject.get("_itemSequence"), -1)); JsonArray noteNumberArray = getJsonArray(jsonObject, "noteNumber", true); @@ -3448,10 +3529,11 @@ private ClaimResponse.Item.Adjudication parseClaimResponseItemAdjudication(java. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClaimResponse.Item.Adjudication.class, jsonObject); } ClaimResponse.Item.Adjudication.Builder builder = ClaimResponse.Item.Adjudication.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.category(parseCodeableConcept("category", getJsonValue(jsonObject, "category", JsonObject.class), -1)); builder.reason(parseCodeableConcept("reason", getJsonValue(jsonObject, "reason", JsonObject.class), -1)); @@ -3466,10 +3548,11 @@ private ClaimResponse.Item.Detail parseClaimResponseItemDetail(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClaimResponse.Item.Detail.class, jsonObject); } ClaimResponse.Item.Detail.Builder builder = ClaimResponse.Item.Detail.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.detailSequence((PositiveInt) parseInteger(PositiveInt.builder(), "detailSequence", getJsonValue(jsonObject, "detailSequence", JsonNumber.class), jsonObject.get("_detailSequence"), -1)); JsonArray noteNumberArray = getJsonArray(jsonObject, "noteNumber", true); @@ -3500,10 +3583,11 @@ private ClaimResponse.Item.Detail.SubDetail parseClaimResponseItemDetailSubDetai return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClaimResponse.Item.Detail.SubDetail.class, jsonObject); } ClaimResponse.Item.Detail.SubDetail.Builder builder = ClaimResponse.Item.Detail.SubDetail.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.subDetailSequence((PositiveInt) parseInteger(PositiveInt.builder(), "subDetailSequence", getJsonValue(jsonObject, "subDetailSequence", JsonNumber.class), jsonObject.get("_subDetailSequence"), -1)); JsonArray noteNumberArray = getJsonArray(jsonObject, "noteNumber", true); @@ -3528,10 +3612,11 @@ private ClaimResponse.Payment parseClaimResponsePayment(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClaimResponse.Payment.class, jsonObject); } ClaimResponse.Payment.Builder builder = ClaimResponse.Payment.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.adjustment(parseMoney("adjustment", getJsonValue(jsonObject, "adjustment", JsonObject.class), -1)); @@ -3548,10 +3633,11 @@ private ClaimResponse.ProcessNote parseClaimResponseProcessNote(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClaimResponse.ProcessNote.class, jsonObject); } ClaimResponse.ProcessNote.Builder builder = ClaimResponse.ProcessNote.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.number((PositiveInt) parseInteger(PositiveInt.builder(), "number", getJsonValue(jsonObject, "number", JsonNumber.class), jsonObject.get("_number"), -1)); builder.type((NoteType) parseString(NoteType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); @@ -3566,10 +3652,11 @@ private ClaimResponse.Total parseClaimResponseTotal(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClaimResponse.Total.class, jsonObject); } ClaimResponse.Total.Builder builder = ClaimResponse.Total.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.category(parseCodeableConcept("category", getJsonValue(jsonObject, "category", JsonObject.class), -1)); builder.amount(parseMoney("amount", getJsonValue(jsonObject, "amount", JsonObject.class), -1)); @@ -3582,10 +3669,11 @@ private ClinicalImpression parseClinicalImpression(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClinicalImpression.class, jsonObject); } ClinicalImpression.Builder builder = ClinicalImpression.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -3662,10 +3750,11 @@ private ClinicalImpression.Finding parseClinicalImpressionFinding(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClinicalImpression.Finding.class, jsonObject); } ClinicalImpression.Finding.Builder builder = ClinicalImpression.Finding.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.itemCodeableConcept(parseCodeableConcept("itemCodeableConcept", getJsonValue(jsonObject, "itemCodeableConcept", JsonObject.class), -1)); builder.itemReference(parseReference("itemReference", getJsonValue(jsonObject, "itemReference", JsonObject.class), -1)); @@ -3679,10 +3768,11 @@ private ClinicalImpression.Investigation parseClinicalImpressionInvestigation(ja return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ClinicalImpression.Investigation.class, jsonObject); } ClinicalImpression.Investigation.Builder builder = ClinicalImpression.Investigation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); JsonArray itemArray = getJsonArray(jsonObject, "item"); @@ -3700,10 +3790,11 @@ private CodeSystem parseCodeSystem(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CodeSystem.class, jsonObject); } CodeSystem.Builder builder = CodeSystem.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -3775,10 +3866,11 @@ private CodeSystem.Concept parseCodeSystemConcept(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CodeSystem.Concept.class, jsonObject); } CodeSystem.Concept.Builder builder = CodeSystem.Concept.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((Code) parseString(Code.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.display(parseString("display", getJsonValue(jsonObject, "display", JsonString.class), jsonObject.get("_display"), -1)); @@ -3810,10 +3902,11 @@ private CodeSystem.Concept.Designation parseCodeSystemConceptDesignation(java.la return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CodeSystem.Concept.Designation.class, jsonObject); } CodeSystem.Concept.Designation.Builder builder = CodeSystem.Concept.Designation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.language((Code) parseString(Code.builder(), "language", getJsonValue(jsonObject, "language", JsonString.class), jsonObject.get("_language"), -1)); builder.use(parseCoding("use", getJsonValue(jsonObject, "use", JsonObject.class), -1)); @@ -3827,10 +3920,11 @@ private CodeSystem.Concept.Property parseCodeSystemConceptProperty(java.lang.Str return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CodeSystem.Concept.Property.class, jsonObject); } CodeSystem.Concept.Property.Builder builder = CodeSystem.Concept.Property.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((Code) parseString(Code.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.value(parseChoiceElement("value", jsonObject, Code.class, Coding.class, String.class, Integer.class, Boolean.class, DateTime.class, Decimal.class)); @@ -3843,10 +3937,11 @@ private CodeSystem.Filter parseCodeSystemFilter(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CodeSystem.Filter.class, jsonObject); } CodeSystem.Filter.Builder builder = CodeSystem.Filter.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((Code) parseString(Code.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -3867,10 +3962,11 @@ private CodeSystem.Property parseCodeSystemProperty(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CodeSystem.Property.class, jsonObject); } CodeSystem.Property.Builder builder = CodeSystem.Property.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((Code) parseString(Code.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.uri(parseUri("uri", getJsonValue(jsonObject, "uri", JsonString.class), jsonObject.get("_uri"), -1)); @@ -3885,10 +3981,11 @@ private CodeableConcept parseCodeableConcept(java.lang.String elementName, JsonO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CodeableConcept.class, jsonObject); } CodeableConcept.Builder builder = CodeableConcept.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); JsonArray codingArray = getJsonArray(jsonObject, "coding"); if (codingArray != null) { @@ -3906,10 +4003,11 @@ private Coding parseCoding(java.lang.String elementName, JsonObject jsonObject, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Coding.class, jsonObject); } Coding.Builder builder = Coding.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.system(parseUri("system", getJsonValue(jsonObject, "system", JsonString.class), jsonObject.get("_system"), -1)); builder.version(parseString("version", getJsonValue(jsonObject, "version", JsonString.class), jsonObject.get("_version"), -1)); @@ -3925,10 +4023,11 @@ private Communication parseCommunication(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Communication.class, jsonObject); } Communication.Builder builder = Communication.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -4034,10 +4133,11 @@ private Communication.Payload parseCommunicationPayload(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Communication.Payload.class, jsonObject); } Communication.Payload.Builder builder = Communication.Payload.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.content(parseChoiceElement("content", jsonObject, String.class, Attachment.class, Reference.class)); stackPop(); @@ -4049,10 +4149,11 @@ private CommunicationRequest parseCommunicationRequest(java.lang.String elementN return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CommunicationRequest.class, jsonObject); } CommunicationRequest.Builder builder = CommunicationRequest.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -4140,10 +4241,11 @@ private CommunicationRequest.Payload parseCommunicationRequestPayload(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CommunicationRequest.Payload.class, jsonObject); } CommunicationRequest.Payload.Builder builder = CommunicationRequest.Payload.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.content(parseChoiceElement("content", jsonObject, String.class, Attachment.class, Reference.class)); stackPop(); @@ -4155,10 +4257,11 @@ private CompartmentDefinition parseCompartmentDefinition(java.lang.String elemen return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CompartmentDefinition.class, jsonObject); } CompartmentDefinition.Builder builder = CompartmentDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); builder.version(parseString("version", getJsonValue(jsonObject, "version", JsonString.class), jsonObject.get("_version"), -1)); @@ -4198,10 +4301,11 @@ private CompartmentDefinition.Resource parseCompartmentDefinitionResource(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CompartmentDefinition.Resource.class, jsonObject); } CompartmentDefinition.Resource.Builder builder = CompartmentDefinition.Resource.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((ResourceType) parseString(ResourceType.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); JsonArray paramArray = getJsonArray(jsonObject, "param", true); @@ -4221,10 +4325,11 @@ private Composition parseComposition(java.lang.String elementName, JsonObject js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Composition.class, jsonObject); } Composition.Builder builder = Composition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.status((CompositionStatus) parseString(CompositionStatus.builder(), "status", getJsonValue(jsonObject, "status", JsonString.class), jsonObject.get("_status"), -1)); @@ -4280,10 +4385,11 @@ private Composition.Attester parseCompositionAttester(java.lang.String elementNa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Composition.Attester.class, jsonObject); } Composition.Attester.Builder builder = Composition.Attester.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.mode((CompositionAttestationMode) parseString(CompositionAttestationMode.builder(), "mode", getJsonValue(jsonObject, "mode", JsonString.class), jsonObject.get("_mode"), -1)); builder.time(parseDateTime("time", getJsonValue(jsonObject, "time", JsonString.class), jsonObject.get("_time"), -1)); @@ -4297,10 +4403,11 @@ private Composition.Event parseCompositionEvent(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Composition.Event.class, jsonObject); } Composition.Event.Builder builder = Composition.Event.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray codeArray = getJsonArray(jsonObject, "code"); if (codeArray != null) { @@ -4324,10 +4431,11 @@ private Composition.RelatesTo parseCompositionRelatesTo(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Composition.RelatesTo.class, jsonObject); } Composition.RelatesTo.Builder builder = Composition.RelatesTo.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((DocumentRelationshipType) parseString(DocumentRelationshipType.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.target(parseChoiceElement("target", jsonObject, Identifier.class, Reference.class)); @@ -4340,10 +4448,11 @@ private Composition.Section parseCompositionSection(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Composition.Section.class, jsonObject); } Composition.Section.Builder builder = Composition.Section.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.title(parseString("title", getJsonValue(jsonObject, "title", JsonString.class), jsonObject.get("_title"), -1)); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); @@ -4379,10 +4488,11 @@ private ConceptMap parseConceptMap(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ConceptMap.class, jsonObject); } ConceptMap.Builder builder = ConceptMap.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); @@ -4431,10 +4541,11 @@ private ConceptMap.Group parseConceptMapGroup(java.lang.String elementName, Json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ConceptMap.Group.class, jsonObject); } ConceptMap.Group.Builder builder = ConceptMap.Group.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.source(parseUri("source", getJsonValue(jsonObject, "source", JsonString.class), jsonObject.get("_source"), -1)); builder.sourceVersion(parseString("sourceVersion", getJsonValue(jsonObject, "sourceVersion", JsonString.class), jsonObject.get("_sourceVersion"), -1)); @@ -4456,10 +4567,11 @@ private ConceptMap.Group.Element parseConceptMapGroupElement(java.lang.String el return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ConceptMap.Group.Element.class, jsonObject); } ConceptMap.Group.Element.Builder builder = ConceptMap.Group.Element.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((Code) parseString(Code.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.display(parseString("display", getJsonValue(jsonObject, "display", JsonString.class), jsonObject.get("_display"), -1)); @@ -4478,10 +4590,11 @@ private ConceptMap.Group.Element.Target parseConceptMapGroupElementTarget(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ConceptMap.Group.Element.Target.class, jsonObject); } ConceptMap.Group.Element.Target.Builder builder = ConceptMap.Group.Element.Target.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((Code) parseString(Code.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.display(parseString("display", getJsonValue(jsonObject, "display", JsonString.class), jsonObject.get("_display"), -1)); @@ -4508,10 +4621,11 @@ private ConceptMap.Group.Element.Target.DependsOn parseConceptMapGroupElementTar return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ConceptMap.Group.Element.Target.DependsOn.class, jsonObject); } ConceptMap.Group.Element.Target.DependsOn.Builder builder = ConceptMap.Group.Element.Target.DependsOn.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.property(parseUri("property", getJsonValue(jsonObject, "property", JsonString.class), jsonObject.get("_property"), -1)); builder.system((Canonical) parseUri(Canonical.builder(), "system", getJsonValue(jsonObject, "system", JsonString.class), jsonObject.get("_system"), -1)); @@ -4526,10 +4640,11 @@ private ConceptMap.Group.Unmapped parseConceptMapGroupUnmapped(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ConceptMap.Group.Unmapped.class, jsonObject); } ConceptMap.Group.Unmapped.Builder builder = ConceptMap.Group.Unmapped.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.mode((ConceptMapGroupUnmappedMode) parseString(ConceptMapGroupUnmappedMode.builder(), "mode", getJsonValue(jsonObject, "mode", JsonString.class), jsonObject.get("_mode"), -1)); builder.code((Code) parseString(Code.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); @@ -4544,10 +4659,11 @@ private Condition parseCondition(java.lang.String elementName, JsonObject jsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Condition.class, jsonObject); } Condition.Builder builder = Condition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -4605,10 +4721,11 @@ private Condition.Evidence parseConditionEvidence(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Condition.Evidence.class, jsonObject); } Condition.Evidence.Builder builder = Condition.Evidence.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray codeArray = getJsonArray(jsonObject, "code"); if (codeArray != null) { @@ -4631,10 +4748,11 @@ private Condition.Stage parseConditionStage(java.lang.String elementName, JsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Condition.Stage.class, jsonObject); } Condition.Stage.Builder builder = Condition.Stage.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.summary(parseCodeableConcept("summary", getJsonValue(jsonObject, "summary", JsonObject.class), -1)); JsonArray assessmentArray = getJsonArray(jsonObject, "assessment"); @@ -4653,10 +4771,11 @@ private Consent parseConsent(java.lang.String elementName, JsonObject jsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Consent.class, jsonObject); } Consent.Builder builder = Consent.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -4710,10 +4829,11 @@ private Consent.Policy parseConsentPolicy(java.lang.String elementName, JsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Consent.Policy.class, jsonObject); } Consent.Policy.Builder builder = Consent.Policy.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.authority(parseUri("authority", getJsonValue(jsonObject, "authority", JsonString.class), jsonObject.get("_authority"), -1)); builder.uri(parseUri("uri", getJsonValue(jsonObject, "uri", JsonString.class), jsonObject.get("_uri"), -1)); @@ -4726,10 +4846,11 @@ private Consent.Provision parseConsentProvision(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Consent.Provision.class, jsonObject); } Consent.Provision.Builder builder = Consent.Provision.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((ConsentProvisionType) parseString(ConsentProvisionType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.period(parsePeriod("period", getJsonValue(jsonObject, "period", JsonObject.class), -1)); @@ -4791,10 +4912,11 @@ private Consent.Provision.Actor parseConsentProvisionActor(java.lang.String elem return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Consent.Provision.Actor.class, jsonObject); } Consent.Provision.Actor.Builder builder = Consent.Provision.Actor.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.role(parseCodeableConcept("role", getJsonValue(jsonObject, "role", JsonObject.class), -1)); builder.reference(parseReference("reference", getJsonValue(jsonObject, "reference", JsonObject.class), -1)); @@ -4807,10 +4929,11 @@ private Consent.Provision.Data parseConsentProvisionData(java.lang.String elemen return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Consent.Provision.Data.class, jsonObject); } Consent.Provision.Data.Builder builder = Consent.Provision.Data.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.meaning((ConsentDataMeaning) parseString(ConsentDataMeaning.builder(), "meaning", getJsonValue(jsonObject, "meaning", JsonString.class), jsonObject.get("_meaning"), -1)); builder.reference(parseReference("reference", getJsonValue(jsonObject, "reference", JsonObject.class), -1)); @@ -4823,10 +4946,11 @@ private Consent.Verification parseConsentVerification(java.lang.String elementNa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Consent.Verification.class, jsonObject); } Consent.Verification.Builder builder = Consent.Verification.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.verified(parseBoolean("verified", getJsonValue(jsonObject, "verified", JsonValue.class), jsonObject.get("_verified"), -1)); builder.verifiedWith(parseReference("verifiedWith", getJsonValue(jsonObject, "verifiedWith", JsonObject.class), -1)); @@ -4840,10 +4964,11 @@ private ContactDetail parseContactDetail(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ContactDetail.class, jsonObject); } ContactDetail.Builder builder = ContactDetail.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); JsonArray telecomArray = getJsonArray(jsonObject, "telecom"); @@ -4861,10 +4986,11 @@ private ContactPoint parseContactPoint(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ContactPoint.class, jsonObject); } ContactPoint.Builder builder = ContactPoint.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.system((ContactPointSystem) parseString(ContactPointSystem.builder(), "system", getJsonValue(jsonObject, "system", JsonString.class), jsonObject.get("_system"), -1)); builder.value(parseString("value", getJsonValue(jsonObject, "value", JsonString.class), jsonObject.get("_value"), -1)); @@ -4880,10 +5006,11 @@ private Contract parseContract(java.lang.String elementName, JsonObject jsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.class, jsonObject); } Contract.Builder builder = Contract.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -4998,10 +5125,11 @@ private Contract.ContentDefinition parseContractContentDefinition(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.ContentDefinition.class, jsonObject); } Contract.ContentDefinition.Builder builder = Contract.ContentDefinition.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.subType(parseCodeableConcept("subType", getJsonValue(jsonObject, "subType", JsonObject.class), -1)); @@ -5018,10 +5146,11 @@ private Contract.Friendly parseContractFriendly(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Friendly.class, jsonObject); } Contract.Friendly.Builder builder = Contract.Friendly.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.content(parseChoiceElement("content", jsonObject, Attachment.class, Reference.class)); stackPop(); @@ -5033,10 +5162,11 @@ private Contract.Legal parseContractLegal(java.lang.String elementName, JsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Legal.class, jsonObject); } Contract.Legal.Builder builder = Contract.Legal.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.content(parseChoiceElement("content", jsonObject, Attachment.class, Reference.class)); stackPop(); @@ -5048,10 +5178,11 @@ private Contract.Rule parseContractRule(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Rule.class, jsonObject); } Contract.Rule.Builder builder = Contract.Rule.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.content(parseChoiceElement("content", jsonObject, Attachment.class, Reference.class)); stackPop(); @@ -5063,10 +5194,11 @@ private Contract.Signer parseContractSigner(java.lang.String elementName, JsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Signer.class, jsonObject); } Contract.Signer.Builder builder = Contract.Signer.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCoding("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.party(parseReference("party", getJsonValue(jsonObject, "party", JsonObject.class), -1)); @@ -5085,10 +5217,11 @@ private Contract.Term parseContractTerm(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Term.class, jsonObject); } Contract.Term.Builder builder = Contract.Term.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.issued(parseDateTime("issued", getJsonValue(jsonObject, "issued", JsonString.class), jsonObject.get("_issued"), -1)); @@ -5131,10 +5264,11 @@ private Contract.Term.Action parseContractTermAction(java.lang.String elementNam return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Term.Action.class, jsonObject); } Contract.Term.Action.Builder builder = Contract.Term.Action.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.doNotPerform(parseBoolean("doNotPerform", getJsonValue(jsonObject, "doNotPerform", JsonValue.class), jsonObject.get("_doNotPerform"), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -5238,10 +5372,11 @@ private Contract.Term.Action.Subject parseContractTermActionSubject(java.lang.St return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Term.Action.Subject.class, jsonObject); } Contract.Term.Action.Subject.Builder builder = Contract.Term.Action.Subject.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray referenceArray = getJsonArray(jsonObject, "reference"); if (referenceArray != null) { @@ -5259,10 +5394,11 @@ private Contract.Term.Asset parseContractTermAsset(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Term.Asset.class, jsonObject); } Contract.Term.Asset.Builder builder = Contract.Term.Asset.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.scope(parseCodeableConcept("scope", getJsonValue(jsonObject, "scope", JsonObject.class), -1)); JsonArray typeArray = getJsonArray(jsonObject, "type"); @@ -5345,10 +5481,11 @@ private Contract.Term.Asset.Context parseContractTermAssetContext(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Term.Asset.Context.class, jsonObject); } Contract.Term.Asset.Context.Builder builder = Contract.Term.Asset.Context.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.reference(parseReference("reference", getJsonValue(jsonObject, "reference", JsonObject.class), -1)); JsonArray codeArray = getJsonArray(jsonObject, "code"); @@ -5367,10 +5504,11 @@ private Contract.Term.Asset.ValuedItem parseContractTermAssetValuedItem(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Term.Asset.ValuedItem.class, jsonObject); } Contract.Term.Asset.ValuedItem.Builder builder = Contract.Term.Asset.ValuedItem.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.entity(parseChoiceElement("entity", jsonObject, CodeableConcept.class, Reference.class)); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); @@ -5407,10 +5545,11 @@ private Contract.Term.Offer parseContractTermOffer(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Term.Offer.class, jsonObject); } Contract.Term.Offer.Builder builder = Contract.Term.Offer.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -5463,10 +5602,11 @@ private Contract.Term.Offer.Answer parseContractTermOfferAnswer(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Term.Offer.Answer.class, jsonObject); } Contract.Term.Offer.Answer.Builder builder = Contract.Term.Offer.Answer.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.value(parseChoiceElement("value", jsonObject, Boolean.class, Decimal.class, Integer.class, Date.class, DateTime.class, Time.class, String.class, Uri.class, Attachment.class, Coding.class, Quantity.class, Reference.class)); stackPop(); @@ -5478,10 +5618,11 @@ private Contract.Term.Offer.Party parseContractTermOfferParty(java.lang.String e return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Term.Offer.Party.class, jsonObject); } Contract.Term.Offer.Party.Builder builder = Contract.Term.Offer.Party.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray referenceArray = getJsonArray(jsonObject, "reference"); if (referenceArray != null) { @@ -5499,10 +5640,11 @@ private Contract.Term.SecurityLabel parseContractTermSecurityLabel(java.lang.Str return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contract.Term.SecurityLabel.class, jsonObject); } Contract.Term.SecurityLabel.Builder builder = Contract.Term.SecurityLabel.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray numberArray = getJsonArray(jsonObject, "number", true); if (numberArray != null) { @@ -5533,10 +5675,11 @@ private Contributor parseContributor(java.lang.String elementName, JsonObject js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Contributor.class, jsonObject); } Contributor.Builder builder = Contributor.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.type((ContributorType) parseString(ContributorType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); @@ -5555,10 +5698,11 @@ private Coverage parseCoverage(java.lang.String elementName, JsonObject jsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Coverage.class, jsonObject); } Coverage.Builder builder = Coverage.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -5611,10 +5755,11 @@ private Coverage.Class parseCoverageClass(java.lang.String elementName, JsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Coverage.Class.class, jsonObject); } Coverage.Class.Builder builder = Coverage.Class.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.value(parseString("value", getJsonValue(jsonObject, "value", JsonString.class), jsonObject.get("_value"), -1)); @@ -5628,10 +5773,11 @@ private Coverage.CostToBeneficiary parseCoverageCostToBeneficiary(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Coverage.CostToBeneficiary.class, jsonObject); } Coverage.CostToBeneficiary.Builder builder = Coverage.CostToBeneficiary.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.value(parseChoiceElement("value", jsonObject, SimpleQuantity.class, Money.class)); @@ -5650,10 +5796,11 @@ private Coverage.CostToBeneficiary.Exception parseCoverageCostToBeneficiaryExcep return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Coverage.CostToBeneficiary.Exception.class, jsonObject); } Coverage.CostToBeneficiary.Exception.Builder builder = Coverage.CostToBeneficiary.Exception.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.period(parsePeriod("period", getJsonValue(jsonObject, "period", JsonObject.class), -1)); @@ -5666,10 +5813,11 @@ private CoverageEligibilityRequest parseCoverageEligibilityRequest(java.lang.Str return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CoverageEligibilityRequest.class, jsonObject); } CoverageEligibilityRequest.Builder builder = CoverageEligibilityRequest.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -5720,10 +5868,11 @@ private CoverageEligibilityRequest.Insurance parseCoverageEligibilityRequestInsu return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CoverageEligibilityRequest.Insurance.class, jsonObject); } CoverageEligibilityRequest.Insurance.Builder builder = CoverageEligibilityRequest.Insurance.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.focal(parseBoolean("focal", getJsonValue(jsonObject, "focal", JsonValue.class), jsonObject.get("_focal"), -1)); builder.coverage(parseReference("coverage", getJsonValue(jsonObject, "coverage", JsonObject.class), -1)); @@ -5737,10 +5886,11 @@ private CoverageEligibilityRequest.Item parseCoverageEligibilityRequestItem(java return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CoverageEligibilityRequest.Item.class, jsonObject); } CoverageEligibilityRequest.Item.Builder builder = CoverageEligibilityRequest.Item.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray supportingInfoSequenceArray = getJsonArray(jsonObject, "supportingInfoSequence", true); if (supportingInfoSequenceArray != null) { @@ -5782,10 +5932,11 @@ private CoverageEligibilityRequest.Item.Diagnosis parseCoverageEligibilityReques return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CoverageEligibilityRequest.Item.Diagnosis.class, jsonObject); } CoverageEligibilityRequest.Item.Diagnosis.Builder builder = CoverageEligibilityRequest.Item.Diagnosis.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.diagnosis(parseChoiceElement("diagnosis", jsonObject, CodeableConcept.class, Reference.class)); stackPop(); @@ -5797,10 +5948,11 @@ private CoverageEligibilityRequest.SupportingInfo parseCoverageEligibilityReques return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CoverageEligibilityRequest.SupportingInfo.class, jsonObject); } CoverageEligibilityRequest.SupportingInfo.Builder builder = CoverageEligibilityRequest.SupportingInfo.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.information(parseReference("information", getJsonValue(jsonObject, "information", JsonObject.class), -1)); @@ -5814,10 +5966,11 @@ private CoverageEligibilityResponse parseCoverageEligibilityResponse(java.lang.S return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CoverageEligibilityResponse.class, jsonObject); } CoverageEligibilityResponse.Builder builder = CoverageEligibilityResponse.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -5864,10 +6017,11 @@ private CoverageEligibilityResponse.Error parseCoverageEligibilityResponseError( return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CoverageEligibilityResponse.Error.class, jsonObject); } CoverageEligibilityResponse.Error.Builder builder = CoverageEligibilityResponse.Error.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); stackPop(); @@ -5879,10 +6033,11 @@ private CoverageEligibilityResponse.Insurance parseCoverageEligibilityResponseIn return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CoverageEligibilityResponse.Insurance.class, jsonObject); } CoverageEligibilityResponse.Insurance.Builder builder = CoverageEligibilityResponse.Insurance.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.coverage(parseReference("coverage", getJsonValue(jsonObject, "coverage", JsonObject.class), -1)); builder.inforce(parseBoolean("inforce", getJsonValue(jsonObject, "inforce", JsonValue.class), jsonObject.get("_inforce"), -1)); @@ -5902,10 +6057,11 @@ private CoverageEligibilityResponse.Insurance.Item parseCoverageEligibilityRespo return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CoverageEligibilityResponse.Insurance.Item.class, jsonObject); } CoverageEligibilityResponse.Insurance.Item.Builder builder = CoverageEligibilityResponse.Insurance.Item.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.category(parseCodeableConcept("category", getJsonValue(jsonObject, "category", JsonObject.class), -1)); builder.productOrService(parseCodeableConcept("productOrService", getJsonValue(jsonObject, "productOrService", JsonObject.class), -1)); @@ -5945,10 +6101,11 @@ private CoverageEligibilityResponse.Insurance.Item.Benefit parseCoverageEligibil return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(CoverageEligibilityResponse.Insurance.Item.Benefit.class, jsonObject); } CoverageEligibilityResponse.Insurance.Item.Benefit.Builder builder = CoverageEligibilityResponse.Insurance.Item.Benefit.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.allowed(parseChoiceElement("allowed", jsonObject, UnsignedInt.class, String.class, Money.class)); @@ -5962,10 +6119,11 @@ private DataRequirement parseDataRequirement(java.lang.String elementName, JsonO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DataRequirement.class, jsonObject); } DataRequirement.Builder builder = DataRequirement.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.type((FHIRAllTypes) parseString(FHIRAllTypes.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); JsonArray profileArray = getJsonArray(jsonObject, "profile", true); @@ -6011,10 +6169,11 @@ private DataRequirement.CodeFilter parseDataRequirementCodeFilter(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DataRequirement.CodeFilter.class, jsonObject); } DataRequirement.CodeFilter.Builder builder = DataRequirement.CodeFilter.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.path(parseString("path", getJsonValue(jsonObject, "path", JsonString.class), jsonObject.get("_path"), -1)); builder.searchParam(parseString("searchParam", getJsonValue(jsonObject, "searchParam", JsonString.class), jsonObject.get("_searchParam"), -1)); @@ -6034,10 +6193,11 @@ private DataRequirement.DateFilter parseDataRequirementDateFilter(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DataRequirement.DateFilter.class, jsonObject); } DataRequirement.DateFilter.Builder builder = DataRequirement.DateFilter.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.path(parseString("path", getJsonValue(jsonObject, "path", JsonString.class), jsonObject.get("_path"), -1)); builder.searchParam(parseString("searchParam", getJsonValue(jsonObject, "searchParam", JsonString.class), jsonObject.get("_searchParam"), -1)); @@ -6051,10 +6211,11 @@ private DataRequirement.Sort parseDataRequirementSort(java.lang.String elementNa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DataRequirement.Sort.class, jsonObject); } DataRequirement.Sort.Builder builder = DataRequirement.Sort.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.path(parseString("path", getJsonValue(jsonObject, "path", JsonString.class), jsonObject.get("_path"), -1)); builder.direction((SortDirection) parseString(SortDirection.builder(), "direction", getJsonValue(jsonObject, "direction", JsonString.class), jsonObject.get("_direction"), -1)); @@ -6068,9 +6229,10 @@ private Date parseDate(java.lang.String elementName, JsonValue jsonValue, JsonVa } stackPush(elementName, elementIndex); Date.Builder builder = Date.builder(); + builder.setValidating(validating); if (_jsonValue != null && _jsonValue.getValueType() == JsonValue.ValueType.OBJECT) { JsonObject jsonObject = (JsonObject) _jsonValue; - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Element.class, jsonObject); } parseElement(builder, jsonObject); @@ -6093,9 +6255,10 @@ private DateTime parseDateTime(java.lang.String elementName, JsonValue jsonValue } stackPush(elementName, elementIndex); DateTime.Builder builder = DateTime.builder(); + builder.setValidating(validating); if (_jsonValue != null && _jsonValue.getValueType() == JsonValue.ValueType.OBJECT) { JsonObject jsonObject = (JsonObject) _jsonValue; - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Element.class, jsonObject); } parseElement(builder, jsonObject); @@ -6118,9 +6281,10 @@ private Decimal parseDecimal(java.lang.String elementName, JsonValue jsonValue, } stackPush(elementName, elementIndex); Decimal.Builder builder = Decimal.builder(); + builder.setValidating(validating); if (_jsonValue != null && _jsonValue.getValueType() == JsonValue.ValueType.OBJECT) { JsonObject jsonObject = (JsonObject) _jsonValue; - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Element.class, jsonObject); } parseElement(builder, jsonObject); @@ -6142,10 +6306,11 @@ private DetectedIssue parseDetectedIssue(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DetectedIssue.class, jsonObject); } DetectedIssue.Builder builder = DetectedIssue.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -6188,10 +6353,11 @@ private DetectedIssue.Evidence parseDetectedIssueEvidence(java.lang.String eleme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DetectedIssue.Evidence.class, jsonObject); } DetectedIssue.Evidence.Builder builder = DetectedIssue.Evidence.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray codeArray = getJsonArray(jsonObject, "code"); if (codeArray != null) { @@ -6214,10 +6380,11 @@ private DetectedIssue.Mitigation parseDetectedIssueMitigation(java.lang.String e return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DetectedIssue.Mitigation.class, jsonObject); } DetectedIssue.Mitigation.Builder builder = DetectedIssue.Mitigation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.action(parseCodeableConcept("action", getJsonValue(jsonObject, "action", JsonObject.class), -1)); builder.date(parseDateTime("date", getJsonValue(jsonObject, "date", JsonString.class), jsonObject.get("_date"), -1)); @@ -6231,10 +6398,11 @@ private Device parseDevice(java.lang.String elementName, JsonObject jsonObject, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Device.class, jsonObject); } Device.Builder builder = Device.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -6321,10 +6489,11 @@ private Device.DeviceName parseDeviceDeviceName(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Device.DeviceName.class, jsonObject); } Device.DeviceName.Builder builder = Device.DeviceName.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.type((DeviceNameType) parseString(DeviceNameType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); @@ -6337,10 +6506,11 @@ private Device.Property parseDeviceProperty(java.lang.String elementName, JsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Device.Property.class, jsonObject); } Device.Property.Builder builder = Device.Property.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); JsonArray valueQuantityArray = getJsonArray(jsonObject, "valueQuantity"); @@ -6364,10 +6534,11 @@ private Device.Specialization parseDeviceSpecialization(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Device.Specialization.class, jsonObject); } Device.Specialization.Builder builder = Device.Specialization.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.systemType(parseCodeableConcept("systemType", getJsonValue(jsonObject, "systemType", JsonObject.class), -1)); builder.version(parseString("version", getJsonValue(jsonObject, "version", JsonString.class), jsonObject.get("_version"), -1)); @@ -6380,10 +6551,11 @@ private Device.UdiCarrier parseDeviceUdiCarrier(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Device.UdiCarrier.class, jsonObject); } Device.UdiCarrier.Builder builder = Device.UdiCarrier.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.deviceIdentifier(parseString("deviceIdentifier", getJsonValue(jsonObject, "deviceIdentifier", JsonString.class), jsonObject.get("_deviceIdentifier"), -1)); builder.issuer(parseUri("issuer", getJsonValue(jsonObject, "issuer", JsonString.class), jsonObject.get("_issuer"), -1)); @@ -6400,10 +6572,11 @@ private Device.Version parseDeviceVersion(java.lang.String elementName, JsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Device.Version.class, jsonObject); } Device.Version.Builder builder = Device.Version.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.component(parseIdentifier("component", getJsonValue(jsonObject, "component", JsonObject.class), -1)); @@ -6417,10 +6590,11 @@ private DeviceDefinition parseDeviceDefinition(java.lang.String elementName, Jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DeviceDefinition.class, jsonObject); } DeviceDefinition.Builder builder = DeviceDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -6519,10 +6693,11 @@ private DeviceDefinition.Capability parseDeviceDefinitionCapability(java.lang.St return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DeviceDefinition.Capability.class, jsonObject); } DeviceDefinition.Capability.Builder builder = DeviceDefinition.Capability.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); JsonArray descriptionArray = getJsonArray(jsonObject, "description"); @@ -6540,10 +6715,11 @@ private DeviceDefinition.DeviceName parseDeviceDefinitionDeviceName(java.lang.St return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DeviceDefinition.DeviceName.class, jsonObject); } DeviceDefinition.DeviceName.Builder builder = DeviceDefinition.DeviceName.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.type((DeviceNameType) parseString(DeviceNameType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); @@ -6556,10 +6732,11 @@ private DeviceDefinition.Material parseDeviceDefinitionMaterial(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DeviceDefinition.Material.class, jsonObject); } DeviceDefinition.Material.Builder builder = DeviceDefinition.Material.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.substance(parseCodeableConcept("substance", getJsonValue(jsonObject, "substance", JsonObject.class), -1)); builder.alternate(parseBoolean("alternate", getJsonValue(jsonObject, "alternate", JsonValue.class), jsonObject.get("_alternate"), -1)); @@ -6573,10 +6750,11 @@ private DeviceDefinition.Property parseDeviceDefinitionProperty(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DeviceDefinition.Property.class, jsonObject); } DeviceDefinition.Property.Builder builder = DeviceDefinition.Property.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); JsonArray valueQuantityArray = getJsonArray(jsonObject, "valueQuantity"); @@ -6600,10 +6778,11 @@ private DeviceDefinition.Specialization parseDeviceDefinitionSpecialization(java return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DeviceDefinition.Specialization.class, jsonObject); } DeviceDefinition.Specialization.Builder builder = DeviceDefinition.Specialization.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.systemType(parseString("systemType", getJsonValue(jsonObject, "systemType", JsonString.class), jsonObject.get("_systemType"), -1)); builder.version(parseString("version", getJsonValue(jsonObject, "version", JsonString.class), jsonObject.get("_version"), -1)); @@ -6616,10 +6795,11 @@ private DeviceDefinition.UdiDeviceIdentifier parseDeviceDefinitionUdiDeviceIdent return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DeviceDefinition.UdiDeviceIdentifier.class, jsonObject); } DeviceDefinition.UdiDeviceIdentifier.Builder builder = DeviceDefinition.UdiDeviceIdentifier.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.deviceIdentifier(parseString("deviceIdentifier", getJsonValue(jsonObject, "deviceIdentifier", JsonString.class), jsonObject.get("_deviceIdentifier"), -1)); builder.issuer(parseUri("issuer", getJsonValue(jsonObject, "issuer", JsonString.class), jsonObject.get("_issuer"), -1)); @@ -6633,10 +6813,11 @@ private DeviceMetric parseDeviceMetric(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DeviceMetric.class, jsonObject); } DeviceMetric.Builder builder = DeviceMetric.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -6667,10 +6848,11 @@ private DeviceMetric.Calibration parseDeviceMetricCalibration(java.lang.String e return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DeviceMetric.Calibration.class, jsonObject); } DeviceMetric.Calibration.Builder builder = DeviceMetric.Calibration.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((DeviceMetricCalibrationType) parseString(DeviceMetricCalibrationType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.state((DeviceMetricCalibrationState) parseString(DeviceMetricCalibrationState.builder(), "state", getJsonValue(jsonObject, "state", JsonString.class), jsonObject.get("_state"), -1)); @@ -6684,10 +6866,11 @@ private DeviceRequest parseDeviceRequest(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DeviceRequest.class, jsonObject); } DeviceRequest.Builder builder = DeviceRequest.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -6784,10 +6967,11 @@ private DeviceRequest.Parameter parseDeviceRequestParameter(java.lang.String ele return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DeviceRequest.Parameter.class, jsonObject); } DeviceRequest.Parameter.Builder builder = DeviceRequest.Parameter.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.value(parseChoiceElement("value", jsonObject, CodeableConcept.class, Quantity.class, Range.class, Boolean.class)); @@ -6800,10 +6984,11 @@ private DeviceUseStatement parseDeviceUseStatement(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DeviceUseStatement.class, jsonObject); } DeviceUseStatement.Builder builder = DeviceUseStatement.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -6857,10 +7042,11 @@ private DiagnosticReport parseDiagnosticReport(java.lang.String elementName, Jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DiagnosticReport.class, jsonObject); } DiagnosticReport.Builder builder = DiagnosticReport.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -6944,10 +7130,11 @@ private DiagnosticReport.Media parseDiagnosticReportMedia(java.lang.String eleme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DiagnosticReport.Media.class, jsonObject); } DiagnosticReport.Media.Builder builder = DiagnosticReport.Media.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.comment(parseString("comment", getJsonValue(jsonObject, "comment", JsonString.class), jsonObject.get("_comment"), -1)); builder.link(parseReference("link", getJsonValue(jsonObject, "link", JsonObject.class), -1)); @@ -6960,10 +7147,11 @@ private DocumentManifest parseDocumentManifest(java.lang.String elementName, Jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DocumentManifest.class, jsonObject); } DocumentManifest.Builder builder = DocumentManifest.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.masterIdentifier(parseIdentifier("masterIdentifier", getJsonValue(jsonObject, "masterIdentifier", JsonObject.class), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -7011,10 +7199,11 @@ private DocumentManifest.Related parseDocumentManifestRelated(java.lang.String e return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DocumentManifest.Related.class, jsonObject); } DocumentManifest.Related.Builder builder = DocumentManifest.Related.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.ref(parseReference("ref", getJsonValue(jsonObject, "ref", JsonObject.class), -1)); @@ -7027,10 +7216,11 @@ private DocumentReference parseDocumentReference(java.lang.String elementName, J return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DocumentReference.class, jsonObject); } DocumentReference.Builder builder = DocumentReference.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.masterIdentifier(parseIdentifier("masterIdentifier", getJsonValue(jsonObject, "masterIdentifier", JsonObject.class), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -7087,10 +7277,11 @@ private DocumentReference.Content parseDocumentReferenceContent(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DocumentReference.Content.class, jsonObject); } DocumentReference.Content.Builder builder = DocumentReference.Content.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.attachment(parseAttachment("attachment", getJsonValue(jsonObject, "attachment", JsonObject.class), -1)); builder.format(parseCoding("format", getJsonValue(jsonObject, "format", JsonObject.class), -1)); @@ -7103,10 +7294,11 @@ private DocumentReference.Context parseDocumentReferenceContext(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DocumentReference.Context.class, jsonObject); } DocumentReference.Context.Builder builder = DocumentReference.Context.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray encounterArray = getJsonArray(jsonObject, "encounter"); if (encounterArray != null) { @@ -7139,10 +7331,11 @@ private DocumentReference.RelatesTo parseDocumentReferenceRelatesTo(java.lang.St return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(DocumentReference.RelatesTo.class, jsonObject); } DocumentReference.RelatesTo.Builder builder = DocumentReference.RelatesTo.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((DocumentRelationshipType) parseString(DocumentRelationshipType.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.target(parseReference("target", getJsonValue(jsonObject, "target", JsonObject.class), -1)); @@ -7151,6 +7344,7 @@ private DocumentReference.RelatesTo parseDocumentReferenceRelatesTo(java.lang.St } private void parseDomainResource(DomainResource.Builder builder, JsonObject jsonObject) { + builder.setValidating(validating); parseResource(builder, jsonObject); builder.text(parseNarrative("text", getJsonValue(jsonObject, "text", JsonObject.class), -1)); JsonArray containedArray = getJsonArray(jsonObject, "contained"); @@ -7178,10 +7372,11 @@ private Dosage parseDosage(java.lang.String elementName, JsonObject jsonObject, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Dosage.class, jsonObject); } Dosage.Builder builder = Dosage.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence(parseInteger("sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.text(parseString("text", getJsonValue(jsonObject, "text", JsonString.class), jsonObject.get("_text"), -1)); @@ -7215,10 +7410,11 @@ private Dosage.DoseAndRate parseDosageDoseAndRate(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Dosage.DoseAndRate.class, jsonObject); } Dosage.DoseAndRate.Builder builder = Dosage.DoseAndRate.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.dose(parseChoiceElement("dose", jsonObject, Range.class, SimpleQuantity.class)); @@ -7232,10 +7428,11 @@ private EffectEvidenceSynthesis parseEffectEvidenceSynthesis(java.lang.String el return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EffectEvidenceSynthesis.class, jsonObject); } EffectEvidenceSynthesis.Builder builder = EffectEvidenceSynthesis.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -7349,10 +7546,11 @@ private EffectEvidenceSynthesis.Certainty parseEffectEvidenceSynthesisCertainty( return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EffectEvidenceSynthesis.Certainty.class, jsonObject); } EffectEvidenceSynthesis.Certainty.Builder builder = EffectEvidenceSynthesis.Certainty.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray ratingArray = getJsonArray(jsonObject, "rating"); if (ratingArray != null) { @@ -7381,10 +7579,11 @@ private EffectEvidenceSynthesis.Certainty.CertaintySubcomponent parseEffectEvide return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EffectEvidenceSynthesis.Certainty.CertaintySubcomponent.class, jsonObject); } EffectEvidenceSynthesis.Certainty.CertaintySubcomponent.Builder builder = EffectEvidenceSynthesis.Certainty.CertaintySubcomponent.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); JsonArray ratingArray = getJsonArray(jsonObject, "rating"); @@ -7408,10 +7607,11 @@ private EffectEvidenceSynthesis.EffectEstimate parseEffectEvidenceSynthesisEffec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EffectEvidenceSynthesis.EffectEstimate.class, jsonObject); } EffectEvidenceSynthesis.EffectEstimate.Builder builder = EffectEvidenceSynthesis.EffectEstimate.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -7433,10 +7633,11 @@ private EffectEvidenceSynthesis.EffectEstimate.PrecisionEstimate parseEffectEvid return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EffectEvidenceSynthesis.EffectEstimate.PrecisionEstimate.class, jsonObject); } EffectEvidenceSynthesis.EffectEstimate.PrecisionEstimate.Builder builder = EffectEvidenceSynthesis.EffectEstimate.PrecisionEstimate.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.level(parseDecimal("level", getJsonValue(jsonObject, "level", JsonNumber.class), jsonObject.get("_level"), -1)); @@ -7451,10 +7652,11 @@ private EffectEvidenceSynthesis.ResultsByExposure parseEffectEvidenceSynthesisRe return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EffectEvidenceSynthesis.ResultsByExposure.class, jsonObject); } EffectEvidenceSynthesis.ResultsByExposure.Builder builder = EffectEvidenceSynthesis.ResultsByExposure.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.exposureState((ExposureState) parseString(ExposureState.builder(), "exposureState", getJsonValue(jsonObject, "exposureState", JsonString.class), jsonObject.get("_exposureState"), -1)); @@ -7469,10 +7671,11 @@ private EffectEvidenceSynthesis.SampleSize parseEffectEvidenceSynthesisSampleSiz return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EffectEvidenceSynthesis.SampleSize.class, jsonObject); } EffectEvidenceSynthesis.SampleSize.Builder builder = EffectEvidenceSynthesis.SampleSize.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.numberOfStudies(parseInteger("numberOfStudies", getJsonValue(jsonObject, "numberOfStudies", JsonNumber.class), jsonObject.get("_numberOfStudies"), -1)); @@ -7482,6 +7685,7 @@ private EffectEvidenceSynthesis.SampleSize parseEffectEvidenceSynthesisSampleSiz } private void parseElement(Element.Builder builder, JsonObject jsonObject) { + builder.setValidating(validating); builder.id(parseJavaString("id", getJsonValue(jsonObject, "id", JsonString.class), -1)); JsonArray extensionArray = getJsonArray(jsonObject, "extension"); if (extensionArray != null) { @@ -7496,10 +7700,11 @@ private ElementDefinition parseElementDefinition(java.lang.String elementName, J return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ElementDefinition.class, jsonObject); } ElementDefinition.Builder builder = ElementDefinition.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.path(parseString("path", getJsonValue(jsonObject, "path", JsonString.class), jsonObject.get("_path"), -1)); JsonArray representationArray = getJsonArray(jsonObject, "representation", true); @@ -7587,10 +7792,11 @@ private ElementDefinition.Base parseElementDefinitionBase(java.lang.String eleme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ElementDefinition.Base.class, jsonObject); } ElementDefinition.Base.Builder builder = ElementDefinition.Base.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.path(parseString("path", getJsonValue(jsonObject, "path", JsonString.class), jsonObject.get("_path"), -1)); builder.min((UnsignedInt) parseInteger(UnsignedInt.builder(), "min", getJsonValue(jsonObject, "min", JsonNumber.class), jsonObject.get("_min"), -1)); @@ -7604,10 +7810,11 @@ private ElementDefinition.Binding parseElementDefinitionBinding(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ElementDefinition.Binding.class, jsonObject); } ElementDefinition.Binding.Builder builder = ElementDefinition.Binding.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.strength((BindingStrength) parseString(BindingStrength.builder(), "strength", getJsonValue(jsonObject, "strength", JsonString.class), jsonObject.get("_strength"), -1)); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -7621,10 +7828,11 @@ private ElementDefinition.Constraint parseElementDefinitionConstraint(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ElementDefinition.Constraint.class, jsonObject); } ElementDefinition.Constraint.Builder builder = ElementDefinition.Constraint.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.key((Id) parseString(Id.builder(), "key", getJsonValue(jsonObject, "key", JsonString.class), jsonObject.get("_key"), -1)); builder.requirements(parseString("requirements", getJsonValue(jsonObject, "requirements", JsonString.class), jsonObject.get("_requirements"), -1)); @@ -7642,10 +7850,11 @@ private ElementDefinition.Example parseElementDefinitionExample(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ElementDefinition.Example.class, jsonObject); } ElementDefinition.Example.Builder builder = ElementDefinition.Example.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.label(parseString("label", getJsonValue(jsonObject, "label", JsonString.class), jsonObject.get("_label"), -1)); builder.value(parseChoiceElement("value", jsonObject, Base64Binary.class, Boolean.class, Canonical.class, Code.class, Date.class, DateTime.class, Decimal.class, Id.class, Instant.class, Integer.class, Markdown.class, Oid.class, PositiveInt.class, String.class, Time.class, UnsignedInt.class, Uri.class, Url.class, Uuid.class, Address.class, Age.class, Annotation.class, Attachment.class, CodeableConcept.class, Coding.class, ContactPoint.class, Count.class, Distance.class, Duration.class, HumanName.class, Identifier.class, Money.class, Period.class, Quantity.class, Range.class, Ratio.class, Reference.class, SampledData.class, Signature.class, Timing.class, ContactDetail.class, Contributor.class, DataRequirement.class, Expression.class, ParameterDefinition.class, RelatedArtifact.class, TriggerDefinition.class, UsageContext.class, Dosage.class, Meta.class)); @@ -7658,10 +7867,11 @@ private ElementDefinition.Mapping parseElementDefinitionMapping(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ElementDefinition.Mapping.class, jsonObject); } ElementDefinition.Mapping.Builder builder = ElementDefinition.Mapping.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.identity((Id) parseString(Id.builder(), "identity", getJsonValue(jsonObject, "identity", JsonString.class), jsonObject.get("_identity"), -1)); builder.language((Code) parseString(Code.builder(), "language", getJsonValue(jsonObject, "language", JsonString.class), jsonObject.get("_language"), -1)); @@ -7676,10 +7886,11 @@ private ElementDefinition.Slicing parseElementDefinitionSlicing(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ElementDefinition.Slicing.class, jsonObject); } ElementDefinition.Slicing.Builder builder = ElementDefinition.Slicing.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray discriminatorArray = getJsonArray(jsonObject, "discriminator"); if (discriminatorArray != null) { @@ -7699,10 +7910,11 @@ private ElementDefinition.Slicing.Discriminator parseElementDefinitionSlicingDis return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ElementDefinition.Slicing.Discriminator.class, jsonObject); } ElementDefinition.Slicing.Discriminator.Builder builder = ElementDefinition.Slicing.Discriminator.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((DiscriminatorType) parseString(DiscriminatorType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.path(parseString("path", getJsonValue(jsonObject, "path", JsonString.class), jsonObject.get("_path"), -1)); @@ -7715,10 +7927,11 @@ private ElementDefinition.Type parseElementDefinitionType(java.lang.String eleme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ElementDefinition.Type.class, jsonObject); } ElementDefinition.Type.Builder builder = ElementDefinition.Type.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseUri("code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); JsonArray profileArray = getJsonArray(jsonObject, "profile", true); @@ -7752,10 +7965,11 @@ private Encounter parseEncounter(java.lang.String elementName, JsonObject jsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Encounter.class, jsonObject); } Encounter.Builder builder = Encounter.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -7854,10 +8068,11 @@ private Encounter.ClassHistory parseEncounterClassHistory(java.lang.String eleme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Encounter.ClassHistory.class, jsonObject); } Encounter.ClassHistory.Builder builder = Encounter.ClassHistory.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.clazz(parseCoding("class", getJsonValue(jsonObject, "class", JsonObject.class), -1)); builder.period(parsePeriod("period", getJsonValue(jsonObject, "period", JsonObject.class), -1)); @@ -7870,10 +8085,11 @@ private Encounter.Diagnosis parseEncounterDiagnosis(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Encounter.Diagnosis.class, jsonObject); } Encounter.Diagnosis.Builder builder = Encounter.Diagnosis.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.condition(parseReference("condition", getJsonValue(jsonObject, "condition", JsonObject.class), -1)); builder.use(parseCodeableConcept("use", getJsonValue(jsonObject, "use", JsonObject.class), -1)); @@ -7887,10 +8103,11 @@ private Encounter.Hospitalization parseEncounterHospitalization(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Encounter.Hospitalization.class, jsonObject); } Encounter.Hospitalization.Builder builder = Encounter.Hospitalization.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.preAdmissionIdentifier(parseIdentifier("preAdmissionIdentifier", getJsonValue(jsonObject, "preAdmissionIdentifier", JsonObject.class), -1)); builder.origin(parseReference("origin", getJsonValue(jsonObject, "origin", JsonObject.class), -1)); @@ -7925,10 +8142,11 @@ private Encounter.Location parseEncounterLocation(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Encounter.Location.class, jsonObject); } Encounter.Location.Builder builder = Encounter.Location.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.location(parseReference("location", getJsonValue(jsonObject, "location", JsonObject.class), -1)); builder.status((EncounterLocationStatus) parseString(EncounterLocationStatus.builder(), "status", getJsonValue(jsonObject, "status", JsonString.class), jsonObject.get("_status"), -1)); @@ -7943,10 +8161,11 @@ private Encounter.Participant parseEncounterParticipant(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Encounter.Participant.class, jsonObject); } Encounter.Participant.Builder builder = Encounter.Participant.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray typeArray = getJsonArray(jsonObject, "type"); if (typeArray != null) { @@ -7965,10 +8184,11 @@ private Encounter.StatusHistory parseEncounterStatusHistory(java.lang.String ele return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Encounter.StatusHistory.class, jsonObject); } Encounter.StatusHistory.Builder builder = Encounter.StatusHistory.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.status((EncounterStatus) parseString(EncounterStatus.builder(), "status", getJsonValue(jsonObject, "status", JsonString.class), jsonObject.get("_status"), -1)); builder.period(parsePeriod("period", getJsonValue(jsonObject, "period", JsonObject.class), -1)); @@ -7981,10 +8201,11 @@ private Endpoint parseEndpoint(java.lang.String elementName, JsonObject jsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Endpoint.class, jsonObject); } Endpoint.Builder builder = Endpoint.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -8033,10 +8254,11 @@ private EnrollmentRequest parseEnrollmentRequest(java.lang.String elementName, J return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EnrollmentRequest.class, jsonObject); } EnrollmentRequest.Builder builder = EnrollmentRequest.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -8059,10 +8281,11 @@ private EnrollmentResponse parseEnrollmentResponse(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EnrollmentResponse.class, jsonObject); } EnrollmentResponse.Builder builder = EnrollmentResponse.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -8086,10 +8309,11 @@ private EpisodeOfCare parseEpisodeOfCare(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EpisodeOfCare.class, jsonObject); } EpisodeOfCare.Builder builder = EpisodeOfCare.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -8147,10 +8371,11 @@ private EpisodeOfCare.Diagnosis parseEpisodeOfCareDiagnosis(java.lang.String ele return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EpisodeOfCare.Diagnosis.class, jsonObject); } EpisodeOfCare.Diagnosis.Builder builder = EpisodeOfCare.Diagnosis.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.condition(parseReference("condition", getJsonValue(jsonObject, "condition", JsonObject.class), -1)); builder.role(parseCodeableConcept("role", getJsonValue(jsonObject, "role", JsonObject.class), -1)); @@ -8164,10 +8389,11 @@ private EpisodeOfCare.StatusHistory parseEpisodeOfCareStatusHistory(java.lang.St return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EpisodeOfCare.StatusHistory.class, jsonObject); } EpisodeOfCare.StatusHistory.Builder builder = EpisodeOfCare.StatusHistory.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.status((EpisodeOfCareStatus) parseString(EpisodeOfCareStatus.builder(), "status", getJsonValue(jsonObject, "status", JsonString.class), jsonObject.get("_status"), -1)); builder.period(parsePeriod("period", getJsonValue(jsonObject, "period", JsonObject.class), -1)); @@ -8180,10 +8406,11 @@ private EventDefinition parseEventDefinition(java.lang.String elementName, JsonO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EventDefinition.class, jsonObject); } EventDefinition.Builder builder = EventDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -8277,10 +8504,11 @@ private Evidence parseEvidence(java.lang.String elementName, JsonObject jsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Evidence.class, jsonObject); } Evidence.Builder builder = Evidence.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -8384,10 +8612,11 @@ private EvidenceVariable parseEvidenceVariable(java.lang.String elementName, Jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EvidenceVariable.class, jsonObject); } EvidenceVariable.Builder builder = EvidenceVariable.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -8485,10 +8714,11 @@ private EvidenceVariable.Characteristic parseEvidenceVariableCharacteristic(java return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(EvidenceVariable.Characteristic.class, jsonObject); } EvidenceVariable.Characteristic.Builder builder = EvidenceVariable.Characteristic.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.definition(parseChoiceElement("definition", jsonObject, Reference.class, Canonical.class, CodeableConcept.class, Expression.class, DataRequirement.class, TriggerDefinition.class)); @@ -8511,10 +8741,11 @@ private ExampleScenario parseExampleScenario(java.lang.String elementName, JsonO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExampleScenario.class, jsonObject); } ExampleScenario.Builder builder = ExampleScenario.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -8583,10 +8814,11 @@ private ExampleScenario.Actor parseExampleScenarioActor(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExampleScenario.Actor.class, jsonObject); } ExampleScenario.Actor.Builder builder = ExampleScenario.Actor.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.actorId(parseString("actorId", getJsonValue(jsonObject, "actorId", JsonString.class), jsonObject.get("_actorId"), -1)); builder.type((ExampleScenarioActorType) parseString(ExampleScenarioActorType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); @@ -8601,10 +8833,11 @@ private ExampleScenario.Instance parseExampleScenarioInstance(java.lang.String e return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExampleScenario.Instance.class, jsonObject); } ExampleScenario.Instance.Builder builder = ExampleScenario.Instance.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.resourceId(parseString("resourceId", getJsonValue(jsonObject, "resourceId", JsonString.class), jsonObject.get("_resourceId"), -1)); builder.resourceType((FHIRResourceType) parseString(FHIRResourceType.builder(), "resourceType", getJsonValue(jsonObject, "resourceType", JsonString.class), jsonObject.get("_resourceType"), -1)); @@ -8631,10 +8864,11 @@ private ExampleScenario.Instance.ContainedInstance parseExampleScenarioInstanceC return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExampleScenario.Instance.ContainedInstance.class, jsonObject); } ExampleScenario.Instance.ContainedInstance.Builder builder = ExampleScenario.Instance.ContainedInstance.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.resourceId(parseString("resourceId", getJsonValue(jsonObject, "resourceId", JsonString.class), jsonObject.get("_resourceId"), -1)); builder.versionId(parseString("versionId", getJsonValue(jsonObject, "versionId", JsonString.class), jsonObject.get("_versionId"), -1)); @@ -8647,10 +8881,11 @@ private ExampleScenario.Instance.Version parseExampleScenarioInstanceVersion(jav return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExampleScenario.Instance.Version.class, jsonObject); } ExampleScenario.Instance.Version.Builder builder = ExampleScenario.Instance.Version.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.versionId(parseString("versionId", getJsonValue(jsonObject, "versionId", JsonString.class), jsonObject.get("_versionId"), -1)); builder.description((Markdown) parseString(Markdown.builder(), "description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -8663,10 +8898,11 @@ private ExampleScenario.Process parseExampleScenarioProcess(java.lang.String ele return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExampleScenario.Process.class, jsonObject); } ExampleScenario.Process.Builder builder = ExampleScenario.Process.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.title(parseString("title", getJsonValue(jsonObject, "title", JsonString.class), jsonObject.get("_title"), -1)); builder.description((Markdown) parseString(Markdown.builder(), "description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -8687,10 +8923,11 @@ private ExampleScenario.Process.Step parseExampleScenarioProcessStep(java.lang.S return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExampleScenario.Process.Step.class, jsonObject); } ExampleScenario.Process.Step.Builder builder = ExampleScenario.Process.Step.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray processArray = getJsonArray(jsonObject, "process"); if (processArray != null) { @@ -8715,10 +8952,11 @@ private ExampleScenario.Process.Step.Alternative parseExampleScenarioProcessStep return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExampleScenario.Process.Step.Alternative.class, jsonObject); } ExampleScenario.Process.Step.Alternative.Builder builder = ExampleScenario.Process.Step.Alternative.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.title(parseString("title", getJsonValue(jsonObject, "title", JsonString.class), jsonObject.get("_title"), -1)); builder.description((Markdown) parseString(Markdown.builder(), "description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -8737,10 +8975,11 @@ private ExampleScenario.Process.Step.Operation parseExampleScenarioProcessStepOp return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExampleScenario.Process.Step.Operation.class, jsonObject); } ExampleScenario.Process.Step.Operation.Builder builder = ExampleScenario.Process.Step.Operation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.number(parseString("number", getJsonValue(jsonObject, "number", JsonString.class), jsonObject.get("_number"), -1)); builder.type(parseString("type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); @@ -8761,10 +9000,11 @@ private ExplanationOfBenefit parseExplanationOfBenefit(java.lang.String elementN return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.class, jsonObject); } ExplanationOfBenefit.Builder builder = ExplanationOfBenefit.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -8894,10 +9134,11 @@ private ExplanationOfBenefit.Accident parseExplanationOfBenefitAccident(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.Accident.class, jsonObject); } ExplanationOfBenefit.Accident.Builder builder = ExplanationOfBenefit.Accident.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.date(parseDate("date", getJsonValue(jsonObject, "date", JsonString.class), jsonObject.get("_date"), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -8911,10 +9152,11 @@ private ExplanationOfBenefit.AddItem parseExplanationOfBenefitAddItem(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.AddItem.class, jsonObject); } ExplanationOfBenefit.AddItem.Builder builder = ExplanationOfBenefit.AddItem.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray itemSequenceArray = getJsonArray(jsonObject, "itemSequence", true); if (itemSequenceArray != null) { @@ -8997,10 +9239,11 @@ private ExplanationOfBenefit.AddItem.Detail parseExplanationOfBenefitAddItemDeta return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.AddItem.Detail.class, jsonObject); } ExplanationOfBenefit.AddItem.Detail.Builder builder = ExplanationOfBenefit.AddItem.Detail.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.productOrService(parseCodeableConcept("productOrService", getJsonValue(jsonObject, "productOrService", JsonObject.class), -1)); JsonArray modifierArray = getJsonArray(jsonObject, "modifier"); @@ -9041,10 +9284,11 @@ private ExplanationOfBenefit.AddItem.Detail.SubDetail parseExplanationOfBenefitA return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.AddItem.Detail.SubDetail.class, jsonObject); } ExplanationOfBenefit.AddItem.Detail.SubDetail.Builder builder = ExplanationOfBenefit.AddItem.Detail.SubDetail.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.productOrService(parseCodeableConcept("productOrService", getJsonValue(jsonObject, "productOrService", JsonObject.class), -1)); JsonArray modifierArray = getJsonArray(jsonObject, "modifier"); @@ -9079,10 +9323,11 @@ private ExplanationOfBenefit.BenefitBalance parseExplanationOfBenefitBenefitBala return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.BenefitBalance.class, jsonObject); } ExplanationOfBenefit.BenefitBalance.Builder builder = ExplanationOfBenefit.BenefitBalance.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.category(parseCodeableConcept("category", getJsonValue(jsonObject, "category", JsonObject.class), -1)); builder.excluded(parseBoolean("excluded", getJsonValue(jsonObject, "excluded", JsonValue.class), jsonObject.get("_excluded"), -1)); @@ -9106,10 +9351,11 @@ private ExplanationOfBenefit.BenefitBalance.Financial parseExplanationOfBenefitB return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.BenefitBalance.Financial.class, jsonObject); } ExplanationOfBenefit.BenefitBalance.Financial.Builder builder = ExplanationOfBenefit.BenefitBalance.Financial.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.allowed(parseChoiceElement("allowed", jsonObject, UnsignedInt.class, String.class, Money.class)); @@ -9123,10 +9369,11 @@ private ExplanationOfBenefit.CareTeam parseExplanationOfBenefitCareTeam(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.CareTeam.class, jsonObject); } ExplanationOfBenefit.CareTeam.Builder builder = ExplanationOfBenefit.CareTeam.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.provider(parseReference("provider", getJsonValue(jsonObject, "provider", JsonObject.class), -1)); @@ -9142,10 +9389,11 @@ private ExplanationOfBenefit.Diagnosis parseExplanationOfBenefitDiagnosis(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.Diagnosis.class, jsonObject); } ExplanationOfBenefit.Diagnosis.Builder builder = ExplanationOfBenefit.Diagnosis.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.diagnosis(parseChoiceElement("diagnosis", jsonObject, CodeableConcept.class, Reference.class)); @@ -9166,10 +9414,11 @@ private ExplanationOfBenefit.Insurance parseExplanationOfBenefitInsurance(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.Insurance.class, jsonObject); } ExplanationOfBenefit.Insurance.Builder builder = ExplanationOfBenefit.Insurance.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.focal(parseBoolean("focal", getJsonValue(jsonObject, "focal", JsonValue.class), jsonObject.get("_focal"), -1)); builder.coverage(parseReference("coverage", getJsonValue(jsonObject, "coverage", JsonObject.class), -1)); @@ -9189,10 +9438,11 @@ private ExplanationOfBenefit.Item parseExplanationOfBenefitItem(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.Item.class, jsonObject); } ExplanationOfBenefit.Item.Builder builder = ExplanationOfBenefit.Item.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); JsonArray careTeamSequenceArray = getJsonArray(jsonObject, "careTeamSequence", true); @@ -9291,10 +9541,11 @@ private ExplanationOfBenefit.Item.Adjudication parseExplanationOfBenefitItemAdju return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.Item.Adjudication.class, jsonObject); } ExplanationOfBenefit.Item.Adjudication.Builder builder = ExplanationOfBenefit.Item.Adjudication.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.category(parseCodeableConcept("category", getJsonValue(jsonObject, "category", JsonObject.class), -1)); builder.reason(parseCodeableConcept("reason", getJsonValue(jsonObject, "reason", JsonObject.class), -1)); @@ -9309,10 +9560,11 @@ private ExplanationOfBenefit.Item.Detail parseExplanationOfBenefitItemDetail(jav return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.Item.Detail.class, jsonObject); } ExplanationOfBenefit.Item.Detail.Builder builder = ExplanationOfBenefit.Item.Detail.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.revenue(parseCodeableConcept("revenue", getJsonValue(jsonObject, "revenue", JsonObject.class), -1)); @@ -9368,10 +9620,11 @@ private ExplanationOfBenefit.Item.Detail.SubDetail parseExplanationOfBenefitItem return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.Item.Detail.SubDetail.class, jsonObject); } ExplanationOfBenefit.Item.Detail.SubDetail.Builder builder = ExplanationOfBenefit.Item.Detail.SubDetail.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.revenue(parseCodeableConcept("revenue", getJsonValue(jsonObject, "revenue", JsonObject.class), -1)); @@ -9421,10 +9674,11 @@ private ExplanationOfBenefit.Payee parseExplanationOfBenefitPayee(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.Payee.class, jsonObject); } ExplanationOfBenefit.Payee.Builder builder = ExplanationOfBenefit.Payee.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.party(parseReference("party", getJsonValue(jsonObject, "party", JsonObject.class), -1)); @@ -9437,10 +9691,11 @@ private ExplanationOfBenefit.Payment parseExplanationOfBenefitPayment(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.Payment.class, jsonObject); } ExplanationOfBenefit.Payment.Builder builder = ExplanationOfBenefit.Payment.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.adjustment(parseMoney("adjustment", getJsonValue(jsonObject, "adjustment", JsonObject.class), -1)); @@ -9457,10 +9712,11 @@ private ExplanationOfBenefit.Procedure parseExplanationOfBenefitProcedure(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.Procedure.class, jsonObject); } ExplanationOfBenefit.Procedure.Builder builder = ExplanationOfBenefit.Procedure.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); JsonArray typeArray = getJsonArray(jsonObject, "type"); @@ -9486,10 +9742,11 @@ private ExplanationOfBenefit.ProcessNote parseExplanationOfBenefitProcessNote(ja return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.ProcessNote.class, jsonObject); } ExplanationOfBenefit.ProcessNote.Builder builder = ExplanationOfBenefit.ProcessNote.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.number((PositiveInt) parseInteger(PositiveInt.builder(), "number", getJsonValue(jsonObject, "number", JsonNumber.class), jsonObject.get("_number"), -1)); builder.type((NoteType) parseString(NoteType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); @@ -9504,10 +9761,11 @@ private ExplanationOfBenefit.Related parseExplanationOfBenefitRelated(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.Related.class, jsonObject); } ExplanationOfBenefit.Related.Builder builder = ExplanationOfBenefit.Related.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.claim(parseReference("claim", getJsonValue(jsonObject, "claim", JsonObject.class), -1)); builder.relationship(parseCodeableConcept("relationship", getJsonValue(jsonObject, "relationship", JsonObject.class), -1)); @@ -9521,10 +9779,11 @@ private ExplanationOfBenefit.SupportingInfo parseExplanationOfBenefitSupportingI return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.SupportingInfo.class, jsonObject); } ExplanationOfBenefit.SupportingInfo.Builder builder = ExplanationOfBenefit.SupportingInfo.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.category(parseCodeableConcept("category", getJsonValue(jsonObject, "category", JsonObject.class), -1)); @@ -9541,10 +9800,11 @@ private ExplanationOfBenefit.Total parseExplanationOfBenefitTotal(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ExplanationOfBenefit.Total.class, jsonObject); } ExplanationOfBenefit.Total.Builder builder = ExplanationOfBenefit.Total.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.category(parseCodeableConcept("category", getJsonValue(jsonObject, "category", JsonObject.class), -1)); builder.amount(parseMoney("amount", getJsonValue(jsonObject, "amount", JsonObject.class), -1)); @@ -9557,10 +9817,11 @@ private Expression parseExpression(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Expression.class, jsonObject); } Expression.Builder builder = Expression.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.name((Id) parseString(Id.builder(), "name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); @@ -9576,10 +9837,11 @@ private Extension parseExtension(java.lang.String elementName, JsonObject jsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Extension.class, jsonObject); } Extension.Builder builder = Extension.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.url(parseJavaString("url", getJsonValue(jsonObject, "url", JsonString.class), -1)); builder.value(parseChoiceElement("value", jsonObject, Base64Binary.class, Boolean.class, Canonical.class, Code.class, Date.class, DateTime.class, Decimal.class, Id.class, Instant.class, Integer.class, Markdown.class, Oid.class, PositiveInt.class, String.class, Time.class, UnsignedInt.class, Uri.class, Url.class, Uuid.class, Address.class, Age.class, Annotation.class, Attachment.class, CodeableConcept.class, Coding.class, ContactPoint.class, Count.class, Distance.class, Duration.class, HumanName.class, Identifier.class, Money.class, Period.class, Quantity.class, Range.class, Ratio.class, Reference.class, SampledData.class, Signature.class, Timing.class, ContactDetail.class, Contributor.class, DataRequirement.class, Expression.class, ParameterDefinition.class, RelatedArtifact.class, TriggerDefinition.class, UsageContext.class, Dosage.class, Meta.class)); @@ -9592,10 +9854,11 @@ private FamilyMemberHistory parseFamilyMemberHistory(java.lang.String elementNam return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(FamilyMemberHistory.class, jsonObject); } FamilyMemberHistory.Builder builder = FamilyMemberHistory.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -9661,10 +9924,11 @@ private FamilyMemberHistory.Condition parseFamilyMemberHistoryCondition(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(FamilyMemberHistory.Condition.class, jsonObject); } FamilyMemberHistory.Condition.Builder builder = FamilyMemberHistory.Condition.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.outcome(parseCodeableConcept("outcome", getJsonValue(jsonObject, "outcome", JsonObject.class), -1)); @@ -9685,10 +9949,11 @@ private Flag parseFlag(java.lang.String elementName, JsonObject jsonObject, int return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Flag.class, jsonObject); } Flag.Builder builder = Flag.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -9717,10 +9982,11 @@ private Goal parseGoal(java.lang.String elementName, JsonObject jsonObject, int return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Goal.class, jsonObject); } Goal.Builder builder = Goal.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -9782,10 +10048,11 @@ private Goal.Target parseGoalTarget(java.lang.String elementName, JsonObject jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Goal.Target.class, jsonObject); } Goal.Target.Builder builder = Goal.Target.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.measure(parseCodeableConcept("measure", getJsonValue(jsonObject, "measure", JsonObject.class), -1)); builder.detail(parseChoiceElement("detail", jsonObject, Quantity.class, Range.class, CodeableConcept.class, String.class, Boolean.class, Integer.class, Ratio.class)); @@ -9799,10 +10066,11 @@ private GraphDefinition parseGraphDefinition(java.lang.String elementName, JsonO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(GraphDefinition.class, jsonObject); } GraphDefinition.Builder builder = GraphDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); builder.version(parseString("version", getJsonValue(jsonObject, "version", JsonString.class), jsonObject.get("_version"), -1)); @@ -9848,10 +10116,11 @@ private GraphDefinition.Link parseGraphDefinitionLink(java.lang.String elementNa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(GraphDefinition.Link.class, jsonObject); } GraphDefinition.Link.Builder builder = GraphDefinition.Link.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.path(parseString("path", getJsonValue(jsonObject, "path", JsonString.class), jsonObject.get("_path"), -1)); builder.sliceName(parseString("sliceName", getJsonValue(jsonObject, "sliceName", JsonString.class), jsonObject.get("_sliceName"), -1)); @@ -9873,10 +10142,11 @@ private GraphDefinition.Link.Target parseGraphDefinitionLinkTarget(java.lang.Str return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(GraphDefinition.Link.Target.class, jsonObject); } GraphDefinition.Link.Target.Builder builder = GraphDefinition.Link.Target.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((ResourceType) parseString(ResourceType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.params(parseString("params", getJsonValue(jsonObject, "params", JsonString.class), jsonObject.get("_params"), -1)); @@ -9902,10 +10172,11 @@ private GraphDefinition.Link.Target.Compartment parseGraphDefinitionLinkTargetCo return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(GraphDefinition.Link.Target.Compartment.class, jsonObject); } GraphDefinition.Link.Target.Compartment.Builder builder = GraphDefinition.Link.Target.Compartment.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.use((GraphCompartmentUse) parseString(GraphCompartmentUse.builder(), "use", getJsonValue(jsonObject, "use", JsonString.class), jsonObject.get("_use"), -1)); builder.code((CompartmentCode) parseString(CompartmentCode.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); @@ -9921,10 +10192,11 @@ private Group parseGroup(java.lang.String elementName, JsonObject jsonObject, in return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Group.class, jsonObject); } Group.Builder builder = Group.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -9960,10 +10232,11 @@ private Group.Characteristic parseGroupCharacteristic(java.lang.String elementNa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Group.Characteristic.class, jsonObject); } Group.Characteristic.Builder builder = Group.Characteristic.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.value(parseChoiceElement("value", jsonObject, CodeableConcept.class, Boolean.class, Quantity.class, Range.class, Reference.class)); @@ -9978,10 +10251,11 @@ private Group.Member parseGroupMember(java.lang.String elementName, JsonObject j return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Group.Member.class, jsonObject); } Group.Member.Builder builder = Group.Member.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.entity(parseReference("entity", getJsonValue(jsonObject, "entity", JsonObject.class), -1)); builder.period(parsePeriod("period", getJsonValue(jsonObject, "period", JsonObject.class), -1)); @@ -9995,10 +10269,11 @@ private GuidanceResponse parseGuidanceResponse(java.lang.String elementName, Jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(GuidanceResponse.class, jsonObject); } GuidanceResponse.Builder builder = GuidanceResponse.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.requestIdentifier(parseIdentifier("requestIdentifier", getJsonValue(jsonObject, "requestIdentifier", JsonObject.class), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -10054,10 +10329,11 @@ private HealthcareService parseHealthcareService(java.lang.String elementName, J return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(HealthcareService.class, jsonObject); } HealthcareService.Builder builder = HealthcareService.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -10172,10 +10448,11 @@ private HealthcareService.AvailableTime parseHealthcareServiceAvailableTime(java return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(HealthcareService.AvailableTime.class, jsonObject); } HealthcareService.AvailableTime.Builder builder = HealthcareService.AvailableTime.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray daysOfWeekArray = getJsonArray(jsonObject, "daysOfWeek", true); if (daysOfWeekArray != null) { @@ -10196,10 +10473,11 @@ private HealthcareService.Eligibility parseHealthcareServiceEligibility(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(HealthcareService.Eligibility.class, jsonObject); } HealthcareService.Eligibility.Builder builder = HealthcareService.Eligibility.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.comment((Markdown) parseString(Markdown.builder(), "comment", getJsonValue(jsonObject, "comment", JsonString.class), jsonObject.get("_comment"), -1)); @@ -10212,10 +10490,11 @@ private HealthcareService.NotAvailable parseHealthcareServiceNotAvailable(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(HealthcareService.NotAvailable.class, jsonObject); } HealthcareService.NotAvailable.Builder builder = HealthcareService.NotAvailable.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.during(parsePeriod("during", getJsonValue(jsonObject, "during", JsonObject.class), -1)); @@ -10228,10 +10507,11 @@ private HumanName parseHumanName(java.lang.String elementName, JsonObject jsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(HumanName.class, jsonObject); } HumanName.Builder builder = HumanName.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.use((NameUse) parseString(NameUse.builder(), "use", getJsonValue(jsonObject, "use", JsonString.class), jsonObject.get("_use"), -1)); builder.text(parseString("text", getJsonValue(jsonObject, "text", JsonString.class), jsonObject.get("_text"), -1)); @@ -10267,10 +10547,11 @@ private Identifier parseIdentifier(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Identifier.class, jsonObject); } Identifier.Builder builder = Identifier.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.use((IdentifierUse) parseString(IdentifierUse.builder(), "use", getJsonValue(jsonObject, "use", JsonString.class), jsonObject.get("_use"), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -10287,10 +10568,11 @@ private ImagingStudy parseImagingStudy(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImagingStudy.class, jsonObject); } ImagingStudy.Builder builder = ImagingStudy.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -10371,10 +10653,11 @@ private ImagingStudy.Series parseImagingStudySeries(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImagingStudy.Series.class, jsonObject); } ImagingStudy.Series.Builder builder = ImagingStudy.Series.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.uid((Id) parseString(Id.builder(), "uid", getJsonValue(jsonObject, "uid", JsonString.class), jsonObject.get("_uid"), -1)); builder.number((UnsignedInt) parseInteger(UnsignedInt.builder(), "number", getJsonValue(jsonObject, "number", JsonNumber.class), jsonObject.get("_number"), -1)); @@ -10417,10 +10700,11 @@ private ImagingStudy.Series.Instance parseImagingStudySeriesInstance(java.lang.S return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImagingStudy.Series.Instance.class, jsonObject); } ImagingStudy.Series.Instance.Builder builder = ImagingStudy.Series.Instance.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.uid((Id) parseString(Id.builder(), "uid", getJsonValue(jsonObject, "uid", JsonString.class), jsonObject.get("_uid"), -1)); builder.sopClass(parseCoding("sopClass", getJsonValue(jsonObject, "sopClass", JsonObject.class), -1)); @@ -10435,10 +10719,11 @@ private ImagingStudy.Series.Performer parseImagingStudySeriesPerformer(java.lang return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImagingStudy.Series.Performer.class, jsonObject); } ImagingStudy.Series.Performer.Builder builder = ImagingStudy.Series.Performer.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.function(parseCodeableConcept("function", getJsonValue(jsonObject, "function", JsonObject.class), -1)); builder.actor(parseReference("actor", getJsonValue(jsonObject, "actor", JsonObject.class), -1)); @@ -10451,10 +10736,11 @@ private Immunization parseImmunization(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Immunization.class, jsonObject); } Immunization.Builder builder = Immunization.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -10543,10 +10829,11 @@ private Immunization.Education parseImmunizationEducation(java.lang.String eleme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Immunization.Education.class, jsonObject); } Immunization.Education.Builder builder = Immunization.Education.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.documentType(parseString("documentType", getJsonValue(jsonObject, "documentType", JsonString.class), jsonObject.get("_documentType"), -1)); builder.reference(parseUri("reference", getJsonValue(jsonObject, "reference", JsonString.class), jsonObject.get("_reference"), -1)); @@ -10561,10 +10848,11 @@ private Immunization.Performer parseImmunizationPerformer(java.lang.String eleme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Immunization.Performer.class, jsonObject); } Immunization.Performer.Builder builder = Immunization.Performer.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.function(parseCodeableConcept("function", getJsonValue(jsonObject, "function", JsonObject.class), -1)); builder.actor(parseReference("actor", getJsonValue(jsonObject, "actor", JsonObject.class), -1)); @@ -10577,10 +10865,11 @@ private Immunization.ProtocolApplied parseImmunizationProtocolApplied(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Immunization.ProtocolApplied.class, jsonObject); } Immunization.ProtocolApplied.Builder builder = Immunization.ProtocolApplied.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.series(parseString("series", getJsonValue(jsonObject, "series", JsonString.class), jsonObject.get("_series"), -1)); builder.authority(parseReference("authority", getJsonValue(jsonObject, "authority", JsonObject.class), -1)); @@ -10601,10 +10890,11 @@ private Immunization.Reaction parseImmunizationReaction(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Immunization.Reaction.class, jsonObject); } Immunization.Reaction.Builder builder = Immunization.Reaction.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.date(parseDateTime("date", getJsonValue(jsonObject, "date", JsonString.class), jsonObject.get("_date"), -1)); builder.detail(parseReference("detail", getJsonValue(jsonObject, "detail", JsonObject.class), -1)); @@ -10618,10 +10908,11 @@ private ImmunizationEvaluation parseImmunizationEvaluation(java.lang.String elem return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImmunizationEvaluation.class, jsonObject); } ImmunizationEvaluation.Builder builder = ImmunizationEvaluation.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -10655,10 +10946,11 @@ private ImmunizationRecommendation parseImmunizationRecommendation(java.lang.Str return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImmunizationRecommendation.class, jsonObject); } ImmunizationRecommendation.Builder builder = ImmunizationRecommendation.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -10684,10 +10976,11 @@ private ImmunizationRecommendation.Recommendation parseImmunizationRecommendatio return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImmunizationRecommendation.Recommendation.class, jsonObject); } ImmunizationRecommendation.Recommendation.Builder builder = ImmunizationRecommendation.Recommendation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray vaccineCodeArray = getJsonArray(jsonObject, "vaccineCode"); if (vaccineCodeArray != null) { @@ -10740,10 +11033,11 @@ private ImmunizationRecommendation.Recommendation.DateCriterion parseImmunizatio return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImmunizationRecommendation.Recommendation.DateCriterion.class, jsonObject); } ImmunizationRecommendation.Recommendation.DateCriterion.Builder builder = ImmunizationRecommendation.Recommendation.DateCriterion.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.value(parseDateTime("value", getJsonValue(jsonObject, "value", JsonString.class), jsonObject.get("_value"), -1)); @@ -10756,10 +11050,11 @@ private ImplementationGuide parseImplementationGuide(java.lang.String elementNam return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImplementationGuide.class, jsonObject); } ImplementationGuide.Builder builder = ImplementationGuide.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); builder.version(parseString("version", getJsonValue(jsonObject, "version", JsonString.class), jsonObject.get("_version"), -1)); @@ -10821,10 +11116,11 @@ private ImplementationGuide.Definition parseImplementationGuideDefinition(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImplementationGuide.Definition.class, jsonObject); } ImplementationGuide.Definition.Builder builder = ImplementationGuide.Definition.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray groupingArray = getJsonArray(jsonObject, "grouping"); if (groupingArray != null) { @@ -10860,10 +11156,11 @@ private ImplementationGuide.Definition.Grouping parseImplementationGuideDefiniti return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImplementationGuide.Definition.Grouping.class, jsonObject); } ImplementationGuide.Definition.Grouping.Builder builder = ImplementationGuide.Definition.Grouping.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -10876,10 +11173,11 @@ private ImplementationGuide.Definition.Page parseImplementationGuideDefinitionPa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImplementationGuide.Definition.Page.class, jsonObject); } ImplementationGuide.Definition.Page.Builder builder = ImplementationGuide.Definition.Page.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseChoiceElement("name", jsonObject, Url.class, Reference.class)); builder.title(parseString("title", getJsonValue(jsonObject, "title", JsonString.class), jsonObject.get("_title"), -1)); @@ -10899,10 +11197,11 @@ private ImplementationGuide.Definition.Parameter parseImplementationGuideDefinit return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImplementationGuide.Definition.Parameter.class, jsonObject); } ImplementationGuide.Definition.Parameter.Builder builder = ImplementationGuide.Definition.Parameter.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((GuideParameterCode) parseString(GuideParameterCode.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.value(parseString("value", getJsonValue(jsonObject, "value", JsonString.class), jsonObject.get("_value"), -1)); @@ -10915,10 +11214,11 @@ private ImplementationGuide.Definition.Resource parseImplementationGuideDefiniti return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImplementationGuide.Definition.Resource.class, jsonObject); } ImplementationGuide.Definition.Resource.Builder builder = ImplementationGuide.Definition.Resource.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.reference(parseReference("reference", getJsonValue(jsonObject, "reference", JsonObject.class), -1)); JsonArray fhirVersionArray = getJsonArray(jsonObject, "fhirVersion", true); @@ -10941,10 +11241,11 @@ private ImplementationGuide.Definition.Template parseImplementationGuideDefiniti return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImplementationGuide.Definition.Template.class, jsonObject); } ImplementationGuide.Definition.Template.Builder builder = ImplementationGuide.Definition.Template.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((Code) parseString(Code.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.source(parseString("source", getJsonValue(jsonObject, "source", JsonString.class), jsonObject.get("_source"), -1)); @@ -10958,10 +11259,11 @@ private ImplementationGuide.DependsOn parseImplementationGuideDependsOn(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImplementationGuide.DependsOn.class, jsonObject); } ImplementationGuide.DependsOn.Builder builder = ImplementationGuide.DependsOn.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.uri((Canonical) parseUri(Canonical.builder(), "uri", getJsonValue(jsonObject, "uri", JsonString.class), jsonObject.get("_uri"), -1)); builder.packageId((Id) parseString(Id.builder(), "packageId", getJsonValue(jsonObject, "packageId", JsonString.class), jsonObject.get("_packageId"), -1)); @@ -10975,10 +11277,11 @@ private ImplementationGuide.Global parseImplementationGuideGlobal(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImplementationGuide.Global.class, jsonObject); } ImplementationGuide.Global.Builder builder = ImplementationGuide.Global.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((ResourceType) parseString(ResourceType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.profile((Canonical) parseUri(Canonical.builder(), "profile", getJsonValue(jsonObject, "profile", JsonString.class), jsonObject.get("_profile"), -1)); @@ -10991,10 +11294,11 @@ private ImplementationGuide.Manifest parseImplementationGuideManifest(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImplementationGuide.Manifest.class, jsonObject); } ImplementationGuide.Manifest.Builder builder = ImplementationGuide.Manifest.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.rendering((Url) parseUri(Url.builder(), "rendering", getJsonValue(jsonObject, "rendering", JsonString.class), jsonObject.get("_rendering"), -1)); JsonArray resourceArray = getJsonArray(jsonObject, "resource"); @@ -11032,10 +11336,11 @@ private ImplementationGuide.Manifest.Page parseImplementationGuideManifestPage(j return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImplementationGuide.Manifest.Page.class, jsonObject); } ImplementationGuide.Manifest.Page.Builder builder = ImplementationGuide.Manifest.Page.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.title(parseString("title", getJsonValue(jsonObject, "title", JsonString.class), jsonObject.get("_title"), -1)); @@ -11055,10 +11360,11 @@ private ImplementationGuide.Manifest.Resource parseImplementationGuideManifestRe return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ImplementationGuide.Manifest.Resource.class, jsonObject); } ImplementationGuide.Manifest.Resource.Builder builder = ImplementationGuide.Manifest.Resource.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.reference(parseReference("reference", getJsonValue(jsonObject, "reference", JsonObject.class), -1)); builder.example(parseChoiceElement("example", jsonObject, Boolean.class, Canonical.class)); @@ -11073,9 +11379,10 @@ private Instant parseInstant(java.lang.String elementName, JsonValue jsonValue, } stackPush(elementName, elementIndex); Instant.Builder builder = Instant.builder(); + builder.setValidating(validating); if (_jsonValue != null && _jsonValue.getValueType() == JsonValue.ValueType.OBJECT) { JsonObject jsonObject = (JsonObject) _jsonValue; - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Element.class, jsonObject); } parseElement(builder, jsonObject); @@ -11097,10 +11404,11 @@ private InsurancePlan parseInsurancePlan(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(InsurancePlan.class, jsonObject); } InsurancePlan.Builder builder = InsurancePlan.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -11171,10 +11479,11 @@ private InsurancePlan.Contact parseInsurancePlanContact(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(InsurancePlan.Contact.class, jsonObject); } InsurancePlan.Contact.Builder builder = InsurancePlan.Contact.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.purpose(parseCodeableConcept("purpose", getJsonValue(jsonObject, "purpose", JsonObject.class), -1)); builder.name(parseHumanName("name", getJsonValue(jsonObject, "name", JsonObject.class), -1)); @@ -11194,10 +11503,11 @@ private InsurancePlan.Coverage parseInsurancePlanCoverage(java.lang.String eleme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(InsurancePlan.Coverage.class, jsonObject); } InsurancePlan.Coverage.Builder builder = InsurancePlan.Coverage.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); JsonArray networkArray = getJsonArray(jsonObject, "network"); @@ -11221,10 +11531,11 @@ private InsurancePlan.Coverage.Benefit parseInsurancePlanCoverageBenefit(java.la return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(InsurancePlan.Coverage.Benefit.class, jsonObject); } InsurancePlan.Coverage.Benefit.Builder builder = InsurancePlan.Coverage.Benefit.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.requirement(parseString("requirement", getJsonValue(jsonObject, "requirement", JsonString.class), jsonObject.get("_requirement"), -1)); @@ -11243,10 +11554,11 @@ private InsurancePlan.Coverage.Benefit.Limit parseInsurancePlanCoverageBenefitLi return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(InsurancePlan.Coverage.Benefit.Limit.class, jsonObject); } InsurancePlan.Coverage.Benefit.Limit.Builder builder = InsurancePlan.Coverage.Benefit.Limit.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.value(parseQuantity("value", getJsonValue(jsonObject, "value", JsonObject.class), -1)); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); @@ -11259,10 +11571,11 @@ private InsurancePlan.Plan parseInsurancePlanPlan(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(InsurancePlan.Plan.class, jsonObject); } InsurancePlan.Plan.Builder builder = InsurancePlan.Plan.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -11304,10 +11617,11 @@ private InsurancePlan.Plan.GeneralCost parseInsurancePlanPlanGeneralCost(java.la return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(InsurancePlan.Plan.GeneralCost.class, jsonObject); } InsurancePlan.Plan.GeneralCost.Builder builder = InsurancePlan.Plan.GeneralCost.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.groupSize((PositiveInt) parseInteger(PositiveInt.builder(), "groupSize", getJsonValue(jsonObject, "groupSize", JsonNumber.class), jsonObject.get("_groupSize"), -1)); @@ -11322,10 +11636,11 @@ private InsurancePlan.Plan.SpecificCost parseInsurancePlanPlanSpecificCost(java. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(InsurancePlan.Plan.SpecificCost.class, jsonObject); } InsurancePlan.Plan.SpecificCost.Builder builder = InsurancePlan.Plan.SpecificCost.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.category(parseCodeableConcept("category", getJsonValue(jsonObject, "category", JsonObject.class), -1)); JsonArray benefitArray = getJsonArray(jsonObject, "benefit"); @@ -11343,10 +11658,11 @@ private InsurancePlan.Plan.SpecificCost.Benefit parseInsurancePlanPlanSpecificCo return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(InsurancePlan.Plan.SpecificCost.Benefit.class, jsonObject); } InsurancePlan.Plan.SpecificCost.Benefit.Builder builder = InsurancePlan.Plan.SpecificCost.Benefit.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); JsonArray costArray = getJsonArray(jsonObject, "cost"); @@ -11364,10 +11680,11 @@ private InsurancePlan.Plan.SpecificCost.Benefit.Cost parseInsurancePlanPlanSpeci return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(InsurancePlan.Plan.SpecificCost.Benefit.Cost.class, jsonObject); } InsurancePlan.Plan.SpecificCost.Benefit.Cost.Builder builder = InsurancePlan.Plan.SpecificCost.Benefit.Cost.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.applicability(parseCodeableConcept("applicability", getJsonValue(jsonObject, "applicability", JsonObject.class), -1)); @@ -11387,9 +11704,10 @@ private Integer parseInteger(Integer.Builder builder, java.lang.String elementNa return null; } stackPush(elementName, elementIndex); + builder.setValidating(validating); if (_jsonValue != null && _jsonValue.getValueType() == JsonValue.ValueType.OBJECT) { JsonObject jsonObject = (JsonObject) _jsonValue; - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Element.class, jsonObject); } parseElement(builder, jsonObject); @@ -11415,10 +11733,11 @@ private Invoice parseInvoice(java.lang.String elementName, JsonObject jsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Invoice.class, jsonObject); } Invoice.Builder builder = Invoice.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -11470,10 +11789,11 @@ private Invoice.LineItem parseInvoiceLineItem(java.lang.String elementName, Json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Invoice.LineItem.class, jsonObject); } Invoice.LineItem.Builder builder = Invoice.LineItem.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.sequence((PositiveInt) parseInteger(PositiveInt.builder(), "sequence", getJsonValue(jsonObject, "sequence", JsonNumber.class), jsonObject.get("_sequence"), -1)); builder.chargeItem(parseChoiceElement("chargeItem", jsonObject, Reference.class, CodeableConcept.class)); @@ -11492,10 +11812,11 @@ private Invoice.LineItem.PriceComponent parseInvoiceLineItemPriceComponent(java. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Invoice.LineItem.PriceComponent.class, jsonObject); } Invoice.LineItem.PriceComponent.Builder builder = Invoice.LineItem.PriceComponent.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((InvoicePriceComponentType) parseString(InvoicePriceComponentType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); @@ -11510,10 +11831,11 @@ private Invoice.Participant parseInvoiceParticipant(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Invoice.Participant.class, jsonObject); } Invoice.Participant.Builder builder = Invoice.Participant.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.role(parseCodeableConcept("role", getJsonValue(jsonObject, "role", JsonObject.class), -1)); builder.actor(parseReference("actor", getJsonValue(jsonObject, "actor", JsonObject.class), -1)); @@ -11526,10 +11848,11 @@ private Library parseLibrary(java.lang.String elementName, JsonObject jsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Library.class, jsonObject); } Library.Builder builder = Library.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -11636,10 +11959,11 @@ private Linkage parseLinkage(java.lang.String elementName, JsonObject jsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Linkage.class, jsonObject); } Linkage.Builder builder = Linkage.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.active(parseBoolean("active", getJsonValue(jsonObject, "active", JsonValue.class), jsonObject.get("_active"), -1)); builder.author(parseReference("author", getJsonValue(jsonObject, "author", JsonObject.class), -1)); @@ -11658,10 +11982,11 @@ private Linkage.Item parseLinkageItem(java.lang.String elementName, JsonObject j return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Linkage.Item.class, jsonObject); } Linkage.Item.Builder builder = Linkage.Item.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((LinkageType) parseString(LinkageType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.resource(parseReference("resource", getJsonValue(jsonObject, "resource", JsonObject.class), -1)); @@ -11674,10 +11999,11 @@ private List parseList(java.lang.String elementName, JsonObject jsonObject, int return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(List.class, jsonObject); } List.Builder builder = List.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -11716,10 +12042,11 @@ private List.Entry parseListEntry(java.lang.String elementName, JsonObject jsonO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(List.Entry.class, jsonObject); } List.Entry.Builder builder = List.Entry.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.flag(parseCodeableConcept("flag", getJsonValue(jsonObject, "flag", JsonObject.class), -1)); builder.deleted(parseBoolean("deleted", getJsonValue(jsonObject, "deleted", JsonValue.class), jsonObject.get("_deleted"), -1)); @@ -11734,10 +12061,11 @@ private Location parseLocation(java.lang.String elementName, JsonObject jsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Location.class, jsonObject); } Location.Builder builder = Location.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -11796,10 +12124,11 @@ private Location.HoursOfOperation parseLocationHoursOfOperation(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Location.HoursOfOperation.class, jsonObject); } Location.HoursOfOperation.Builder builder = Location.HoursOfOperation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray daysOfWeekArray = getJsonArray(jsonObject, "daysOfWeek", true); if (daysOfWeekArray != null) { @@ -11820,10 +12149,11 @@ private Location.Position parseLocationPosition(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Location.Position.class, jsonObject); } Location.Position.Builder builder = Location.Position.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.longitude(parseDecimal("longitude", getJsonValue(jsonObject, "longitude", JsonNumber.class), jsonObject.get("_longitude"), -1)); builder.latitude(parseDecimal("latitude", getJsonValue(jsonObject, "latitude", JsonNumber.class), jsonObject.get("_latitude"), -1)); @@ -11837,10 +12167,11 @@ private MarketingStatus parseMarketingStatus(java.lang.String elementName, JsonO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MarketingStatus.class, jsonObject); } MarketingStatus.Builder builder = MarketingStatus.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.country(parseCodeableConcept("country", getJsonValue(jsonObject, "country", JsonObject.class), -1)); builder.jurisdiction(parseCodeableConcept("jurisdiction", getJsonValue(jsonObject, "jurisdiction", JsonObject.class), -1)); @@ -11856,10 +12187,11 @@ private Measure parseMeasure(java.lang.String elementName, JsonObject jsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Measure.class, jsonObject); } Measure.Builder builder = Measure.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -11988,10 +12320,11 @@ private Measure.Group parseMeasureGroup(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Measure.Group.class, jsonObject); } Measure.Group.Builder builder = Measure.Group.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -12016,10 +12349,11 @@ private Measure.Group.Population parseMeasureGroupPopulation(java.lang.String el return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Measure.Group.Population.class, jsonObject); } Measure.Group.Population.Builder builder = Measure.Group.Population.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -12033,10 +12367,11 @@ private Measure.Group.Stratifier parseMeasureGroupStratifier(java.lang.String el return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Measure.Group.Stratifier.class, jsonObject); } Measure.Group.Stratifier.Builder builder = Measure.Group.Stratifier.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -12056,10 +12391,11 @@ private Measure.Group.Stratifier.Component parseMeasureGroupStratifierComponent( return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Measure.Group.Stratifier.Component.class, jsonObject); } Measure.Group.Stratifier.Component.Builder builder = Measure.Group.Stratifier.Component.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -12073,10 +12409,11 @@ private Measure.SupplementalData parseMeasureSupplementalData(java.lang.String e return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Measure.SupplementalData.class, jsonObject); } Measure.SupplementalData.Builder builder = Measure.SupplementalData.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); JsonArray usageArray = getJsonArray(jsonObject, "usage"); @@ -12096,10 +12433,11 @@ private MeasureReport parseMeasureReport(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MeasureReport.class, jsonObject); } MeasureReport.Builder builder = MeasureReport.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -12136,10 +12474,11 @@ private MeasureReport.Group parseMeasureReportGroup(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MeasureReport.Group.class, jsonObject); } MeasureReport.Group.Builder builder = MeasureReport.Group.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); JsonArray populationArray = getJsonArray(jsonObject, "population"); @@ -12164,10 +12503,11 @@ private MeasureReport.Group.Population parseMeasureReportGroupPopulation(java.la return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MeasureReport.Group.Population.class, jsonObject); } MeasureReport.Group.Population.Builder builder = MeasureReport.Group.Population.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.count(parseInteger("count", getJsonValue(jsonObject, "count", JsonNumber.class), jsonObject.get("_count"), -1)); @@ -12181,10 +12521,11 @@ private MeasureReport.Group.Stratifier parseMeasureReportGroupStratifier(java.la return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MeasureReport.Group.Stratifier.class, jsonObject); } MeasureReport.Group.Stratifier.Builder builder = MeasureReport.Group.Stratifier.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray codeArray = getJsonArray(jsonObject, "code"); if (codeArray != null) { @@ -12207,10 +12548,11 @@ private MeasureReport.Group.Stratifier.Stratum parseMeasureReportGroupStratifier return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MeasureReport.Group.Stratifier.Stratum.class, jsonObject); } MeasureReport.Group.Stratifier.Stratum.Builder builder = MeasureReport.Group.Stratifier.Stratum.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.value(parseCodeableConcept("value", getJsonValue(jsonObject, "value", JsonObject.class), -1)); JsonArray componentArray = getJsonArray(jsonObject, "component"); @@ -12235,10 +12577,11 @@ private MeasureReport.Group.Stratifier.Stratum.Component parseMeasureReportGroup return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MeasureReport.Group.Stratifier.Stratum.Component.class, jsonObject); } MeasureReport.Group.Stratifier.Stratum.Component.Builder builder = MeasureReport.Group.Stratifier.Stratum.Component.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.value(parseCodeableConcept("value", getJsonValue(jsonObject, "value", JsonObject.class), -1)); @@ -12251,10 +12594,11 @@ private MeasureReport.Group.Stratifier.Stratum.Population parseMeasureReportGrou return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MeasureReport.Group.Stratifier.Stratum.Population.class, jsonObject); } MeasureReport.Group.Stratifier.Stratum.Population.Builder builder = MeasureReport.Group.Stratifier.Stratum.Population.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.count(parseInteger("count", getJsonValue(jsonObject, "count", JsonNumber.class), jsonObject.get("_count"), -1)); @@ -12268,10 +12612,11 @@ private Media parseMedia(java.lang.String elementName, JsonObject jsonObject, in return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Media.class, jsonObject); } Media.Builder builder = Media.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -12329,10 +12674,11 @@ private Medication parseMedication(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Medication.class, jsonObject); } Medication.Builder builder = Medication.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -12361,10 +12707,11 @@ private Medication.Batch parseMedicationBatch(java.lang.String elementName, Json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Medication.Batch.class, jsonObject); } Medication.Batch.Builder builder = Medication.Batch.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.lotNumber(parseString("lotNumber", getJsonValue(jsonObject, "lotNumber", JsonString.class), jsonObject.get("_lotNumber"), -1)); builder.expirationDate(parseDateTime("expirationDate", getJsonValue(jsonObject, "expirationDate", JsonString.class), jsonObject.get("_expirationDate"), -1)); @@ -12377,10 +12724,11 @@ private Medication.Ingredient parseMedicationIngredient(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Medication.Ingredient.class, jsonObject); } Medication.Ingredient.Builder builder = Medication.Ingredient.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.item(parseChoiceElement("item", jsonObject, CodeableConcept.class, Reference.class)); builder.isActive(parseBoolean("isActive", getJsonValue(jsonObject, "isActive", JsonValue.class), jsonObject.get("_isActive"), -1)); @@ -12394,10 +12742,11 @@ private MedicationAdministration parseMedicationAdministration(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationAdministration.class, jsonObject); } MedicationAdministration.Builder builder = MedicationAdministration.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -12483,10 +12832,11 @@ private MedicationAdministration.Dosage parseMedicationAdministrationDosage(java return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationAdministration.Dosage.class, jsonObject); } MedicationAdministration.Dosage.Builder builder = MedicationAdministration.Dosage.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.text(parseString("text", getJsonValue(jsonObject, "text", JsonString.class), jsonObject.get("_text"), -1)); builder.site(parseCodeableConcept("site", getJsonValue(jsonObject, "site", JsonObject.class), -1)); @@ -12503,10 +12853,11 @@ private MedicationAdministration.Performer parseMedicationAdministrationPerforme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationAdministration.Performer.class, jsonObject); } MedicationAdministration.Performer.Builder builder = MedicationAdministration.Performer.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.function(parseCodeableConcept("function", getJsonValue(jsonObject, "function", JsonObject.class), -1)); builder.actor(parseReference("actor", getJsonValue(jsonObject, "actor", JsonObject.class), -1)); @@ -12519,10 +12870,11 @@ private MedicationDispense parseMedicationDispense(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationDispense.class, jsonObject); } MedicationDispense.Builder builder = MedicationDispense.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -12607,10 +12959,11 @@ private MedicationDispense.Performer parseMedicationDispensePerformer(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationDispense.Performer.class, jsonObject); } MedicationDispense.Performer.Builder builder = MedicationDispense.Performer.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.function(parseCodeableConcept("function", getJsonValue(jsonObject, "function", JsonObject.class), -1)); builder.actor(parseReference("actor", getJsonValue(jsonObject, "actor", JsonObject.class), -1)); @@ -12623,10 +12976,11 @@ private MedicationDispense.Substitution parseMedicationDispenseSubstitution(java return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationDispense.Substitution.class, jsonObject); } MedicationDispense.Substitution.Builder builder = MedicationDispense.Substitution.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.wasSubstituted(parseBoolean("wasSubstituted", getJsonValue(jsonObject, "wasSubstituted", JsonValue.class), jsonObject.get("_wasSubstituted"), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -12651,10 +13005,11 @@ private MedicationKnowledge parseMedicationKnowledge(java.lang.String elementNam return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.class, jsonObject); } MedicationKnowledge.Builder builder = MedicationKnowledge.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.status((MedicationKnowledgeStatus) parseString(MedicationKnowledgeStatus.builder(), "status", getJsonValue(jsonObject, "status", JsonString.class), jsonObject.get("_status"), -1)); @@ -12763,10 +13118,11 @@ private MedicationKnowledge.AdministrationGuidelines parseMedicationKnowledgeAdm return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.AdministrationGuidelines.class, jsonObject); } MedicationKnowledge.AdministrationGuidelines.Builder builder = MedicationKnowledge.AdministrationGuidelines.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray dosageArray = getJsonArray(jsonObject, "dosage"); if (dosageArray != null) { @@ -12790,10 +13146,11 @@ private MedicationKnowledge.AdministrationGuidelines.Dosage parseMedicationKnowl return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.AdministrationGuidelines.Dosage.class, jsonObject); } MedicationKnowledge.AdministrationGuidelines.Dosage.Builder builder = MedicationKnowledge.AdministrationGuidelines.Dosage.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); JsonArray dosageArray = getJsonArray(jsonObject, "dosage"); @@ -12811,10 +13168,11 @@ private MedicationKnowledge.AdministrationGuidelines.PatientCharacteristics pars return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.AdministrationGuidelines.PatientCharacteristics.class, jsonObject); } MedicationKnowledge.AdministrationGuidelines.PatientCharacteristics.Builder builder = MedicationKnowledge.AdministrationGuidelines.PatientCharacteristics.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.characteristic(parseChoiceElement("characteristic", jsonObject, CodeableConcept.class, SimpleQuantity.class)); JsonArray valueArray = getJsonArray(jsonObject, "value", true); @@ -12833,10 +13191,11 @@ private MedicationKnowledge.Cost parseMedicationKnowledgeCost(java.lang.String e return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.Cost.class, jsonObject); } MedicationKnowledge.Cost.Builder builder = MedicationKnowledge.Cost.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.source(parseString("source", getJsonValue(jsonObject, "source", JsonString.class), jsonObject.get("_source"), -1)); @@ -12850,10 +13209,11 @@ private MedicationKnowledge.DrugCharacteristic parseMedicationKnowledgeDrugChara return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.DrugCharacteristic.class, jsonObject); } MedicationKnowledge.DrugCharacteristic.Builder builder = MedicationKnowledge.DrugCharacteristic.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.value(parseChoiceElement("value", jsonObject, CodeableConcept.class, String.class, SimpleQuantity.class, Base64Binary.class)); @@ -12866,10 +13226,11 @@ private MedicationKnowledge.Ingredient parseMedicationKnowledgeIngredient(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.Ingredient.class, jsonObject); } MedicationKnowledge.Ingredient.Builder builder = MedicationKnowledge.Ingredient.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.item(parseChoiceElement("item", jsonObject, CodeableConcept.class, Reference.class)); builder.isActive(parseBoolean("isActive", getJsonValue(jsonObject, "isActive", JsonValue.class), jsonObject.get("_isActive"), -1)); @@ -12883,10 +13244,11 @@ private MedicationKnowledge.Kinetics parseMedicationKnowledgeKinetics(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.Kinetics.class, jsonObject); } MedicationKnowledge.Kinetics.Builder builder = MedicationKnowledge.Kinetics.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray areaUnderCurveArray = getJsonArray(jsonObject, "areaUnderCurve"); if (areaUnderCurveArray != null) { @@ -12910,10 +13272,11 @@ private MedicationKnowledge.MedicineClassification parseMedicationKnowledgeMedic return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.MedicineClassification.class, jsonObject); } MedicationKnowledge.MedicineClassification.Builder builder = MedicationKnowledge.MedicineClassification.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); JsonArray classificationArray = getJsonArray(jsonObject, "classification"); @@ -12931,10 +13294,11 @@ private MedicationKnowledge.MonitoringProgram parseMedicationKnowledgeMonitoring return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.MonitoringProgram.class, jsonObject); } MedicationKnowledge.MonitoringProgram.Builder builder = MedicationKnowledge.MonitoringProgram.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); @@ -12947,10 +13311,11 @@ private MedicationKnowledge.Monograph parseMedicationKnowledgeMonograph(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.Monograph.class, jsonObject); } MedicationKnowledge.Monograph.Builder builder = MedicationKnowledge.Monograph.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.source(parseReference("source", getJsonValue(jsonObject, "source", JsonObject.class), -1)); @@ -12963,10 +13328,11 @@ private MedicationKnowledge.Packaging parseMedicationKnowledgePackaging(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.Packaging.class, jsonObject); } MedicationKnowledge.Packaging.Builder builder = MedicationKnowledge.Packaging.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.quantity((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "quantity", getJsonValue(jsonObject, "quantity", JsonObject.class), -1)); @@ -12979,10 +13345,11 @@ private MedicationKnowledge.Regulatory parseMedicationKnowledgeRegulatory(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.Regulatory.class, jsonObject); } MedicationKnowledge.Regulatory.Builder builder = MedicationKnowledge.Regulatory.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.regulatoryAuthority(parseReference("regulatoryAuthority", getJsonValue(jsonObject, "regulatoryAuthority", JsonObject.class), -1)); JsonArray substitutionArray = getJsonArray(jsonObject, "substitution"); @@ -13007,10 +13374,11 @@ private MedicationKnowledge.Regulatory.MaxDispense parseMedicationKnowledgeRegul return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.Regulatory.MaxDispense.class, jsonObject); } MedicationKnowledge.Regulatory.MaxDispense.Builder builder = MedicationKnowledge.Regulatory.MaxDispense.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.quantity((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "quantity", getJsonValue(jsonObject, "quantity", JsonObject.class), -1)); builder.period((Duration) parseQuantity(Duration.builder(), "period", getJsonValue(jsonObject, "period", JsonObject.class), -1)); @@ -13023,10 +13391,11 @@ private MedicationKnowledge.Regulatory.Schedule parseMedicationKnowledgeRegulato return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.Regulatory.Schedule.class, jsonObject); } MedicationKnowledge.Regulatory.Schedule.Builder builder = MedicationKnowledge.Regulatory.Schedule.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.schedule(parseCodeableConcept("schedule", getJsonValue(jsonObject, "schedule", JsonObject.class), -1)); stackPop(); @@ -13038,10 +13407,11 @@ private MedicationKnowledge.Regulatory.Substitution parseMedicationKnowledgeRegu return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.Regulatory.Substitution.class, jsonObject); } MedicationKnowledge.Regulatory.Substitution.Builder builder = MedicationKnowledge.Regulatory.Substitution.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.allowed(parseBoolean("allowed", getJsonValue(jsonObject, "allowed", JsonValue.class), jsonObject.get("_allowed"), -1)); @@ -13054,10 +13424,11 @@ private MedicationKnowledge.RelatedMedicationKnowledge parseMedicationKnowledgeR return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationKnowledge.RelatedMedicationKnowledge.class, jsonObject); } MedicationKnowledge.RelatedMedicationKnowledge.Builder builder = MedicationKnowledge.RelatedMedicationKnowledge.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); JsonArray referenceArray = getJsonArray(jsonObject, "reference"); @@ -13075,10 +13446,11 @@ private MedicationRequest parseMedicationRequest(java.lang.String elementName, J return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationRequest.class, jsonObject); } MedicationRequest.Builder builder = MedicationRequest.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -13188,10 +13560,11 @@ private MedicationRequest.DispenseRequest parseMedicationRequestDispenseRequest( return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationRequest.DispenseRequest.class, jsonObject); } MedicationRequest.DispenseRequest.Builder builder = MedicationRequest.DispenseRequest.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.initialFill(parseMedicationRequestDispenseRequestInitialFill("initialFill", getJsonValue(jsonObject, "initialFill", JsonObject.class), -1)); builder.dispenseInterval((Duration) parseQuantity(Duration.builder(), "dispenseInterval", getJsonValue(jsonObject, "dispenseInterval", JsonObject.class), -1)); @@ -13209,10 +13582,11 @@ private MedicationRequest.DispenseRequest.InitialFill parseMedicationRequestDisp return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationRequest.DispenseRequest.InitialFill.class, jsonObject); } MedicationRequest.DispenseRequest.InitialFill.Builder builder = MedicationRequest.DispenseRequest.InitialFill.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.quantity((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "quantity", getJsonValue(jsonObject, "quantity", JsonObject.class), -1)); builder.duration((Duration) parseQuantity(Duration.builder(), "duration", getJsonValue(jsonObject, "duration", JsonObject.class), -1)); @@ -13225,10 +13599,11 @@ private MedicationRequest.Substitution parseMedicationRequestSubstitution(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationRequest.Substitution.class, jsonObject); } MedicationRequest.Substitution.Builder builder = MedicationRequest.Substitution.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.allowed(parseChoiceElement("allowed", jsonObject, Boolean.class, CodeableConcept.class)); builder.reason(parseCodeableConcept("reason", getJsonValue(jsonObject, "reason", JsonObject.class), -1)); @@ -13241,10 +13616,11 @@ private MedicationStatement parseMedicationStatement(java.lang.String elementNam return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicationStatement.class, jsonObject); } MedicationStatement.Builder builder = MedicationStatement.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -13317,10 +13693,11 @@ private MedicinalProduct parseMedicinalProduct(java.lang.String elementName, Jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProduct.class, jsonObject); } MedicinalProduct.Builder builder = MedicinalProduct.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -13422,10 +13799,11 @@ private MedicinalProduct.ManufacturingBusinessOperation parseMedicinalProductMan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProduct.ManufacturingBusinessOperation.class, jsonObject); } MedicinalProduct.ManufacturingBusinessOperation.Builder builder = MedicinalProduct.ManufacturingBusinessOperation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.operationType(parseCodeableConcept("operationType", getJsonValue(jsonObject, "operationType", JsonObject.class), -1)); builder.authorisationReferenceNumber(parseIdentifier("authorisationReferenceNumber", getJsonValue(jsonObject, "authorisationReferenceNumber", JsonObject.class), -1)); @@ -13447,10 +13825,11 @@ private MedicinalProduct.Name parseMedicinalProductName(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProduct.Name.class, jsonObject); } MedicinalProduct.Name.Builder builder = MedicinalProduct.Name.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.productName(parseString("productName", getJsonValue(jsonObject, "productName", JsonString.class), jsonObject.get("_productName"), -1)); JsonArray namePartArray = getJsonArray(jsonObject, "namePart"); @@ -13474,10 +13853,11 @@ private MedicinalProduct.Name.CountryLanguage parseMedicinalProductNameCountryLa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProduct.Name.CountryLanguage.class, jsonObject); } MedicinalProduct.Name.CountryLanguage.Builder builder = MedicinalProduct.Name.CountryLanguage.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.country(parseCodeableConcept("country", getJsonValue(jsonObject, "country", JsonObject.class), -1)); builder.jurisdiction(parseCodeableConcept("jurisdiction", getJsonValue(jsonObject, "jurisdiction", JsonObject.class), -1)); @@ -13491,10 +13871,11 @@ private MedicinalProduct.Name.NamePart parseMedicinalProductNameNamePart(java.la return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProduct.Name.NamePart.class, jsonObject); } MedicinalProduct.Name.NamePart.Builder builder = MedicinalProduct.Name.NamePart.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.part(parseString("part", getJsonValue(jsonObject, "part", JsonString.class), jsonObject.get("_part"), -1)); builder.type(parseCoding("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -13507,10 +13888,11 @@ private MedicinalProduct.SpecialDesignation parseMedicinalProductSpecialDesignat return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProduct.SpecialDesignation.class, jsonObject); } MedicinalProduct.SpecialDesignation.Builder builder = MedicinalProduct.SpecialDesignation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -13533,10 +13915,11 @@ private MedicinalProductAuthorization parseMedicinalProductAuthorization(java.la return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductAuthorization.class, jsonObject); } MedicinalProductAuthorization.Builder builder = MedicinalProductAuthorization.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -13583,10 +13966,11 @@ private MedicinalProductAuthorization.JurisdictionalAuthorization parseMedicinal return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductAuthorization.JurisdictionalAuthorization.class, jsonObject); } MedicinalProductAuthorization.JurisdictionalAuthorization.Builder builder = MedicinalProductAuthorization.JurisdictionalAuthorization.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -13612,10 +13996,11 @@ private MedicinalProductAuthorization.Procedure parseMedicinalProductAuthorizati return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductAuthorization.Procedure.class, jsonObject); } MedicinalProductAuthorization.Procedure.Builder builder = MedicinalProductAuthorization.Procedure.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -13635,10 +14020,11 @@ private MedicinalProductContraindication parseMedicinalProductContraindication(j return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductContraindication.class, jsonObject); } MedicinalProductContraindication.Builder builder = MedicinalProductContraindication.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray subjectArray = getJsonArray(jsonObject, "subject"); if (subjectArray != null) { @@ -13681,10 +14067,11 @@ private MedicinalProductContraindication.OtherTherapy parseMedicinalProductContr return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductContraindication.OtherTherapy.class, jsonObject); } MedicinalProductContraindication.OtherTherapy.Builder builder = MedicinalProductContraindication.OtherTherapy.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.therapyRelationshipType(parseCodeableConcept("therapyRelationshipType", getJsonValue(jsonObject, "therapyRelationshipType", JsonObject.class), -1)); builder.medication(parseChoiceElement("medication", jsonObject, CodeableConcept.class, Reference.class)); @@ -13697,10 +14084,11 @@ private MedicinalProductIndication parseMedicinalProductIndication(java.lang.Str return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductIndication.class, jsonObject); } MedicinalProductIndication.Builder builder = MedicinalProductIndication.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray subjectArray = getJsonArray(jsonObject, "subject"); if (subjectArray != null) { @@ -13745,10 +14133,11 @@ private MedicinalProductIndication.OtherTherapy parseMedicinalProductIndicationO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductIndication.OtherTherapy.class, jsonObject); } MedicinalProductIndication.OtherTherapy.Builder builder = MedicinalProductIndication.OtherTherapy.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.therapyRelationshipType(parseCodeableConcept("therapyRelationshipType", getJsonValue(jsonObject, "therapyRelationshipType", JsonObject.class), -1)); builder.medication(parseChoiceElement("medication", jsonObject, CodeableConcept.class, Reference.class)); @@ -13761,10 +14150,11 @@ private MedicinalProductIngredient parseMedicinalProductIngredient(java.lang.Str return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductIngredient.class, jsonObject); } MedicinalProductIngredient.Builder builder = MedicinalProductIngredient.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.role(parseCodeableConcept("role", getJsonValue(jsonObject, "role", JsonObject.class), -1)); @@ -13791,10 +14181,11 @@ private MedicinalProductIngredient.SpecifiedSubstance parseMedicinalProductIngre return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductIngredient.SpecifiedSubstance.class, jsonObject); } MedicinalProductIngredient.SpecifiedSubstance.Builder builder = MedicinalProductIngredient.SpecifiedSubstance.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.group(parseCodeableConcept("group", getJsonValue(jsonObject, "group", JsonObject.class), -1)); @@ -13814,10 +14205,11 @@ private MedicinalProductIngredient.SpecifiedSubstance.Strength parseMedicinalPro return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductIngredient.SpecifiedSubstance.Strength.class, jsonObject); } MedicinalProductIngredient.SpecifiedSubstance.Strength.Builder builder = MedicinalProductIngredient.SpecifiedSubstance.Strength.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.presentation(parseRatio("presentation", getJsonValue(jsonObject, "presentation", JsonObject.class), -1)); builder.presentationLowLimit(parseRatio("presentationLowLimit", getJsonValue(jsonObject, "presentationLowLimit", JsonObject.class), -1)); @@ -13845,10 +14237,11 @@ private MedicinalProductIngredient.SpecifiedSubstance.Strength.ReferenceStrength return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductIngredient.SpecifiedSubstance.Strength.ReferenceStrength.class, jsonObject); } MedicinalProductIngredient.SpecifiedSubstance.Strength.ReferenceStrength.Builder builder = MedicinalProductIngredient.SpecifiedSubstance.Strength.ReferenceStrength.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.substance(parseCodeableConcept("substance", getJsonValue(jsonObject, "substance", JsonObject.class), -1)); builder.strength(parseRatio("strength", getJsonValue(jsonObject, "strength", JsonObject.class), -1)); @@ -13869,10 +14262,11 @@ private MedicinalProductIngredient.Substance parseMedicinalProductIngredientSubs return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductIngredient.Substance.class, jsonObject); } MedicinalProductIngredient.Substance.Builder builder = MedicinalProductIngredient.Substance.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); JsonArray strengthArray = getJsonArray(jsonObject, "strength"); @@ -13890,10 +14284,11 @@ private MedicinalProductInteraction parseMedicinalProductInteraction(java.lang.S return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductInteraction.class, jsonObject); } MedicinalProductInteraction.Builder builder = MedicinalProductInteraction.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray subjectArray = getJsonArray(jsonObject, "subject"); if (subjectArray != null) { @@ -13921,10 +14316,11 @@ private MedicinalProductInteraction.Interactant parseMedicinalProductInteraction return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductInteraction.Interactant.class, jsonObject); } MedicinalProductInteraction.Interactant.Builder builder = MedicinalProductInteraction.Interactant.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.item(parseChoiceElement("item", jsonObject, Reference.class, CodeableConcept.class)); stackPop(); @@ -13936,10 +14332,11 @@ private MedicinalProductManufactured parseMedicinalProductManufactured(java.lang return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductManufactured.class, jsonObject); } MedicinalProductManufactured.Builder builder = MedicinalProductManufactured.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.manufacturedDoseForm(parseCodeableConcept("manufacturedDoseForm", getJsonValue(jsonObject, "manufacturedDoseForm", JsonObject.class), -1)); builder.unitOfPresentation(parseCodeableConcept("unitOfPresentation", getJsonValue(jsonObject, "unitOfPresentation", JsonObject.class), -1)); @@ -13972,10 +14369,11 @@ private MedicinalProductPackaged parseMedicinalProductPackaged(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductPackaged.class, jsonObject); } MedicinalProductPackaged.Builder builder = MedicinalProductPackaged.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -14025,10 +14423,11 @@ private MedicinalProductPackaged.BatchIdentifier parseMedicinalProductPackagedBa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductPackaged.BatchIdentifier.class, jsonObject); } MedicinalProductPackaged.BatchIdentifier.Builder builder = MedicinalProductPackaged.BatchIdentifier.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.outerPackaging(parseIdentifier("outerPackaging", getJsonValue(jsonObject, "outerPackaging", JsonObject.class), -1)); builder.immediatePackaging(parseIdentifier("immediatePackaging", getJsonValue(jsonObject, "immediatePackaging", JsonObject.class), -1)); @@ -14041,10 +14440,11 @@ private MedicinalProductPackaged.PackageItem parseMedicinalProductPackagedPackag return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductPackaged.PackageItem.class, jsonObject); } MedicinalProductPackaged.PackageItem.Builder builder = MedicinalProductPackaged.PackageItem.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -14112,10 +14512,11 @@ private MedicinalProductPharmaceutical parseMedicinalProductPharmaceutical(java. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductPharmaceutical.class, jsonObject); } MedicinalProductPharmaceutical.Builder builder = MedicinalProductPharmaceutical.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -14158,10 +14559,11 @@ private MedicinalProductPharmaceutical.Characteristics parseMedicinalProductPhar return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductPharmaceutical.Characteristics.class, jsonObject); } MedicinalProductPharmaceutical.Characteristics.Builder builder = MedicinalProductPharmaceutical.Characteristics.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.status(parseCodeableConcept("status", getJsonValue(jsonObject, "status", JsonObject.class), -1)); @@ -14174,10 +14576,11 @@ private MedicinalProductPharmaceutical.RouteOfAdministration parseMedicinalProdu return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductPharmaceutical.RouteOfAdministration.class, jsonObject); } MedicinalProductPharmaceutical.RouteOfAdministration.Builder builder = MedicinalProductPharmaceutical.RouteOfAdministration.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.firstDose(parseQuantity("firstDose", getJsonValue(jsonObject, "firstDose", JsonObject.class), -1)); @@ -14200,10 +14603,11 @@ private MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies parse return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.class, jsonObject); } MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.Builder builder = MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); JsonArray withdrawalPeriodArray = getJsonArray(jsonObject, "withdrawalPeriod"); @@ -14221,10 +14625,11 @@ private MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.Withd return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.WithdrawalPeriod.class, jsonObject); } MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.WithdrawalPeriod.Builder builder = MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.WithdrawalPeriod.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.tissue(parseCodeableConcept("tissue", getJsonValue(jsonObject, "tissue", JsonObject.class), -1)); builder.value(parseQuantity("value", getJsonValue(jsonObject, "value", JsonObject.class), -1)); @@ -14238,10 +14643,11 @@ private MedicinalProductUndesirableEffect parseMedicinalProductUndesirableEffect return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MedicinalProductUndesirableEffect.class, jsonObject); } MedicinalProductUndesirableEffect.Builder builder = MedicinalProductUndesirableEffect.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray subjectArray = getJsonArray(jsonObject, "subject"); if (subjectArray != null) { @@ -14267,10 +14673,11 @@ private MessageDefinition parseMessageDefinition(java.lang.String elementName, J return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MessageDefinition.class, jsonObject); } MessageDefinition.Builder builder = MessageDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -14353,10 +14760,11 @@ private MessageDefinition.AllowedResponse parseMessageDefinitionAllowedResponse( return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MessageDefinition.AllowedResponse.class, jsonObject); } MessageDefinition.AllowedResponse.Builder builder = MessageDefinition.AllowedResponse.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.message((Canonical) parseUri(Canonical.builder(), "message", getJsonValue(jsonObject, "message", JsonString.class), jsonObject.get("_message"), -1)); builder.situation((Markdown) parseString(Markdown.builder(), "situation", getJsonValue(jsonObject, "situation", JsonString.class), jsonObject.get("_situation"), -1)); @@ -14369,10 +14777,11 @@ private MessageDefinition.Focus parseMessageDefinitionFocus(java.lang.String ele return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MessageDefinition.Focus.class, jsonObject); } MessageDefinition.Focus.Builder builder = MessageDefinition.Focus.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((ResourceType) parseString(ResourceType.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.profile((Canonical) parseUri(Canonical.builder(), "profile", getJsonValue(jsonObject, "profile", JsonString.class), jsonObject.get("_profile"), -1)); @@ -14387,10 +14796,11 @@ private MessageHeader parseMessageHeader(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MessageHeader.class, jsonObject); } MessageHeader.Builder builder = MessageHeader.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.event(parseChoiceElement("event", jsonObject, Coding.class, Uri.class)); JsonArray destinationArray = getJsonArray(jsonObject, "destination"); @@ -14422,10 +14832,11 @@ private MessageHeader.Destination parseMessageHeaderDestination(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MessageHeader.Destination.class, jsonObject); } MessageHeader.Destination.Builder builder = MessageHeader.Destination.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.target(parseReference("target", getJsonValue(jsonObject, "target", JsonObject.class), -1)); @@ -14440,10 +14851,11 @@ private MessageHeader.Response parseMessageHeaderResponse(java.lang.String eleme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MessageHeader.Response.class, jsonObject); } MessageHeader.Response.Builder builder = MessageHeader.Response.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.identifier((Id) parseString(Id.builder(), "identifier", getJsonValue(jsonObject, "identifier", JsonString.class), jsonObject.get("_identifier"), -1)); builder.code((ResponseType) parseString(ResponseType.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); @@ -14457,10 +14869,11 @@ private MessageHeader.Source parseMessageHeaderSource(java.lang.String elementNa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MessageHeader.Source.class, jsonObject); } MessageHeader.Source.Builder builder = MessageHeader.Source.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.software(parseString("software", getJsonValue(jsonObject, "software", JsonString.class), jsonObject.get("_software"), -1)); @@ -14476,10 +14889,11 @@ private Meta parseMeta(java.lang.String elementName, JsonObject jsonObject, int return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Meta.class, jsonObject); } Meta.Builder builder = Meta.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.versionId((Id) parseString(Id.builder(), "versionId", getJsonValue(jsonObject, "versionId", JsonString.class), jsonObject.get("_versionId"), -1)); builder.lastUpdated(parseInstant("lastUpdated", getJsonValue(jsonObject, "lastUpdated", JsonString.class), jsonObject.get("_lastUpdated"), -1)); @@ -14512,10 +14926,11 @@ private MolecularSequence parseMolecularSequence(java.lang.String elementName, J return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MolecularSequence.class, jsonObject); } MolecularSequence.Builder builder = MolecularSequence.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -14572,10 +14987,11 @@ private MolecularSequence.Quality parseMolecularSequenceQuality(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MolecularSequence.Quality.class, jsonObject); } MolecularSequence.Quality.Builder builder = MolecularSequence.Quality.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((QualityType) parseString(QualityType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.standardSequence(parseCodeableConcept("standardSequence", getJsonValue(jsonObject, "standardSequence", JsonObject.class), -1)); @@ -14601,10 +15017,11 @@ private MolecularSequence.Quality.Roc parseMolecularSequenceQualityRoc(java.lang return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MolecularSequence.Quality.Roc.class, jsonObject); } MolecularSequence.Quality.Roc.Builder builder = MolecularSequence.Quality.Roc.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray scoreArray = getJsonArray(jsonObject, "score", true); if (scoreArray != null) { @@ -14664,10 +15081,11 @@ private MolecularSequence.ReferenceSeq parseMolecularSequenceReferenceSeq(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MolecularSequence.ReferenceSeq.class, jsonObject); } MolecularSequence.ReferenceSeq.Builder builder = MolecularSequence.ReferenceSeq.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.chromosome(parseCodeableConcept("chromosome", getJsonValue(jsonObject, "chromosome", JsonObject.class), -1)); builder.genomeBuild(parseString("genomeBuild", getJsonValue(jsonObject, "genomeBuild", JsonString.class), jsonObject.get("_genomeBuild"), -1)); @@ -14687,10 +15105,11 @@ private MolecularSequence.Repository parseMolecularSequenceRepository(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MolecularSequence.Repository.class, jsonObject); } MolecularSequence.Repository.Builder builder = MolecularSequence.Repository.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((RepositoryType) parseString(RepositoryType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); @@ -14707,10 +15126,11 @@ private MolecularSequence.StructureVariant parseMolecularSequenceStructureVarian return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MolecularSequence.StructureVariant.class, jsonObject); } MolecularSequence.StructureVariant.Builder builder = MolecularSequence.StructureVariant.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.variantType(parseCodeableConcept("variantType", getJsonValue(jsonObject, "variantType", JsonObject.class), -1)); builder.exact(parseBoolean("exact", getJsonValue(jsonObject, "exact", JsonValue.class), jsonObject.get("_exact"), -1)); @@ -14726,10 +15146,11 @@ private MolecularSequence.StructureVariant.Inner parseMolecularSequenceStructure return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MolecularSequence.StructureVariant.Inner.class, jsonObject); } MolecularSequence.StructureVariant.Inner.Builder builder = MolecularSequence.StructureVariant.Inner.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.start(parseInteger("start", getJsonValue(jsonObject, "start", JsonNumber.class), jsonObject.get("_start"), -1)); builder.end(parseInteger("end", getJsonValue(jsonObject, "end", JsonNumber.class), jsonObject.get("_end"), -1)); @@ -14742,10 +15163,11 @@ private MolecularSequence.StructureVariant.Outer parseMolecularSequenceStructure return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MolecularSequence.StructureVariant.Outer.class, jsonObject); } MolecularSequence.StructureVariant.Outer.Builder builder = MolecularSequence.StructureVariant.Outer.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.start(parseInteger("start", getJsonValue(jsonObject, "start", JsonNumber.class), jsonObject.get("_start"), -1)); builder.end(parseInteger("end", getJsonValue(jsonObject, "end", JsonNumber.class), jsonObject.get("_end"), -1)); @@ -14758,10 +15180,11 @@ private MolecularSequence.Variant parseMolecularSequenceVariant(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(MolecularSequence.Variant.class, jsonObject); } MolecularSequence.Variant.Builder builder = MolecularSequence.Variant.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.start(parseInteger("start", getJsonValue(jsonObject, "start", JsonNumber.class), jsonObject.get("_start"), -1)); builder.end(parseInteger("end", getJsonValue(jsonObject, "end", JsonNumber.class), jsonObject.get("_end"), -1)); @@ -14778,10 +15201,11 @@ private Money parseMoney(java.lang.String elementName, JsonObject jsonObject, in return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Money.class, jsonObject); } Money.Builder builder = Money.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.value(parseDecimal("value", getJsonValue(jsonObject, "value", JsonNumber.class), jsonObject.get("_value"), -1)); builder.currency((Code) parseString(Code.builder(), "currency", getJsonValue(jsonObject, "currency", JsonString.class), jsonObject.get("_currency"), -1)); @@ -14794,10 +15218,11 @@ private NamingSystem parseNamingSystem(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(NamingSystem.class, jsonObject); } NamingSystem.Builder builder = NamingSystem.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.status((PublicationStatus) parseString(PublicationStatus.builder(), "status", getJsonValue(jsonObject, "status", JsonString.class), jsonObject.get("_status"), -1)); @@ -14841,10 +15266,11 @@ private NamingSystem.UniqueId parseNamingSystemUniqueId(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(NamingSystem.UniqueId.class, jsonObject); } NamingSystem.UniqueId.Builder builder = NamingSystem.UniqueId.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((NamingSystemIdentifierType) parseString(NamingSystemIdentifierType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.value(parseString("value", getJsonValue(jsonObject, "value", JsonString.class), jsonObject.get("_value"), -1)); @@ -14860,10 +15286,11 @@ private Narrative parseNarrative(java.lang.String elementName, JsonObject jsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Narrative.class, jsonObject); } Narrative.Builder builder = Narrative.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.status((NarrativeStatus) parseString(NarrativeStatus.builder(), "status", getJsonValue(jsonObject, "status", JsonString.class), jsonObject.get("_status"), -1)); builder.div(parseXhtml("div", getJsonValue(jsonObject, "div", JsonString.class), jsonObject.get("_div"), -1)); @@ -14876,10 +15303,11 @@ private NutritionOrder parseNutritionOrder(java.lang.String elementName, JsonObj return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(NutritionOrder.class, jsonObject); } NutritionOrder.Builder builder = NutritionOrder.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -14955,10 +15383,11 @@ private NutritionOrder.EnteralFormula parseNutritionOrderEnteralFormula(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(NutritionOrder.EnteralFormula.class, jsonObject); } NutritionOrder.EnteralFormula.Builder builder = NutritionOrder.EnteralFormula.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.baseFormulaType(parseCodeableConcept("baseFormulaType", getJsonValue(jsonObject, "baseFormulaType", JsonObject.class), -1)); builder.baseFormulaProductName(parseString("baseFormulaProductName", getJsonValue(jsonObject, "baseFormulaProductName", JsonString.class), jsonObject.get("_baseFormulaProductName"), -1)); @@ -14983,10 +15412,11 @@ private NutritionOrder.EnteralFormula.Administration parseNutritionOrderEnteralF return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(NutritionOrder.EnteralFormula.Administration.class, jsonObject); } NutritionOrder.EnteralFormula.Administration.Builder builder = NutritionOrder.EnteralFormula.Administration.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.schedule(parseTiming("schedule", getJsonValue(jsonObject, "schedule", JsonObject.class), -1)); builder.quantity((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "quantity", getJsonValue(jsonObject, "quantity", JsonObject.class), -1)); @@ -15000,10 +15430,11 @@ private NutritionOrder.OralDiet parseNutritionOrderOralDiet(java.lang.String ele return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(NutritionOrder.OralDiet.class, jsonObject); } NutritionOrder.OralDiet.Builder builder = NutritionOrder.OralDiet.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray typeArray = getJsonArray(jsonObject, "type"); if (typeArray != null) { @@ -15045,10 +15476,11 @@ private NutritionOrder.OralDiet.Nutrient parseNutritionOrderOralDietNutrient(jav return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(NutritionOrder.OralDiet.Nutrient.class, jsonObject); } NutritionOrder.OralDiet.Nutrient.Builder builder = NutritionOrder.OralDiet.Nutrient.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.modifier(parseCodeableConcept("modifier", getJsonValue(jsonObject, "modifier", JsonObject.class), -1)); builder.amount((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "amount", getJsonValue(jsonObject, "amount", JsonObject.class), -1)); @@ -15061,10 +15493,11 @@ private NutritionOrder.OralDiet.Texture parseNutritionOrderOralDietTexture(java. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(NutritionOrder.OralDiet.Texture.class, jsonObject); } NutritionOrder.OralDiet.Texture.Builder builder = NutritionOrder.OralDiet.Texture.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.modifier(parseCodeableConcept("modifier", getJsonValue(jsonObject, "modifier", JsonObject.class), -1)); builder.foodType(parseCodeableConcept("foodType", getJsonValue(jsonObject, "foodType", JsonObject.class), -1)); @@ -15077,10 +15510,11 @@ private NutritionOrder.Supplement parseNutritionOrderSupplement(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(NutritionOrder.Supplement.class, jsonObject); } NutritionOrder.Supplement.Builder builder = NutritionOrder.Supplement.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.productName(parseString("productName", getJsonValue(jsonObject, "productName", JsonString.class), jsonObject.get("_productName"), -1)); @@ -15101,10 +15535,11 @@ private Observation parseObservation(java.lang.String elementName, JsonObject js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Observation.class, jsonObject); } Observation.Builder builder = Observation.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -15199,10 +15634,11 @@ private Observation.Component parseObservationComponent(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Observation.Component.class, jsonObject); } Observation.Component.Builder builder = Observation.Component.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.value(parseChoiceElement("value", jsonObject, Quantity.class, CodeableConcept.class, String.class, Boolean.class, Integer.class, Range.class, Ratio.class, SampledData.class, Time.class, DateTime.class, Period.class)); @@ -15228,10 +15664,11 @@ private Observation.ReferenceRange parseObservationReferenceRange(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Observation.ReferenceRange.class, jsonObject); } Observation.ReferenceRange.Builder builder = Observation.ReferenceRange.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.low((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "low", getJsonValue(jsonObject, "low", JsonObject.class), -1)); builder.high((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "high", getJsonValue(jsonObject, "high", JsonObject.class), -1)); @@ -15253,10 +15690,11 @@ private ObservationDefinition parseObservationDefinition(java.lang.String elemen return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ObservationDefinition.class, jsonObject); } ObservationDefinition.Builder builder = ObservationDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray categoryArray = getJsonArray(jsonObject, "category"); if (categoryArray != null) { @@ -15301,10 +15739,11 @@ private ObservationDefinition.QualifiedInterval parseObservationDefinitionQualif return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ObservationDefinition.QualifiedInterval.class, jsonObject); } ObservationDefinition.QualifiedInterval.Builder builder = ObservationDefinition.QualifiedInterval.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.category((ObservationRangeCategory) parseString(ObservationRangeCategory.builder(), "category", getJsonValue(jsonObject, "category", JsonString.class), jsonObject.get("_category"), -1)); builder.range(parseRange("range", getJsonValue(jsonObject, "range", JsonObject.class), -1)); @@ -15328,10 +15767,11 @@ private ObservationDefinition.QuantitativeDetails parseObservationDefinitionQuan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ObservationDefinition.QuantitativeDetails.class, jsonObject); } ObservationDefinition.QuantitativeDetails.Builder builder = ObservationDefinition.QuantitativeDetails.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.customaryUnit(parseCodeableConcept("customaryUnit", getJsonValue(jsonObject, "customaryUnit", JsonObject.class), -1)); builder.unit(parseCodeableConcept("unit", getJsonValue(jsonObject, "unit", JsonObject.class), -1)); @@ -15346,10 +15786,11 @@ private OperationDefinition parseOperationDefinition(java.lang.String elementNam return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(OperationDefinition.class, jsonObject); } OperationDefinition.Builder builder = OperationDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); builder.version(parseString("version", getJsonValue(jsonObject, "version", JsonString.class), jsonObject.get("_version"), -1)); @@ -15417,10 +15858,11 @@ private OperationDefinition.Overload parseOperationDefinitionOverload(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(OperationDefinition.Overload.class, jsonObject); } OperationDefinition.Overload.Builder builder = OperationDefinition.Overload.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray parameterNameArray = getJsonArray(jsonObject, "parameterName", true); if (parameterNameArray != null) { @@ -15439,10 +15881,11 @@ private OperationDefinition.Parameter parseOperationDefinitionParameter(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(OperationDefinition.Parameter.class, jsonObject); } OperationDefinition.Parameter.Builder builder = OperationDefinition.Parameter.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name((Code) parseString(Code.builder(), "name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.use((OperationParameterUse) parseString(OperationParameterUse.builder(), "use", getJsonValue(jsonObject, "use", JsonString.class), jsonObject.get("_use"), -1)); @@ -15480,10 +15923,11 @@ private OperationDefinition.Parameter.Binding parseOperationDefinitionParameterB return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(OperationDefinition.Parameter.Binding.class, jsonObject); } OperationDefinition.Parameter.Binding.Builder builder = OperationDefinition.Parameter.Binding.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.strength((BindingStrength) parseString(BindingStrength.builder(), "strength", getJsonValue(jsonObject, "strength", JsonString.class), jsonObject.get("_strength"), -1)); builder.valueSet((Canonical) parseUri(Canonical.builder(), "valueSet", getJsonValue(jsonObject, "valueSet", JsonString.class), jsonObject.get("_valueSet"), -1)); @@ -15496,10 +15940,11 @@ private OperationDefinition.Parameter.ReferencedFrom parseOperationDefinitionPar return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(OperationDefinition.Parameter.ReferencedFrom.class, jsonObject); } OperationDefinition.Parameter.ReferencedFrom.Builder builder = OperationDefinition.Parameter.ReferencedFrom.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.source(parseString("source", getJsonValue(jsonObject, "source", JsonString.class), jsonObject.get("_source"), -1)); builder.sourceId(parseString("sourceId", getJsonValue(jsonObject, "sourceId", JsonString.class), jsonObject.get("_sourceId"), -1)); @@ -15512,10 +15957,11 @@ private OperationOutcome parseOperationOutcome(java.lang.String elementName, Jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(OperationOutcome.class, jsonObject); } OperationOutcome.Builder builder = OperationOutcome.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray issueArray = getJsonArray(jsonObject, "issue"); if (issueArray != null) { @@ -15532,10 +15978,11 @@ private OperationOutcome.Issue parseOperationOutcomeIssue(java.lang.String eleme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(OperationOutcome.Issue.class, jsonObject); } OperationOutcome.Issue.Builder builder = OperationOutcome.Issue.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.severity((IssueSeverity) parseString(IssueSeverity.builder(), "severity", getJsonValue(jsonObject, "severity", JsonString.class), jsonObject.get("_severity"), -1)); builder.code((IssueType) parseString(IssueType.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); @@ -15564,10 +16011,11 @@ private Organization parseOrganization(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Organization.class, jsonObject); } Organization.Builder builder = Organization.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -15624,10 +16072,11 @@ private Organization.Contact parseOrganizationContact(java.lang.String elementNa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Organization.Contact.class, jsonObject); } Organization.Contact.Builder builder = Organization.Contact.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.purpose(parseCodeableConcept("purpose", getJsonValue(jsonObject, "purpose", JsonObject.class), -1)); builder.name(parseHumanName("name", getJsonValue(jsonObject, "name", JsonObject.class), -1)); @@ -15647,10 +16096,11 @@ private OrganizationAffiliation parseOrganizationAffiliation(java.lang.String el return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(OrganizationAffiliation.class, jsonObject); } OrganizationAffiliation.Builder builder = OrganizationAffiliation.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -15713,10 +16163,11 @@ private ParameterDefinition parseParameterDefinition(java.lang.String elementNam return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ParameterDefinition.class, jsonObject); } ParameterDefinition.Builder builder = ParameterDefinition.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.name((Code) parseString(Code.builder(), "name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.use((ParameterUse) parseString(ParameterUse.builder(), "use", getJsonValue(jsonObject, "use", JsonString.class), jsonObject.get("_use"), -1)); @@ -15734,10 +16185,11 @@ private Parameters parseParameters(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Parameters.class, jsonObject); } Parameters.Builder builder = Parameters.builder(); + builder.setValidating(validating); parseResource(builder, jsonObject); JsonArray parameterArray = getJsonArray(jsonObject, "parameter"); if (parameterArray != null) { @@ -15754,10 +16206,11 @@ private Parameters.Parameter parseParametersParameter(java.lang.String elementNa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Parameters.Parameter.class, jsonObject); } Parameters.Parameter.Builder builder = Parameters.Parameter.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.value(parseChoiceElement("value", jsonObject, Base64Binary.class, Boolean.class, Canonical.class, Code.class, Date.class, DateTime.class, Decimal.class, Id.class, Instant.class, Integer.class, Markdown.class, Oid.class, PositiveInt.class, String.class, Time.class, UnsignedInt.class, Uri.class, Url.class, Uuid.class, Address.class, Age.class, Annotation.class, Attachment.class, CodeableConcept.class, Coding.class, ContactPoint.class, Count.class, Distance.class, Duration.class, HumanName.class, Identifier.class, Money.class, Period.class, Quantity.class, Range.class, Ratio.class, Reference.class, SampledData.class, Signature.class, Timing.class, ContactDetail.class, Contributor.class, DataRequirement.class, Expression.class, ParameterDefinition.class, RelatedArtifact.class, TriggerDefinition.class, UsageContext.class, Dosage.class, Meta.class)); @@ -15777,10 +16230,11 @@ private Patient parsePatient(java.lang.String elementName, JsonObject jsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Patient.class, jsonObject); } Patient.Builder builder = Patient.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -15852,10 +16306,11 @@ private Patient.Communication parsePatientCommunication(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Patient.Communication.class, jsonObject); } Patient.Communication.Builder builder = Patient.Communication.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.language(parseCodeableConcept("language", getJsonValue(jsonObject, "language", JsonObject.class), -1)); builder.preferred(parseBoolean("preferred", getJsonValue(jsonObject, "preferred", JsonValue.class), jsonObject.get("_preferred"), -1)); @@ -15868,10 +16323,11 @@ private Patient.Contact parsePatientContact(java.lang.String elementName, JsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Patient.Contact.class, jsonObject); } Patient.Contact.Builder builder = Patient.Contact.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray relationshipArray = getJsonArray(jsonObject, "relationship"); if (relationshipArray != null) { @@ -15899,10 +16355,11 @@ private Patient.Link parsePatientLink(java.lang.String elementName, JsonObject j return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Patient.Link.class, jsonObject); } Patient.Link.Builder builder = Patient.Link.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.other(parseReference("other", getJsonValue(jsonObject, "other", JsonObject.class), -1)); builder.type((LinkType) parseString(LinkType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); @@ -15915,10 +16372,11 @@ private PaymentNotice parsePaymentNotice(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PaymentNotice.class, jsonObject); } PaymentNotice.Builder builder = PaymentNotice.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -15946,10 +16404,11 @@ private PaymentReconciliation parsePaymentReconciliation(java.lang.String elemen return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PaymentReconciliation.class, jsonObject); } PaymentReconciliation.Builder builder = PaymentReconciliation.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -15990,10 +16449,11 @@ private PaymentReconciliation.Detail parsePaymentReconciliationDetail(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PaymentReconciliation.Detail.class, jsonObject); } PaymentReconciliation.Detail.Builder builder = PaymentReconciliation.Detail.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.predecessor(parseIdentifier("predecessor", getJsonValue(jsonObject, "predecessor", JsonObject.class), -1)); @@ -16014,10 +16474,11 @@ private PaymentReconciliation.ProcessNote parsePaymentReconciliationProcessNote( return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PaymentReconciliation.ProcessNote.class, jsonObject); } PaymentReconciliation.ProcessNote.Builder builder = PaymentReconciliation.ProcessNote.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((NoteType) parseString(NoteType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.text(parseString("text", getJsonValue(jsonObject, "text", JsonString.class), jsonObject.get("_text"), -1)); @@ -16030,10 +16491,11 @@ private Period parsePeriod(java.lang.String elementName, JsonObject jsonObject, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Period.class, jsonObject); } Period.Builder builder = Period.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.start(parseDateTime("start", getJsonValue(jsonObject, "start", JsonString.class), jsonObject.get("_start"), -1)); builder.end(parseDateTime("end", getJsonValue(jsonObject, "end", JsonString.class), jsonObject.get("_end"), -1)); @@ -16046,10 +16508,11 @@ private Person parsePerson(java.lang.String elementName, JsonObject jsonObject, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Person.class, jsonObject); } Person.Builder builder = Person.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -16095,10 +16558,11 @@ private Person.Link parsePersonLink(java.lang.String elementName, JsonObject jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Person.Link.class, jsonObject); } Person.Link.Builder builder = Person.Link.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.target(parseReference("target", getJsonValue(jsonObject, "target", JsonObject.class), -1)); builder.assurance((IdentityAssuranceLevel) parseString(IdentityAssuranceLevel.builder(), "assurance", getJsonValue(jsonObject, "assurance", JsonString.class), jsonObject.get("_assurance"), -1)); @@ -16111,10 +16575,11 @@ private PlanDefinition parsePlanDefinition(java.lang.String elementName, JsonObj return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PlanDefinition.class, jsonObject); } PlanDefinition.Builder builder = PlanDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -16222,10 +16687,11 @@ private PlanDefinition.Action parsePlanDefinitionAction(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PlanDefinition.Action.class, jsonObject); } PlanDefinition.Action.Builder builder = PlanDefinition.Action.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.prefix(parseString("prefix", getJsonValue(jsonObject, "prefix", JsonString.class), jsonObject.get("_prefix"), -1)); builder.title(parseString("title", getJsonValue(jsonObject, "title", JsonString.class), jsonObject.get("_title"), -1)); @@ -16324,10 +16790,11 @@ private PlanDefinition.Action.Condition parsePlanDefinitionActionCondition(java. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PlanDefinition.Action.Condition.class, jsonObject); } PlanDefinition.Action.Condition.Builder builder = PlanDefinition.Action.Condition.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.kind((ActionConditionKind) parseString(ActionConditionKind.builder(), "kind", getJsonValue(jsonObject, "kind", JsonString.class), jsonObject.get("_kind"), -1)); builder.expression(parseExpression("expression", getJsonValue(jsonObject, "expression", JsonObject.class), -1)); @@ -16340,10 +16807,11 @@ private PlanDefinition.Action.DynamicValue parsePlanDefinitionActionDynamicValue return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PlanDefinition.Action.DynamicValue.class, jsonObject); } PlanDefinition.Action.DynamicValue.Builder builder = PlanDefinition.Action.DynamicValue.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.path(parseString("path", getJsonValue(jsonObject, "path", JsonString.class), jsonObject.get("_path"), -1)); builder.expression(parseExpression("expression", getJsonValue(jsonObject, "expression", JsonObject.class), -1)); @@ -16356,10 +16824,11 @@ private PlanDefinition.Action.Participant parsePlanDefinitionActionParticipant(j return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PlanDefinition.Action.Participant.class, jsonObject); } PlanDefinition.Action.Participant.Builder builder = PlanDefinition.Action.Participant.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((ActionParticipantType) parseString(ActionParticipantType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.role(parseCodeableConcept("role", getJsonValue(jsonObject, "role", JsonObject.class), -1)); @@ -16372,10 +16841,11 @@ private PlanDefinition.Action.RelatedAction parsePlanDefinitionActionRelatedActi return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PlanDefinition.Action.RelatedAction.class, jsonObject); } PlanDefinition.Action.RelatedAction.Builder builder = PlanDefinition.Action.RelatedAction.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.actionId((Id) parseString(Id.builder(), "actionId", getJsonValue(jsonObject, "actionId", JsonString.class), jsonObject.get("_actionId"), -1)); builder.relationship((ActionRelationshipType) parseString(ActionRelationshipType.builder(), "relationship", getJsonValue(jsonObject, "relationship", JsonString.class), jsonObject.get("_relationship"), -1)); @@ -16389,10 +16859,11 @@ private PlanDefinition.Goal parsePlanDefinitionGoal(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PlanDefinition.Goal.class, jsonObject); } PlanDefinition.Goal.Builder builder = PlanDefinition.Goal.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.category(parseCodeableConcept("category", getJsonValue(jsonObject, "category", JsonObject.class), -1)); builder.description(parseCodeableConcept("description", getJsonValue(jsonObject, "description", JsonObject.class), -1)); @@ -16425,10 +16896,11 @@ private PlanDefinition.Goal.Target parsePlanDefinitionGoalTarget(java.lang.Strin return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PlanDefinition.Goal.Target.class, jsonObject); } PlanDefinition.Goal.Target.Builder builder = PlanDefinition.Goal.Target.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.measure(parseCodeableConcept("measure", getJsonValue(jsonObject, "measure", JsonObject.class), -1)); builder.detail(parseChoiceElement("detail", jsonObject, Quantity.class, Range.class, CodeableConcept.class)); @@ -16442,10 +16914,11 @@ private Population parsePopulation(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Population.class, jsonObject); } Population.Builder builder = Population.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.age(parseChoiceElement("age", jsonObject, Range.class, CodeableConcept.class)); builder.gender(parseCodeableConcept("gender", getJsonValue(jsonObject, "gender", JsonObject.class), -1)); @@ -16460,10 +16933,11 @@ private Practitioner parsePractitioner(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Practitioner.class, jsonObject); } Practitioner.Builder builder = Practitioner.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -16519,10 +16993,11 @@ private Practitioner.Qualification parsePractitionerQualification(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Practitioner.Qualification.class, jsonObject); } Practitioner.Qualification.Builder builder = Practitioner.Qualification.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -16542,10 +17017,11 @@ private PractitionerRole parsePractitionerRole(java.lang.String elementName, Jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PractitionerRole.class, jsonObject); } PractitionerRole.Builder builder = PractitionerRole.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -16615,10 +17091,11 @@ private PractitionerRole.AvailableTime parsePractitionerRoleAvailableTime(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PractitionerRole.AvailableTime.class, jsonObject); } PractitionerRole.AvailableTime.Builder builder = PractitionerRole.AvailableTime.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray daysOfWeekArray = getJsonArray(jsonObject, "daysOfWeek", true); if (daysOfWeekArray != null) { @@ -16639,10 +17116,11 @@ private PractitionerRole.NotAvailable parsePractitionerRoleNotAvailable(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(PractitionerRole.NotAvailable.class, jsonObject); } PractitionerRole.NotAvailable.Builder builder = PractitionerRole.NotAvailable.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.during(parsePeriod("during", getJsonValue(jsonObject, "during", JsonObject.class), -1)); @@ -16655,10 +17133,11 @@ private Procedure parseProcedure(java.lang.String elementName, JsonObject jsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Procedure.class, jsonObject); } Procedure.Builder builder = Procedure.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -16784,10 +17263,11 @@ private Procedure.FocalDevice parseProcedureFocalDevice(java.lang.String element return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Procedure.FocalDevice.class, jsonObject); } Procedure.FocalDevice.Builder builder = Procedure.FocalDevice.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.action(parseCodeableConcept("action", getJsonValue(jsonObject, "action", JsonObject.class), -1)); builder.manipulated(parseReference("manipulated", getJsonValue(jsonObject, "manipulated", JsonObject.class), -1)); @@ -16800,10 +17280,11 @@ private Procedure.Performer parseProcedurePerformer(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Procedure.Performer.class, jsonObject); } Procedure.Performer.Builder builder = Procedure.Performer.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.function(parseCodeableConcept("function", getJsonValue(jsonObject, "function", JsonObject.class), -1)); builder.actor(parseReference("actor", getJsonValue(jsonObject, "actor", JsonObject.class), -1)); @@ -16817,10 +17298,11 @@ private ProdCharacteristic parseProdCharacteristic(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ProdCharacteristic.class, jsonObject); } ProdCharacteristic.Builder builder = ProdCharacteristic.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.height(parseQuantity("height", getJsonValue(jsonObject, "height", JsonObject.class), -1)); builder.width(parseQuantity("width", getJsonValue(jsonObject, "width", JsonObject.class), -1)); @@ -16859,10 +17341,11 @@ private ProductShelfLife parseProductShelfLife(java.lang.String elementName, Jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ProductShelfLife.class, jsonObject); } ProductShelfLife.Builder builder = ProductShelfLife.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -16882,10 +17365,11 @@ private Provenance parseProvenance(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Provenance.class, jsonObject); } Provenance.Builder builder = Provenance.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray targetArray = getJsonArray(jsonObject, "target"); if (targetArray != null) { @@ -16937,10 +17421,11 @@ private Provenance.Agent parseProvenanceAgent(java.lang.String elementName, Json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Provenance.Agent.class, jsonObject); } Provenance.Agent.Builder builder = Provenance.Agent.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); JsonArray roleArray = getJsonArray(jsonObject, "role"); @@ -16960,10 +17445,11 @@ private Provenance.Entity parseProvenanceEntity(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Provenance.Entity.class, jsonObject); } Provenance.Entity.Builder builder = Provenance.Entity.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.role((ProvenanceEntityRole) parseString(ProvenanceEntityRole.builder(), "role", getJsonValue(jsonObject, "role", JsonString.class), jsonObject.get("_role"), -1)); builder.what(parseReference("what", getJsonValue(jsonObject, "what", JsonObject.class), -1)); @@ -16982,9 +17468,10 @@ private Quantity parseQuantity(Quantity.Builder builder, java.lang.String elemen return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Quantity.class, jsonObject); } + builder.setValidating(validating); parseElement(builder, jsonObject); builder.value(parseDecimal("value", getJsonValue(jsonObject, "value", JsonNumber.class), jsonObject.get("_value"), -1)); builder.comparator((QuantityComparator) parseString(QuantityComparator.builder(), "comparator", getJsonValue(jsonObject, "comparator", JsonString.class), jsonObject.get("_comparator"), -1)); @@ -17004,10 +17491,11 @@ private Questionnaire parseQuestionnaire(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Questionnaire.class, jsonObject); } Questionnaire.Builder builder = Questionnaire.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -17082,10 +17570,11 @@ private Questionnaire.Item parseQuestionnaireItem(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Questionnaire.Item.class, jsonObject); } Questionnaire.Item.Builder builder = Questionnaire.Item.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.linkId(parseString("linkId", getJsonValue(jsonObject, "linkId", JsonString.class), jsonObject.get("_linkId"), -1)); builder.definition(parseUri("definition", getJsonValue(jsonObject, "definition", JsonString.class), jsonObject.get("_definition"), -1)); @@ -17137,10 +17626,11 @@ private Questionnaire.Item.AnswerOption parseQuestionnaireItemAnswerOption(java. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Questionnaire.Item.AnswerOption.class, jsonObject); } Questionnaire.Item.AnswerOption.Builder builder = Questionnaire.Item.AnswerOption.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.value(parseChoiceElement("value", jsonObject, Integer.class, Date.class, Time.class, String.class, Coding.class, Reference.class)); builder.initialSelected(parseBoolean("initialSelected", getJsonValue(jsonObject, "initialSelected", JsonValue.class), jsonObject.get("_initialSelected"), -1)); @@ -17153,10 +17643,11 @@ private Questionnaire.Item.EnableWhen parseQuestionnaireItemEnableWhen(java.lang return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Questionnaire.Item.EnableWhen.class, jsonObject); } Questionnaire.Item.EnableWhen.Builder builder = Questionnaire.Item.EnableWhen.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.question(parseString("question", getJsonValue(jsonObject, "question", JsonString.class), jsonObject.get("_question"), -1)); builder.operator((QuestionnaireItemOperator) parseString(QuestionnaireItemOperator.builder(), "operator", getJsonValue(jsonObject, "operator", JsonString.class), jsonObject.get("_operator"), -1)); @@ -17170,10 +17661,11 @@ private Questionnaire.Item.Initial parseQuestionnaireItemInitial(java.lang.Strin return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Questionnaire.Item.Initial.class, jsonObject); } Questionnaire.Item.Initial.Builder builder = Questionnaire.Item.Initial.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.value(parseChoiceElement("value", jsonObject, Boolean.class, Decimal.class, Integer.class, Date.class, DateTime.class, Time.class, String.class, Uri.class, Attachment.class, Coding.class, Quantity.class, Reference.class)); stackPop(); @@ -17185,10 +17677,11 @@ private QuestionnaireResponse parseQuestionnaireResponse(java.lang.String elemen return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(QuestionnaireResponse.class, jsonObject); } QuestionnaireResponse.Builder builder = QuestionnaireResponse.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); JsonArray basedOnArray = getJsonArray(jsonObject, "basedOn"); @@ -17225,10 +17718,11 @@ private QuestionnaireResponse.Item parseQuestionnaireResponseItem(java.lang.Stri return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(QuestionnaireResponse.Item.class, jsonObject); } QuestionnaireResponse.Item.Builder builder = QuestionnaireResponse.Item.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.linkId(parseString("linkId", getJsonValue(jsonObject, "linkId", JsonString.class), jsonObject.get("_linkId"), -1)); builder.definition(parseUri("definition", getJsonValue(jsonObject, "definition", JsonString.class), jsonObject.get("_definition"), -1)); @@ -17254,10 +17748,11 @@ private QuestionnaireResponse.Item.Answer parseQuestionnaireResponseItemAnswer(j return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(QuestionnaireResponse.Item.Answer.class, jsonObject); } QuestionnaireResponse.Item.Answer.Builder builder = QuestionnaireResponse.Item.Answer.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.value(parseChoiceElement("value", jsonObject, Boolean.class, Decimal.class, Integer.class, Date.class, DateTime.class, Time.class, String.class, Uri.class, Attachment.class, Coding.class, Quantity.class, Reference.class)); JsonArray itemArray = getJsonArray(jsonObject, "item"); @@ -17275,10 +17770,11 @@ private Range parseRange(java.lang.String elementName, JsonObject jsonObject, in return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Range.class, jsonObject); } Range.Builder builder = Range.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.low((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "low", getJsonValue(jsonObject, "low", JsonObject.class), -1)); builder.high((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "high", getJsonValue(jsonObject, "high", JsonObject.class), -1)); @@ -17291,10 +17787,11 @@ private Ratio parseRatio(java.lang.String elementName, JsonObject jsonObject, in return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Ratio.class, jsonObject); } Ratio.Builder builder = Ratio.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.numerator(parseQuantity("numerator", getJsonValue(jsonObject, "numerator", JsonObject.class), -1)); builder.denominator(parseQuantity("denominator", getJsonValue(jsonObject, "denominator", JsonObject.class), -1)); @@ -17307,10 +17804,11 @@ private Reference parseReference(java.lang.String elementName, JsonObject jsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Reference.class, jsonObject); } Reference.Builder builder = Reference.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.reference(parseString("reference", getJsonValue(jsonObject, "reference", JsonString.class), jsonObject.get("_reference"), -1)); builder.type(parseUri("type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); @@ -17325,10 +17823,11 @@ private RelatedArtifact parseRelatedArtifact(java.lang.String elementName, JsonO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RelatedArtifact.class, jsonObject); } RelatedArtifact.Builder builder = RelatedArtifact.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.type((RelatedArtifactType) parseString(RelatedArtifactType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.label(parseString("label", getJsonValue(jsonObject, "label", JsonString.class), jsonObject.get("_label"), -1)); @@ -17346,10 +17845,11 @@ private RelatedPerson parseRelatedPerson(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RelatedPerson.class, jsonObject); } RelatedPerson.Builder builder = RelatedPerson.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -17407,10 +17907,11 @@ private RelatedPerson.Communication parseRelatedPersonCommunication(java.lang.St return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RelatedPerson.Communication.class, jsonObject); } RelatedPerson.Communication.Builder builder = RelatedPerson.Communication.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.language(parseCodeableConcept("language", getJsonValue(jsonObject, "language", JsonObject.class), -1)); builder.preferred(parseBoolean("preferred", getJsonValue(jsonObject, "preferred", JsonValue.class), jsonObject.get("_preferred"), -1)); @@ -17423,10 +17924,11 @@ private RequestGroup parseRequestGroup(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RequestGroup.class, jsonObject); } RequestGroup.Builder builder = RequestGroup.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -17502,10 +18004,11 @@ private RequestGroup.Action parseRequestGroupAction(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RequestGroup.Action.class, jsonObject); } RequestGroup.Action.Builder builder = RequestGroup.Action.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.prefix(parseString("prefix", getJsonValue(jsonObject, "prefix", JsonString.class), jsonObject.get("_prefix"), -1)); builder.title(parseString("title", getJsonValue(jsonObject, "title", JsonString.class), jsonObject.get("_title"), -1)); @@ -17565,10 +18068,11 @@ private RequestGroup.Action.Condition parseRequestGroupActionCondition(java.lang return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RequestGroup.Action.Condition.class, jsonObject); } RequestGroup.Action.Condition.Builder builder = RequestGroup.Action.Condition.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.kind((ActionConditionKind) parseString(ActionConditionKind.builder(), "kind", getJsonValue(jsonObject, "kind", JsonString.class), jsonObject.get("_kind"), -1)); builder.expression(parseExpression("expression", getJsonValue(jsonObject, "expression", JsonObject.class), -1)); @@ -17581,10 +18085,11 @@ private RequestGroup.Action.RelatedAction parseRequestGroupActionRelatedAction(j return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RequestGroup.Action.RelatedAction.class, jsonObject); } RequestGroup.Action.RelatedAction.Builder builder = RequestGroup.Action.RelatedAction.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.actionId((Id) parseString(Id.builder(), "actionId", getJsonValue(jsonObject, "actionId", JsonString.class), jsonObject.get("_actionId"), -1)); builder.relationship((ActionRelationshipType) parseString(ActionRelationshipType.builder(), "relationship", getJsonValue(jsonObject, "relationship", JsonString.class), jsonObject.get("_relationship"), -1)); @@ -17598,10 +18103,11 @@ private ResearchDefinition parseResearchDefinition(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ResearchDefinition.class, jsonObject); } ResearchDefinition.Builder builder = ResearchDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -17708,10 +18214,11 @@ private ResearchElementDefinition parseResearchElementDefinition(java.lang.Strin return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ResearchElementDefinition.class, jsonObject); } ResearchElementDefinition.Builder builder = ResearchElementDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -17822,10 +18329,11 @@ private ResearchElementDefinition.Characteristic parseResearchElementDefinitionC return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ResearchElementDefinition.Characteristic.class, jsonObject); } ResearchElementDefinition.Characteristic.Builder builder = ResearchElementDefinition.Characteristic.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.definition(parseChoiceElement("definition", jsonObject, CodeableConcept.class, Canonical.class, Expression.class, DataRequirement.class)); JsonArray usageContextArray = getJsonArray(jsonObject, "usageContext"); @@ -17853,10 +18361,11 @@ private ResearchStudy parseResearchStudy(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ResearchStudy.class, jsonObject); } ResearchStudy.Builder builder = ResearchStudy.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -17966,10 +18475,11 @@ private ResearchStudy.Arm parseResearchStudyArm(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ResearchStudy.Arm.class, jsonObject); } ResearchStudy.Arm.Builder builder = ResearchStudy.Arm.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -17983,10 +18493,11 @@ private ResearchStudy.Objective parseResearchStudyObjective(java.lang.String ele return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ResearchStudy.Objective.class, jsonObject); } ResearchStudy.Objective.Builder builder = ResearchStudy.Objective.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -17999,10 +18510,11 @@ private ResearchSubject parseResearchSubject(java.lang.String elementName, JsonO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ResearchSubject.class, jsonObject); } ResearchSubject.Builder builder = ResearchSubject.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -18022,6 +18534,7 @@ private ResearchSubject parseResearchSubject(java.lang.String elementName, JsonO } private void parseResource(Resource.Builder builder, JsonObject jsonObject) { + builder.setValidating(validating); builder.id(parseJavaString("id", getJsonValue(jsonObject, "id", JsonString.class), -1)); builder.meta(parseMeta("meta", getJsonValue(jsonObject, "meta", JsonObject.class), -1)); builder.implicitRules(parseUri("implicitRules", getJsonValue(jsonObject, "implicitRules", JsonString.class), jsonObject.get("_implicitRules"), -1)); @@ -18033,10 +18546,11 @@ private RiskAssessment parseRiskAssessment(java.lang.String elementName, JsonObj return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RiskAssessment.class, jsonObject); } RiskAssessment.Builder builder = RiskAssessment.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -18094,10 +18608,11 @@ private RiskAssessment.Prediction parseRiskAssessmentPrediction(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RiskAssessment.Prediction.class, jsonObject); } RiskAssessment.Prediction.Builder builder = RiskAssessment.Prediction.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.outcome(parseCodeableConcept("outcome", getJsonValue(jsonObject, "outcome", JsonObject.class), -1)); builder.probability(parseChoiceElement("probability", jsonObject, Decimal.class, Range.class)); @@ -18114,10 +18629,11 @@ private RiskEvidenceSynthesis parseRiskEvidenceSynthesis(java.lang.String elemen return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RiskEvidenceSynthesis.class, jsonObject); } RiskEvidenceSynthesis.Builder builder = RiskEvidenceSynthesis.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -18219,10 +18735,11 @@ private RiskEvidenceSynthesis.Certainty parseRiskEvidenceSynthesisCertainty(java return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RiskEvidenceSynthesis.Certainty.class, jsonObject); } RiskEvidenceSynthesis.Certainty.Builder builder = RiskEvidenceSynthesis.Certainty.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray ratingArray = getJsonArray(jsonObject, "rating"); if (ratingArray != null) { @@ -18251,10 +18768,11 @@ private RiskEvidenceSynthesis.Certainty.CertaintySubcomponent parseRiskEvidenceS return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RiskEvidenceSynthesis.Certainty.CertaintySubcomponent.class, jsonObject); } RiskEvidenceSynthesis.Certainty.CertaintySubcomponent.Builder builder = RiskEvidenceSynthesis.Certainty.CertaintySubcomponent.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); JsonArray ratingArray = getJsonArray(jsonObject, "rating"); @@ -18278,10 +18796,11 @@ private RiskEvidenceSynthesis.RiskEstimate parseRiskEvidenceSynthesisRiskEstimat return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RiskEvidenceSynthesis.RiskEstimate.class, jsonObject); } RiskEvidenceSynthesis.RiskEstimate.Builder builder = RiskEvidenceSynthesis.RiskEstimate.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -18304,10 +18823,11 @@ private RiskEvidenceSynthesis.RiskEstimate.PrecisionEstimate parseRiskEvidenceSy return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RiskEvidenceSynthesis.RiskEstimate.PrecisionEstimate.class, jsonObject); } RiskEvidenceSynthesis.RiskEstimate.PrecisionEstimate.Builder builder = RiskEvidenceSynthesis.RiskEstimate.PrecisionEstimate.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.level(parseDecimal("level", getJsonValue(jsonObject, "level", JsonNumber.class), jsonObject.get("_level"), -1)); @@ -18322,10 +18842,11 @@ private RiskEvidenceSynthesis.SampleSize parseRiskEvidenceSynthesisSampleSize(ja return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(RiskEvidenceSynthesis.SampleSize.class, jsonObject); } RiskEvidenceSynthesis.SampleSize.Builder builder = RiskEvidenceSynthesis.SampleSize.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.numberOfStudies(parseInteger("numberOfStudies", getJsonValue(jsonObject, "numberOfStudies", JsonNumber.class), jsonObject.get("_numberOfStudies"), -1)); @@ -18339,10 +18860,11 @@ private SampledData parseSampledData(java.lang.String elementName, JsonObject js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SampledData.class, jsonObject); } SampledData.Builder builder = SampledData.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.origin((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "origin", getJsonValue(jsonObject, "origin", JsonObject.class), -1)); builder.period(parseDecimal("period", getJsonValue(jsonObject, "period", JsonNumber.class), jsonObject.get("_period"), -1)); @@ -18360,10 +18882,11 @@ private Schedule parseSchedule(java.lang.String elementName, JsonObject jsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Schedule.class, jsonObject); } Schedule.Builder builder = Schedule.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -18407,10 +18930,11 @@ private SearchParameter parseSearchParameter(java.lang.String elementName, JsonO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SearchParameter.class, jsonObject); } SearchParameter.Builder builder = SearchParameter.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); builder.version(parseString("version", getJsonValue(jsonObject, "version", JsonString.class), jsonObject.get("_version"), -1)); @@ -18497,10 +19021,11 @@ private SearchParameter.Component parseSearchParameterComponent(java.lang.String return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SearchParameter.Component.class, jsonObject); } SearchParameter.Component.Builder builder = SearchParameter.Component.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.definition((Canonical) parseUri(Canonical.builder(), "definition", getJsonValue(jsonObject, "definition", JsonString.class), jsonObject.get("_definition"), -1)); builder.expression(parseString("expression", getJsonValue(jsonObject, "expression", JsonString.class), jsonObject.get("_expression"), -1)); @@ -18513,10 +19038,11 @@ private ServiceRequest parseServiceRequest(java.lang.String elementName, JsonObj return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ServiceRequest.class, jsonObject); } ServiceRequest.Builder builder = ServiceRequest.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -18652,10 +19178,11 @@ private Signature parseSignature(java.lang.String elementName, JsonObject jsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Signature.class, jsonObject); } Signature.Builder builder = Signature.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); JsonArray typeArray = getJsonArray(jsonObject, "type"); if (typeArray != null) { @@ -18678,10 +19205,11 @@ private Slot parseSlot(java.lang.String elementName, JsonObject jsonObject, int return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Slot.class, jsonObject); } Slot.Builder builder = Slot.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -18723,10 +19251,11 @@ private Specimen parseSpecimen(java.lang.String elementName, JsonObject jsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Specimen.class, jsonObject); } Specimen.Builder builder = Specimen.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -18785,10 +19314,11 @@ private Specimen.Collection parseSpecimenCollection(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Specimen.Collection.class, jsonObject); } Specimen.Collection.Builder builder = Specimen.Collection.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.collector(parseReference("collector", getJsonValue(jsonObject, "collector", JsonObject.class), -1)); builder.collected(parseChoiceElement("collected", jsonObject, DateTime.class, Period.class)); @@ -18806,10 +19336,11 @@ private Specimen.Container parseSpecimenContainer(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Specimen.Container.class, jsonObject); } Specimen.Container.Builder builder = Specimen.Container.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -18831,10 +19362,11 @@ private Specimen.Processing parseSpecimenProcessing(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Specimen.Processing.class, jsonObject); } Specimen.Processing.Builder builder = Specimen.Processing.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.procedure(parseCodeableConcept("procedure", getJsonValue(jsonObject, "procedure", JsonObject.class), -1)); @@ -18854,10 +19386,11 @@ private SpecimenDefinition parseSpecimenDefinition(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SpecimenDefinition.class, jsonObject); } SpecimenDefinition.Builder builder = SpecimenDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.typeCollected(parseCodeableConcept("typeCollected", getJsonValue(jsonObject, "typeCollected", JsonObject.class), -1)); @@ -18889,10 +19422,11 @@ private SpecimenDefinition.TypeTested parseSpecimenDefinitionTypeTested(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SpecimenDefinition.TypeTested.class, jsonObject); } SpecimenDefinition.TypeTested.Builder builder = SpecimenDefinition.TypeTested.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.isDerived(parseBoolean("isDerived", getJsonValue(jsonObject, "isDerived", JsonValue.class), jsonObject.get("_isDerived"), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -18921,10 +19455,11 @@ private SpecimenDefinition.TypeTested.Container parseSpecimenDefinitionTypeTeste return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SpecimenDefinition.TypeTested.Container.class, jsonObject); } SpecimenDefinition.TypeTested.Container.Builder builder = SpecimenDefinition.TypeTested.Container.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.material(parseCodeableConcept("material", getJsonValue(jsonObject, "material", JsonObject.class), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -18948,10 +19483,11 @@ private SpecimenDefinition.TypeTested.Container.Additive parseSpecimenDefinition return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SpecimenDefinition.TypeTested.Container.Additive.class, jsonObject); } SpecimenDefinition.TypeTested.Container.Additive.Builder builder = SpecimenDefinition.TypeTested.Container.Additive.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.additive(parseChoiceElement("additive", jsonObject, CodeableConcept.class, Reference.class)); stackPop(); @@ -18963,10 +19499,11 @@ private SpecimenDefinition.TypeTested.Handling parseSpecimenDefinitionTypeTested return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SpecimenDefinition.TypeTested.Handling.class, jsonObject); } SpecimenDefinition.TypeTested.Handling.Builder builder = SpecimenDefinition.TypeTested.Handling.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.temperatureQualifier(parseCodeableConcept("temperatureQualifier", getJsonValue(jsonObject, "temperatureQualifier", JsonObject.class), -1)); builder.temperatureRange(parseRange("temperatureRange", getJsonValue(jsonObject, "temperatureRange", JsonObject.class), -1)); @@ -18981,9 +19518,10 @@ private String parseString(String.Builder builder, java.lang.String elementName, return null; } stackPush(elementName, elementIndex); + builder.setValidating(validating); if (_jsonValue != null && _jsonValue.getValueType() == JsonValue.ValueType.OBJECT) { JsonObject jsonObject = (JsonObject) _jsonValue; - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Element.class, jsonObject); } parseElement(builder, jsonObject); @@ -19009,10 +19547,11 @@ private StructureDefinition parseStructureDefinition(java.lang.String elementNam return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureDefinition.class, jsonObject); } StructureDefinition.Builder builder = StructureDefinition.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -19091,10 +19630,11 @@ private StructureDefinition.Context parseStructureDefinitionContext(java.lang.St return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureDefinition.Context.class, jsonObject); } StructureDefinition.Context.Builder builder = StructureDefinition.Context.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((ExtensionContextType) parseString(ExtensionContextType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.expression(parseString("expression", getJsonValue(jsonObject, "expression", JsonString.class), jsonObject.get("_expression"), -1)); @@ -19107,10 +19647,11 @@ private StructureDefinition.Differential parseStructureDefinitionDifferential(ja return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureDefinition.Differential.class, jsonObject); } StructureDefinition.Differential.Builder builder = StructureDefinition.Differential.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray elementArray = getJsonArray(jsonObject, "element"); if (elementArray != null) { @@ -19127,10 +19668,11 @@ private StructureDefinition.Mapping parseStructureDefinitionMapping(java.lang.St return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureDefinition.Mapping.class, jsonObject); } StructureDefinition.Mapping.Builder builder = StructureDefinition.Mapping.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.identity((Id) parseString(Id.builder(), "identity", getJsonValue(jsonObject, "identity", JsonString.class), jsonObject.get("_identity"), -1)); builder.uri(parseUri("uri", getJsonValue(jsonObject, "uri", JsonString.class), jsonObject.get("_uri"), -1)); @@ -19145,10 +19687,11 @@ private StructureDefinition.Snapshot parseStructureDefinitionSnapshot(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureDefinition.Snapshot.class, jsonObject); } StructureDefinition.Snapshot.Builder builder = StructureDefinition.Snapshot.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray elementArray = getJsonArray(jsonObject, "element"); if (elementArray != null) { @@ -19165,10 +19708,11 @@ private StructureMap parseStructureMap(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureMap.class, jsonObject); } StructureMap.Builder builder = StructureMap.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -19233,10 +19777,11 @@ private StructureMap.Group parseStructureMapGroup(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureMap.Group.class, jsonObject); } StructureMap.Group.Builder builder = StructureMap.Group.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name((Id) parseString(Id.builder(), "name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder._extends((Id) parseString(Id.builder(), "extends", getJsonValue(jsonObject, "extends", JsonString.class), jsonObject.get("_extends"), -1)); @@ -19263,10 +19808,11 @@ private StructureMap.Group.Input parseStructureMapGroupInput(java.lang.String el return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureMap.Group.Input.class, jsonObject); } StructureMap.Group.Input.Builder builder = StructureMap.Group.Input.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name((Id) parseString(Id.builder(), "name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.type(parseString("type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); @@ -19281,10 +19827,11 @@ private StructureMap.Group.Rule parseStructureMapGroupRule(java.lang.String elem return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureMap.Group.Rule.class, jsonObject); } StructureMap.Group.Rule.Builder builder = StructureMap.Group.Rule.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name((Id) parseString(Id.builder(), "name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); JsonArray sourceArray = getJsonArray(jsonObject, "source"); @@ -19321,10 +19868,11 @@ private StructureMap.Group.Rule.Dependent parseStructureMapGroupRuleDependent(ja return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureMap.Group.Rule.Dependent.class, jsonObject); } StructureMap.Group.Rule.Dependent.Builder builder = StructureMap.Group.Rule.Dependent.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name((Id) parseString(Id.builder(), "name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); JsonArray variableArray = getJsonArray(jsonObject, "variable", true); @@ -19343,10 +19891,11 @@ private StructureMap.Group.Rule.Source parseStructureMapGroupRuleSource(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureMap.Group.Rule.Source.class, jsonObject); } StructureMap.Group.Rule.Source.Builder builder = StructureMap.Group.Rule.Source.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.context((Id) parseString(Id.builder(), "context", getJsonValue(jsonObject, "context", JsonString.class), jsonObject.get("_context"), -1)); builder.min(parseInteger("min", getJsonValue(jsonObject, "min", JsonNumber.class), jsonObject.get("_min"), -1)); @@ -19368,10 +19917,11 @@ private StructureMap.Group.Rule.Target parseStructureMapGroupRuleTarget(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureMap.Group.Rule.Target.class, jsonObject); } StructureMap.Group.Rule.Target.Builder builder = StructureMap.Group.Rule.Target.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.context((Id) parseString(Id.builder(), "context", getJsonValue(jsonObject, "context", JsonString.class), jsonObject.get("_context"), -1)); builder.contextType((StructureMapContextType) parseString(StructureMapContextType.builder(), "contextType", getJsonValue(jsonObject, "contextType", JsonString.class), jsonObject.get("_contextType"), -1)); @@ -19401,10 +19951,11 @@ private StructureMap.Group.Rule.Target.Parameter parseStructureMapGroupRuleTarge return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureMap.Group.Rule.Target.Parameter.class, jsonObject); } StructureMap.Group.Rule.Target.Parameter.Builder builder = StructureMap.Group.Rule.Target.Parameter.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.value(parseChoiceElement("value", jsonObject, Id.class, String.class, Boolean.class, Integer.class, Decimal.class)); stackPop(); @@ -19416,10 +19967,11 @@ private StructureMap.Structure parseStructureMapStructure(java.lang.String eleme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(StructureMap.Structure.class, jsonObject); } StructureMap.Structure.Builder builder = StructureMap.Structure.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.url((Canonical) parseUri(Canonical.builder(), "url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); builder.mode((StructureMapModelMode) parseString(StructureMapModelMode.builder(), "mode", getJsonValue(jsonObject, "mode", JsonString.class), jsonObject.get("_mode"), -1)); @@ -19434,10 +19986,11 @@ private Subscription parseSubscription(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Subscription.class, jsonObject); } Subscription.Builder builder = Subscription.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.status((SubscriptionStatus) parseString(SubscriptionStatus.builder(), "status", getJsonValue(jsonObject, "status", JsonString.class), jsonObject.get("_status"), -1)); JsonArray contactArray = getJsonArray(jsonObject, "contact"); @@ -19460,10 +20013,11 @@ private Subscription.Channel parseSubscriptionChannel(java.lang.String elementNa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Subscription.Channel.class, jsonObject); } Subscription.Channel.Builder builder = Subscription.Channel.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((SubscriptionChannelType) parseString(SubscriptionChannelType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.endpoint((Url) parseUri(Url.builder(), "endpoint", getJsonValue(jsonObject, "endpoint", JsonString.class), jsonObject.get("_endpoint"), -1)); @@ -19484,10 +20038,11 @@ private Substance parseSubstance(java.lang.String elementName, JsonObject jsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Substance.class, jsonObject); } Substance.Builder builder = Substance.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -19525,10 +20080,11 @@ private Substance.Ingredient parseSubstanceIngredient(java.lang.String elementNa return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Substance.Ingredient.class, jsonObject); } Substance.Ingredient.Builder builder = Substance.Ingredient.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.quantity(parseRatio("quantity", getJsonValue(jsonObject, "quantity", JsonObject.class), -1)); builder.substance(parseChoiceElement("substance", jsonObject, CodeableConcept.class, Reference.class)); @@ -19541,10 +20097,11 @@ private Substance.Instance parseSubstanceInstance(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Substance.Instance.class, jsonObject); } Substance.Instance.Builder builder = Substance.Instance.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.expiry(parseDateTime("expiry", getJsonValue(jsonObject, "expiry", JsonString.class), jsonObject.get("_expiry"), -1)); @@ -19558,10 +20115,11 @@ private SubstanceAmount parseSubstanceAmount(java.lang.String elementName, JsonO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceAmount.class, jsonObject); } SubstanceAmount.Builder builder = SubstanceAmount.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.amount(parseChoiceElement("amount", jsonObject, Quantity.class, Range.class, String.class)); builder.amountType(parseCodeableConcept("amountType", getJsonValue(jsonObject, "amountType", JsonObject.class), -1)); @@ -19576,10 +20134,11 @@ private SubstanceAmount.ReferenceRange parseSubstanceAmountReferenceRange(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceAmount.ReferenceRange.class, jsonObject); } SubstanceAmount.ReferenceRange.Builder builder = SubstanceAmount.ReferenceRange.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.lowLimit(parseQuantity("lowLimit", getJsonValue(jsonObject, "lowLimit", JsonObject.class), -1)); builder.highLimit(parseQuantity("highLimit", getJsonValue(jsonObject, "highLimit", JsonObject.class), -1)); @@ -19592,10 +20151,11 @@ private SubstanceNucleicAcid parseSubstanceNucleicAcid(java.lang.String elementN return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceNucleicAcid.class, jsonObject); } SubstanceNucleicAcid.Builder builder = SubstanceNucleicAcid.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.sequenceType(parseCodeableConcept("sequenceType", getJsonValue(jsonObject, "sequenceType", JsonObject.class), -1)); builder.numberOfSubunits(parseInteger("numberOfSubunits", getJsonValue(jsonObject, "numberOfSubunits", JsonNumber.class), jsonObject.get("_numberOfSubunits"), -1)); @@ -19616,10 +20176,11 @@ private SubstanceNucleicAcid.Subunit parseSubstanceNucleicAcidSubunit(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceNucleicAcid.Subunit.class, jsonObject); } SubstanceNucleicAcid.Subunit.Builder builder = SubstanceNucleicAcid.Subunit.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.subunit(parseInteger("subunit", getJsonValue(jsonObject, "subunit", JsonNumber.class), jsonObject.get("_subunit"), -1)); builder.sequence(parseString("sequence", getJsonValue(jsonObject, "sequence", JsonString.class), jsonObject.get("_sequence"), -1)); @@ -19648,10 +20209,11 @@ private SubstanceNucleicAcid.Subunit.Linkage parseSubstanceNucleicAcidSubunitLin return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceNucleicAcid.Subunit.Linkage.class, jsonObject); } SubstanceNucleicAcid.Subunit.Linkage.Builder builder = SubstanceNucleicAcid.Subunit.Linkage.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.connectivity(parseString("connectivity", getJsonValue(jsonObject, "connectivity", JsonString.class), jsonObject.get("_connectivity"), -1)); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); @@ -19666,10 +20228,11 @@ private SubstanceNucleicAcid.Subunit.Sugar parseSubstanceNucleicAcidSubunitSugar return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceNucleicAcid.Subunit.Sugar.class, jsonObject); } SubstanceNucleicAcid.Subunit.Sugar.Builder builder = SubstanceNucleicAcid.Subunit.Sugar.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); @@ -19683,10 +20246,11 @@ private SubstancePolymer parseSubstancePolymer(java.lang.String elementName, Jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstancePolymer.class, jsonObject); } SubstancePolymer.Builder builder = SubstancePolymer.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.clazz(parseCodeableConcept("class", getJsonValue(jsonObject, "class", JsonObject.class), -1)); builder.geometry(parseCodeableConcept("geometry", getJsonValue(jsonObject, "geometry", JsonObject.class), -1)); @@ -19724,10 +20288,11 @@ private SubstancePolymer.MonomerSet parseSubstancePolymerMonomerSet(java.lang.St return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstancePolymer.MonomerSet.class, jsonObject); } SubstancePolymer.MonomerSet.Builder builder = SubstancePolymer.MonomerSet.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.ratioType(parseCodeableConcept("ratioType", getJsonValue(jsonObject, "ratioType", JsonObject.class), -1)); JsonArray startingMaterialArray = getJsonArray(jsonObject, "startingMaterial"); @@ -19745,10 +20310,11 @@ private SubstancePolymer.MonomerSet.StartingMaterial parseSubstancePolymerMonome return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstancePolymer.MonomerSet.StartingMaterial.class, jsonObject); } SubstancePolymer.MonomerSet.StartingMaterial.Builder builder = SubstancePolymer.MonomerSet.StartingMaterial.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.material(parseCodeableConcept("material", getJsonValue(jsonObject, "material", JsonObject.class), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -19763,10 +20329,11 @@ private SubstancePolymer.Repeat parseSubstancePolymerRepeat(java.lang.String ele return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstancePolymer.Repeat.class, jsonObject); } SubstancePolymer.Repeat.Builder builder = SubstancePolymer.Repeat.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.numberOfUnits(parseInteger("numberOfUnits", getJsonValue(jsonObject, "numberOfUnits", JsonNumber.class), jsonObject.get("_numberOfUnits"), -1)); builder.averageMolecularFormula(parseString("averageMolecularFormula", getJsonValue(jsonObject, "averageMolecularFormula", JsonString.class), jsonObject.get("_averageMolecularFormula"), -1)); @@ -19786,10 +20353,11 @@ private SubstancePolymer.Repeat.RepeatUnit parseSubstancePolymerRepeatRepeatUnit return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstancePolymer.Repeat.RepeatUnit.class, jsonObject); } SubstancePolymer.Repeat.RepeatUnit.Builder builder = SubstancePolymer.Repeat.RepeatUnit.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.orientationOfPolymerisation(parseCodeableConcept("orientationOfPolymerisation", getJsonValue(jsonObject, "orientationOfPolymerisation", JsonObject.class), -1)); builder.repeatUnit(parseString("repeatUnit", getJsonValue(jsonObject, "repeatUnit", JsonString.class), jsonObject.get("_repeatUnit"), -1)); @@ -19815,10 +20383,11 @@ private SubstancePolymer.Repeat.RepeatUnit.DegreeOfPolymerisation parseSubstance return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstancePolymer.Repeat.RepeatUnit.DegreeOfPolymerisation.class, jsonObject); } SubstancePolymer.Repeat.RepeatUnit.DegreeOfPolymerisation.Builder builder = SubstancePolymer.Repeat.RepeatUnit.DegreeOfPolymerisation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.degree(parseCodeableConcept("degree", getJsonValue(jsonObject, "degree", JsonObject.class), -1)); builder.amount(parseSubstanceAmount("amount", getJsonValue(jsonObject, "amount", JsonObject.class), -1)); @@ -19831,10 +20400,11 @@ private SubstancePolymer.Repeat.RepeatUnit.StructuralRepresentation parseSubstan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstancePolymer.Repeat.RepeatUnit.StructuralRepresentation.class, jsonObject); } SubstancePolymer.Repeat.RepeatUnit.StructuralRepresentation.Builder builder = SubstancePolymer.Repeat.RepeatUnit.StructuralRepresentation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.representation(parseString("representation", getJsonValue(jsonObject, "representation", JsonString.class), jsonObject.get("_representation"), -1)); @@ -19848,10 +20418,11 @@ private SubstanceProtein parseSubstanceProtein(java.lang.String elementName, Jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceProtein.class, jsonObject); } SubstanceProtein.Builder builder = SubstanceProtein.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.sequenceType(parseCodeableConcept("sequenceType", getJsonValue(jsonObject, "sequenceType", JsonObject.class), -1)); builder.numberOfSubunits(parseInteger("numberOfSubunits", getJsonValue(jsonObject, "numberOfSubunits", JsonNumber.class), jsonObject.get("_numberOfSubunits"), -1)); @@ -19877,10 +20448,11 @@ private SubstanceProtein.Subunit parseSubstanceProteinSubunit(java.lang.String e return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceProtein.Subunit.class, jsonObject); } SubstanceProtein.Subunit.Builder builder = SubstanceProtein.Subunit.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.subunit(parseInteger("subunit", getJsonValue(jsonObject, "subunit", JsonNumber.class), jsonObject.get("_subunit"), -1)); builder.sequence(parseString("sequence", getJsonValue(jsonObject, "sequence", JsonString.class), jsonObject.get("_sequence"), -1)); @@ -19899,10 +20471,11 @@ private SubstanceReferenceInformation parseSubstanceReferenceInformation(java.la return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceReferenceInformation.class, jsonObject); } SubstanceReferenceInformation.Builder builder = SubstanceReferenceInformation.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.comment(parseString("comment", getJsonValue(jsonObject, "comment", JsonString.class), jsonObject.get("_comment"), -1)); JsonArray geneArray = getJsonArray(jsonObject, "gene"); @@ -19938,10 +20511,11 @@ private SubstanceReferenceInformation.Classification parseSubstanceReferenceInfo return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceReferenceInformation.Classification.class, jsonObject); } SubstanceReferenceInformation.Classification.Builder builder = SubstanceReferenceInformation.Classification.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.domain(parseCodeableConcept("domain", getJsonValue(jsonObject, "domain", JsonObject.class), -1)); builder.classification(parseCodeableConcept("classification", getJsonValue(jsonObject, "classification", JsonObject.class), -1)); @@ -19966,10 +20540,11 @@ private SubstanceReferenceInformation.Gene parseSubstanceReferenceInformationGen return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceReferenceInformation.Gene.class, jsonObject); } SubstanceReferenceInformation.Gene.Builder builder = SubstanceReferenceInformation.Gene.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.geneSequenceOrigin(parseCodeableConcept("geneSequenceOrigin", getJsonValue(jsonObject, "geneSequenceOrigin", JsonObject.class), -1)); builder.gene(parseCodeableConcept("gene", getJsonValue(jsonObject, "gene", JsonObject.class), -1)); @@ -19988,10 +20563,11 @@ private SubstanceReferenceInformation.GeneElement parseSubstanceReferenceInforma return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceReferenceInformation.GeneElement.class, jsonObject); } SubstanceReferenceInformation.GeneElement.Builder builder = SubstanceReferenceInformation.GeneElement.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.element(parseIdentifier("element", getJsonValue(jsonObject, "element", JsonObject.class), -1)); @@ -20010,10 +20586,11 @@ private SubstanceReferenceInformation.Target parseSubstanceReferenceInformationT return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceReferenceInformation.Target.class, jsonObject); } SubstanceReferenceInformation.Target.Builder builder = SubstanceReferenceInformation.Target.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.target(parseIdentifier("target", getJsonValue(jsonObject, "target", JsonObject.class), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -20037,10 +20614,11 @@ private SubstanceSourceMaterial parseSubstanceSourceMaterial(java.lang.String el return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSourceMaterial.class, jsonObject); } SubstanceSourceMaterial.Builder builder = SubstanceSourceMaterial.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.sourceMaterialClass(parseCodeableConcept("sourceMaterialClass", getJsonValue(jsonObject, "sourceMaterialClass", JsonObject.class), -1)); builder.sourceMaterialType(parseCodeableConcept("sourceMaterialType", getJsonValue(jsonObject, "sourceMaterialType", JsonObject.class), -1)); @@ -20096,10 +20674,11 @@ private SubstanceSourceMaterial.FractionDescription parseSubstanceSourceMaterial return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSourceMaterial.FractionDescription.class, jsonObject); } SubstanceSourceMaterial.FractionDescription.Builder builder = SubstanceSourceMaterial.FractionDescription.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.fraction(parseString("fraction", getJsonValue(jsonObject, "fraction", JsonString.class), jsonObject.get("_fraction"), -1)); builder.materialType(parseCodeableConcept("materialType", getJsonValue(jsonObject, "materialType", JsonObject.class), -1)); @@ -20112,10 +20691,11 @@ private SubstanceSourceMaterial.Organism parseSubstanceSourceMaterialOrganism(ja return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSourceMaterial.Organism.class, jsonObject); } SubstanceSourceMaterial.Organism.Builder builder = SubstanceSourceMaterial.Organism.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.family(parseCodeableConcept("family", getJsonValue(jsonObject, "family", JsonObject.class), -1)); builder.genus(parseCodeableConcept("genus", getJsonValue(jsonObject, "genus", JsonObject.class), -1)); @@ -20139,10 +20719,11 @@ private SubstanceSourceMaterial.Organism.Author parseSubstanceSourceMaterialOrga return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSourceMaterial.Organism.Author.class, jsonObject); } SubstanceSourceMaterial.Organism.Author.Builder builder = SubstanceSourceMaterial.Organism.Author.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.authorType(parseCodeableConcept("authorType", getJsonValue(jsonObject, "authorType", JsonObject.class), -1)); builder.authorDescription(parseString("authorDescription", getJsonValue(jsonObject, "authorDescription", JsonString.class), jsonObject.get("_authorDescription"), -1)); @@ -20155,10 +20736,11 @@ private SubstanceSourceMaterial.Organism.Hybrid parseSubstanceSourceMaterialOrga return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSourceMaterial.Organism.Hybrid.class, jsonObject); } SubstanceSourceMaterial.Organism.Hybrid.Builder builder = SubstanceSourceMaterial.Organism.Hybrid.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.maternalOrganismId(parseString("maternalOrganismId", getJsonValue(jsonObject, "maternalOrganismId", JsonString.class), jsonObject.get("_maternalOrganismId"), -1)); builder.maternalOrganismName(parseString("maternalOrganismName", getJsonValue(jsonObject, "maternalOrganismName", JsonString.class), jsonObject.get("_maternalOrganismName"), -1)); @@ -20174,10 +20756,11 @@ private SubstanceSourceMaterial.Organism.OrganismGeneral parseSubstanceSourceMat return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSourceMaterial.Organism.OrganismGeneral.class, jsonObject); } SubstanceSourceMaterial.Organism.OrganismGeneral.Builder builder = SubstanceSourceMaterial.Organism.OrganismGeneral.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.kingdom(parseCodeableConcept("kingdom", getJsonValue(jsonObject, "kingdom", JsonObject.class), -1)); builder.phylum(parseCodeableConcept("phylum", getJsonValue(jsonObject, "phylum", JsonObject.class), -1)); @@ -20192,10 +20775,11 @@ private SubstanceSourceMaterial.PartDescription parseSubstanceSourceMaterialPart return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSourceMaterial.PartDescription.class, jsonObject); } SubstanceSourceMaterial.PartDescription.Builder builder = SubstanceSourceMaterial.PartDescription.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.part(parseCodeableConcept("part", getJsonValue(jsonObject, "part", JsonObject.class), -1)); builder.partLocation(parseCodeableConcept("partLocation", getJsonValue(jsonObject, "partLocation", JsonObject.class), -1)); @@ -20208,10 +20792,11 @@ private SubstanceSpecification parseSubstanceSpecification(java.lang.String elem return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSpecification.class, jsonObject); } SubstanceSpecification.Builder builder = SubstanceSpecification.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -20276,10 +20861,11 @@ private SubstanceSpecification.Code parseSubstanceSpecificationCode(java.lang.St return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSpecification.Code.class, jsonObject); } SubstanceSpecification.Code.Builder builder = SubstanceSpecification.Code.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.status(parseCodeableConcept("status", getJsonValue(jsonObject, "status", JsonObject.class), -1)); @@ -20300,10 +20886,11 @@ private SubstanceSpecification.Moiety parseSubstanceSpecificationMoiety(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSpecification.Moiety.class, jsonObject); } SubstanceSpecification.Moiety.Builder builder = SubstanceSpecification.Moiety.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.role(parseCodeableConcept("role", getJsonValue(jsonObject, "role", JsonObject.class), -1)); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); @@ -20321,10 +20908,11 @@ private SubstanceSpecification.Name parseSubstanceSpecificationName(java.lang.St return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSpecification.Name.class, jsonObject); } SubstanceSpecification.Name.Builder builder = SubstanceSpecification.Name.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -20381,10 +20969,11 @@ private SubstanceSpecification.Name.Official parseSubstanceSpecificationNameOffi return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSpecification.Name.Official.class, jsonObject); } SubstanceSpecification.Name.Official.Builder builder = SubstanceSpecification.Name.Official.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.authority(parseCodeableConcept("authority", getJsonValue(jsonObject, "authority", JsonObject.class), -1)); builder.status(parseCodeableConcept("status", getJsonValue(jsonObject, "status", JsonObject.class), -1)); @@ -20398,10 +20987,11 @@ private SubstanceSpecification.Property parseSubstanceSpecificationProperty(java return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSpecification.Property.class, jsonObject); } SubstanceSpecification.Property.Builder builder = SubstanceSpecification.Property.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.category(parseCodeableConcept("category", getJsonValue(jsonObject, "category", JsonObject.class), -1)); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); @@ -20417,10 +21007,11 @@ private SubstanceSpecification.Relationship parseSubstanceSpecificationRelations return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSpecification.Relationship.class, jsonObject); } SubstanceSpecification.Relationship.Builder builder = SubstanceSpecification.Relationship.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.substance(parseChoiceElement("substance", jsonObject, Reference.class, CodeableConcept.class)); builder.relationship(parseCodeableConcept("relationship", getJsonValue(jsonObject, "relationship", JsonObject.class), -1)); @@ -20443,10 +21034,11 @@ private SubstanceSpecification.Structure parseSubstanceSpecificationStructure(ja return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSpecification.Structure.class, jsonObject); } SubstanceSpecification.Structure.Builder builder = SubstanceSpecification.Structure.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.stereochemistry(parseCodeableConcept("stereochemistry", getJsonValue(jsonObject, "stereochemistry", JsonObject.class), -1)); builder.opticalActivity(parseCodeableConcept("opticalActivity", getJsonValue(jsonObject, "opticalActivity", JsonObject.class), -1)); @@ -20480,10 +21072,11 @@ private SubstanceSpecification.Structure.Isotope parseSubstanceSpecificationStru return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSpecification.Structure.Isotope.class, jsonObject); } SubstanceSpecification.Structure.Isotope.Builder builder = SubstanceSpecification.Structure.Isotope.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.name(parseCodeableConcept("name", getJsonValue(jsonObject, "name", JsonObject.class), -1)); @@ -20499,10 +21092,11 @@ private SubstanceSpecification.Structure.Isotope.MolecularWeight parseSubstanceS return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSpecification.Structure.Isotope.MolecularWeight.class, jsonObject); } SubstanceSpecification.Structure.Isotope.MolecularWeight.Builder builder = SubstanceSpecification.Structure.Isotope.MolecularWeight.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.method(parseCodeableConcept("method", getJsonValue(jsonObject, "method", JsonObject.class), -1)); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); @@ -20516,10 +21110,11 @@ private SubstanceSpecification.Structure.Representation parseSubstanceSpecificat return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SubstanceSpecification.Structure.Representation.class, jsonObject); } SubstanceSpecification.Structure.Representation.Builder builder = SubstanceSpecification.Structure.Representation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.representation(parseString("representation", getJsonValue(jsonObject, "representation", JsonString.class), jsonObject.get("_representation"), -1)); @@ -20533,10 +21128,11 @@ private SupplyDelivery parseSupplyDelivery(java.lang.String elementName, JsonObj return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SupplyDelivery.class, jsonObject); } SupplyDelivery.Builder builder = SupplyDelivery.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -20578,10 +21174,11 @@ private SupplyDelivery.SuppliedItem parseSupplyDeliverySuppliedItem(java.lang.St return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SupplyDelivery.SuppliedItem.class, jsonObject); } SupplyDelivery.SuppliedItem.Builder builder = SupplyDelivery.SuppliedItem.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.quantity((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "quantity", getJsonValue(jsonObject, "quantity", JsonObject.class), -1)); builder.item(parseChoiceElement("item", jsonObject, CodeableConcept.class, Reference.class)); @@ -20594,10 +21191,11 @@ private SupplyRequest parseSupplyRequest(java.lang.String elementName, JsonObjec return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SupplyRequest.class, jsonObject); } SupplyRequest.Builder builder = SupplyRequest.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -20648,10 +21246,11 @@ private SupplyRequest.Parameter parseSupplyRequestParameter(java.lang.String ele return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(SupplyRequest.Parameter.class, jsonObject); } SupplyRequest.Parameter.Builder builder = SupplyRequest.Parameter.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseCodeableConcept("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.value(parseChoiceElement("value", jsonObject, CodeableConcept.class, Quantity.class, Range.class, Boolean.class)); @@ -20664,10 +21263,11 @@ private Task parseTask(java.lang.String elementName, JsonObject jsonObject, int return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Task.class, jsonObject); } Task.Builder builder = Task.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -20754,10 +21354,11 @@ private Task.Input parseTaskInput(java.lang.String elementName, JsonObject jsonO return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Task.Input.class, jsonObject); } Task.Input.Builder builder = Task.Input.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.value(parseChoiceElement("value", jsonObject, Base64Binary.class, Boolean.class, Canonical.class, Code.class, Date.class, DateTime.class, Decimal.class, Id.class, Instant.class, Integer.class, Markdown.class, Oid.class, PositiveInt.class, String.class, Time.class, UnsignedInt.class, Uri.class, Url.class, Uuid.class, Address.class, Age.class, Annotation.class, Attachment.class, CodeableConcept.class, Coding.class, ContactPoint.class, Count.class, Distance.class, Duration.class, HumanName.class, Identifier.class, Money.class, Period.class, Quantity.class, Range.class, Ratio.class, Reference.class, SampledData.class, Signature.class, Timing.class, ContactDetail.class, Contributor.class, DataRequirement.class, Expression.class, ParameterDefinition.class, RelatedArtifact.class, TriggerDefinition.class, UsageContext.class, Dosage.class, Meta.class)); @@ -20770,10 +21371,11 @@ private Task.Output parseTaskOutput(java.lang.String elementName, JsonObject jso return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Task.Output.class, jsonObject); } Task.Output.Builder builder = Task.Output.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCodeableConcept("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.value(parseChoiceElement("value", jsonObject, Base64Binary.class, Boolean.class, Canonical.class, Code.class, Date.class, DateTime.class, Decimal.class, Id.class, Instant.class, Integer.class, Markdown.class, Oid.class, PositiveInt.class, String.class, Time.class, UnsignedInt.class, Uri.class, Url.class, Uuid.class, Address.class, Age.class, Annotation.class, Attachment.class, CodeableConcept.class, Coding.class, ContactPoint.class, Count.class, Distance.class, Duration.class, HumanName.class, Identifier.class, Money.class, Period.class, Quantity.class, Range.class, Ratio.class, Reference.class, SampledData.class, Signature.class, Timing.class, ContactDetail.class, Contributor.class, DataRequirement.class, Expression.class, ParameterDefinition.class, RelatedArtifact.class, TriggerDefinition.class, UsageContext.class, Dosage.class, Meta.class)); @@ -20786,10 +21388,11 @@ private Task.Restriction parseTaskRestriction(java.lang.String elementName, Json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Task.Restriction.class, jsonObject); } Task.Restriction.Builder builder = Task.Restriction.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.repetitions((PositiveInt) parseInteger(PositiveInt.builder(), "repetitions", getJsonValue(jsonObject, "repetitions", JsonNumber.class), jsonObject.get("_repetitions"), -1)); builder.period(parsePeriod("period", getJsonValue(jsonObject, "period", JsonObject.class), -1)); @@ -20808,10 +21411,11 @@ private TerminologyCapabilities parseTerminologyCapabilities(java.lang.String el return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TerminologyCapabilities.class, jsonObject); } TerminologyCapabilities.Builder builder = TerminologyCapabilities.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); builder.version(parseString("version", getJsonValue(jsonObject, "version", JsonString.class), jsonObject.get("_version"), -1)); @@ -20866,10 +21470,11 @@ private TerminologyCapabilities.Closure parseTerminologyCapabilitiesClosure(java return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TerminologyCapabilities.Closure.class, jsonObject); } TerminologyCapabilities.Closure.Builder builder = TerminologyCapabilities.Closure.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.translation(parseBoolean("translation", getJsonValue(jsonObject, "translation", JsonValue.class), jsonObject.get("_translation"), -1)); stackPop(); @@ -20881,10 +21486,11 @@ private TerminologyCapabilities.CodeSystem parseTerminologyCapabilitiesCodeSyste return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TerminologyCapabilities.CodeSystem.class, jsonObject); } TerminologyCapabilities.CodeSystem.Builder builder = TerminologyCapabilities.CodeSystem.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.uri((Canonical) parseUri(Canonical.builder(), "uri", getJsonValue(jsonObject, "uri", JsonString.class), jsonObject.get("_uri"), -1)); JsonArray versionArray = getJsonArray(jsonObject, "version"); @@ -20903,10 +21509,11 @@ private TerminologyCapabilities.CodeSystem.Version parseTerminologyCapabilitiesC return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TerminologyCapabilities.CodeSystem.Version.class, jsonObject); } TerminologyCapabilities.CodeSystem.Version.Builder builder = TerminologyCapabilities.CodeSystem.Version.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code(parseString("code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.isDefault(parseBoolean("isDefault", getJsonValue(jsonObject, "isDefault", JsonValue.class), jsonObject.get("_isDefault"), -1)); @@ -20940,10 +21547,11 @@ private TerminologyCapabilities.CodeSystem.Version.Filter parseTerminologyCapabi return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TerminologyCapabilities.CodeSystem.Version.Filter.class, jsonObject); } TerminologyCapabilities.CodeSystem.Version.Filter.Builder builder = TerminologyCapabilities.CodeSystem.Version.Filter.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((Code) parseString(Code.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); JsonArray opArray = getJsonArray(jsonObject, "op", true); @@ -20962,10 +21570,11 @@ private TerminologyCapabilities.Expansion parseTerminologyCapabilitiesExpansion( return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TerminologyCapabilities.Expansion.class, jsonObject); } TerminologyCapabilities.Expansion.Builder builder = TerminologyCapabilities.Expansion.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.hierarchical(parseBoolean("hierarchical", getJsonValue(jsonObject, "hierarchical", JsonValue.class), jsonObject.get("_hierarchical"), -1)); builder.paging(parseBoolean("paging", getJsonValue(jsonObject, "paging", JsonValue.class), jsonObject.get("_paging"), -1)); @@ -20986,10 +21595,11 @@ private TerminologyCapabilities.Expansion.Parameter parseTerminologyCapabilities return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TerminologyCapabilities.Expansion.Parameter.class, jsonObject); } TerminologyCapabilities.Expansion.Parameter.Builder builder = TerminologyCapabilities.Expansion.Parameter.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name((Code) parseString(Code.builder(), "name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.documentation(parseString("documentation", getJsonValue(jsonObject, "documentation", JsonString.class), jsonObject.get("_documentation"), -1)); @@ -21002,10 +21612,11 @@ private TerminologyCapabilities.Implementation parseTerminologyCapabilitiesImple return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TerminologyCapabilities.Implementation.class, jsonObject); } TerminologyCapabilities.Implementation.Builder builder = TerminologyCapabilities.Implementation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); builder.url((Url) parseUri(Url.builder(), "url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); @@ -21018,10 +21629,11 @@ private TerminologyCapabilities.Software parseTerminologyCapabilitiesSoftware(ja return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TerminologyCapabilities.Software.class, jsonObject); } TerminologyCapabilities.Software.Builder builder = TerminologyCapabilities.Software.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.version(parseString("version", getJsonValue(jsonObject, "version", JsonString.class), jsonObject.get("_version"), -1)); @@ -21034,10 +21646,11 @@ private TerminologyCapabilities.Translation parseTerminologyCapabilitiesTranslat return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TerminologyCapabilities.Translation.class, jsonObject); } TerminologyCapabilities.Translation.Builder builder = TerminologyCapabilities.Translation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.needsMap(parseBoolean("needsMap", getJsonValue(jsonObject, "needsMap", JsonValue.class), jsonObject.get("_needsMap"), -1)); stackPop(); @@ -21049,10 +21662,11 @@ private TerminologyCapabilities.ValidateCode parseTerminologyCapabilitiesValidat return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TerminologyCapabilities.ValidateCode.class, jsonObject); } TerminologyCapabilities.ValidateCode.Builder builder = TerminologyCapabilities.ValidateCode.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.translations(parseBoolean("translations", getJsonValue(jsonObject, "translations", JsonValue.class), jsonObject.get("_translations"), -1)); stackPop(); @@ -21064,10 +21678,11 @@ private TestReport parseTestReport(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestReport.class, jsonObject); } TestReport.Builder builder = TestReport.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); @@ -21100,10 +21715,11 @@ private TestReport.Participant parseTestReportParticipant(java.lang.String eleme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestReport.Participant.class, jsonObject); } TestReport.Participant.Builder builder = TestReport.Participant.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type((TestReportParticipantType) parseString(TestReportParticipantType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.uri(parseUri("uri", getJsonValue(jsonObject, "uri", JsonString.class), jsonObject.get("_uri"), -1)); @@ -21117,10 +21733,11 @@ private TestReport.Setup parseTestReportSetup(java.lang.String elementName, Json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestReport.Setup.class, jsonObject); } TestReport.Setup.Builder builder = TestReport.Setup.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray actionArray = getJsonArray(jsonObject, "action"); if (actionArray != null) { @@ -21137,10 +21754,11 @@ private TestReport.Setup.Action parseTestReportSetupAction(java.lang.String elem return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestReport.Setup.Action.class, jsonObject); } TestReport.Setup.Action.Builder builder = TestReport.Setup.Action.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.operation(parseTestReportSetupActionOperation("operation", getJsonValue(jsonObject, "operation", JsonObject.class), -1)); builder._assert(parseTestReportSetupActionAssert("assert", getJsonValue(jsonObject, "assert", JsonObject.class), -1)); @@ -21153,10 +21771,11 @@ private TestReport.Setup.Action.Assert parseTestReportSetupActionAssert(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestReport.Setup.Action.Assert.class, jsonObject); } TestReport.Setup.Action.Assert.Builder builder = TestReport.Setup.Action.Assert.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.result((TestReportActionResult) parseString(TestReportActionResult.builder(), "result", getJsonValue(jsonObject, "result", JsonString.class), jsonObject.get("_result"), -1)); builder.message((Markdown) parseString(Markdown.builder(), "message", getJsonValue(jsonObject, "message", JsonString.class), jsonObject.get("_message"), -1)); @@ -21170,10 +21789,11 @@ private TestReport.Setup.Action.Operation parseTestReportSetupActionOperation(ja return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestReport.Setup.Action.Operation.class, jsonObject); } TestReport.Setup.Action.Operation.Builder builder = TestReport.Setup.Action.Operation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.result((TestReportActionResult) parseString(TestReportActionResult.builder(), "result", getJsonValue(jsonObject, "result", JsonString.class), jsonObject.get("_result"), -1)); builder.message((Markdown) parseString(Markdown.builder(), "message", getJsonValue(jsonObject, "message", JsonString.class), jsonObject.get("_message"), -1)); @@ -21187,10 +21807,11 @@ private TestReport.Teardown parseTestReportTeardown(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestReport.Teardown.class, jsonObject); } TestReport.Teardown.Builder builder = TestReport.Teardown.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray actionArray = getJsonArray(jsonObject, "action"); if (actionArray != null) { @@ -21207,10 +21828,11 @@ private TestReport.Teardown.Action parseTestReportTeardownAction(java.lang.Strin return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestReport.Teardown.Action.class, jsonObject); } TestReport.Teardown.Action.Builder builder = TestReport.Teardown.Action.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.operation(parseTestReportSetupActionOperation("operation", getJsonValue(jsonObject, "operation", JsonObject.class), -1)); stackPop(); @@ -21222,10 +21844,11 @@ private TestReport.Test parseTestReportTest(java.lang.String elementName, JsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestReport.Test.class, jsonObject); } TestReport.Test.Builder builder = TestReport.Test.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -21244,10 +21867,11 @@ private TestReport.Test.Action parseTestReportTestAction(java.lang.String elemen return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestReport.Test.Action.class, jsonObject); } TestReport.Test.Action.Builder builder = TestReport.Test.Action.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.operation(parseTestReportSetupActionOperation("operation", getJsonValue(jsonObject, "operation", JsonObject.class), -1)); builder._assert(parseTestReportSetupActionAssert("assert", getJsonValue(jsonObject, "assert", JsonObject.class), -1)); @@ -21260,10 +21884,11 @@ private TestScript parseTestScript(java.lang.String elementName, JsonObject json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.class, jsonObject); } TestScript.Builder builder = TestScript.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); builder.identifier(parseIdentifier("identifier", getJsonValue(jsonObject, "identifier", JsonObject.class), -1)); @@ -21343,10 +21968,11 @@ private TestScript.Destination parseTestScriptDestination(java.lang.String eleme return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Destination.class, jsonObject); } TestScript.Destination.Builder builder = TestScript.Destination.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.index(parseInteger("index", getJsonValue(jsonObject, "index", JsonNumber.class), jsonObject.get("_index"), -1)); builder.profile(parseCoding("profile", getJsonValue(jsonObject, "profile", JsonObject.class), -1)); @@ -21359,10 +21985,11 @@ private TestScript.Fixture parseTestScriptFixture(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Fixture.class, jsonObject); } TestScript.Fixture.Builder builder = TestScript.Fixture.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.autocreate(parseBoolean("autocreate", getJsonValue(jsonObject, "autocreate", JsonValue.class), jsonObject.get("_autocreate"), -1)); builder.autodelete(parseBoolean("autodelete", getJsonValue(jsonObject, "autodelete", JsonValue.class), jsonObject.get("_autodelete"), -1)); @@ -21376,10 +22003,11 @@ private TestScript.Metadata parseTestScriptMetadata(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Metadata.class, jsonObject); } TestScript.Metadata.Builder builder = TestScript.Metadata.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray linkArray = getJsonArray(jsonObject, "link"); if (linkArray != null) { @@ -21402,10 +22030,11 @@ private TestScript.Metadata.Capability parseTestScriptMetadataCapability(java.la return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Metadata.Capability.class, jsonObject); } TestScript.Metadata.Capability.Builder builder = TestScript.Metadata.Capability.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.required(parseBoolean("required", getJsonValue(jsonObject, "required", JsonValue.class), jsonObject.get("_required"), -1)); builder.validated(parseBoolean("validated", getJsonValue(jsonObject, "validated", JsonValue.class), jsonObject.get("_validated"), -1)); @@ -21435,10 +22064,11 @@ private TestScript.Metadata.Link parseTestScriptMetadataLink(java.lang.String el return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Metadata.Link.class, jsonObject); } TestScript.Metadata.Link.Builder builder = TestScript.Metadata.Link.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -21451,10 +22081,11 @@ private TestScript.Origin parseTestScriptOrigin(java.lang.String elementName, Js return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Origin.class, jsonObject); } TestScript.Origin.Builder builder = TestScript.Origin.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.index(parseInteger("index", getJsonValue(jsonObject, "index", JsonNumber.class), jsonObject.get("_index"), -1)); builder.profile(parseCoding("profile", getJsonValue(jsonObject, "profile", JsonObject.class), -1)); @@ -21467,10 +22098,11 @@ private TestScript.Setup parseTestScriptSetup(java.lang.String elementName, Json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Setup.class, jsonObject); } TestScript.Setup.Builder builder = TestScript.Setup.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray actionArray = getJsonArray(jsonObject, "action"); if (actionArray != null) { @@ -21487,10 +22119,11 @@ private TestScript.Setup.Action parseTestScriptSetupAction(java.lang.String elem return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Setup.Action.class, jsonObject); } TestScript.Setup.Action.Builder builder = TestScript.Setup.Action.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.operation(parseTestScriptSetupActionOperation("operation", getJsonValue(jsonObject, "operation", JsonObject.class), -1)); builder._assert(parseTestScriptSetupActionAssert("assert", getJsonValue(jsonObject, "assert", JsonObject.class), -1)); @@ -21503,10 +22136,11 @@ private TestScript.Setup.Action.Assert parseTestScriptSetupActionAssert(java.lan return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Setup.Action.Assert.class, jsonObject); } TestScript.Setup.Action.Assert.Builder builder = TestScript.Setup.Action.Assert.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.label(parseString("label", getJsonValue(jsonObject, "label", JsonString.class), jsonObject.get("_label"), -1)); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -21539,10 +22173,11 @@ private TestScript.Setup.Action.Operation parseTestScriptSetupActionOperation(ja return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Setup.Action.Operation.class, jsonObject); } TestScript.Setup.Action.Operation.Builder builder = TestScript.Setup.Action.Operation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.type(parseCoding("type", getJsonValue(jsonObject, "type", JsonObject.class), -1)); builder.resource((FHIRDefinedType) parseString(FHIRDefinedType.builder(), "resource", getJsonValue(jsonObject, "resource", JsonString.class), jsonObject.get("_resource"), -1)); @@ -21575,10 +22210,11 @@ private TestScript.Setup.Action.Operation.RequestHeader parseTestScriptSetupActi return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Setup.Action.Operation.RequestHeader.class, jsonObject); } TestScript.Setup.Action.Operation.RequestHeader.Builder builder = TestScript.Setup.Action.Operation.RequestHeader.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.field(parseString("field", getJsonValue(jsonObject, "field", JsonString.class), jsonObject.get("_field"), -1)); builder.value(parseString("value", getJsonValue(jsonObject, "value", JsonString.class), jsonObject.get("_value"), -1)); @@ -21591,10 +22227,11 @@ private TestScript.Teardown parseTestScriptTeardown(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Teardown.class, jsonObject); } TestScript.Teardown.Builder builder = TestScript.Teardown.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray actionArray = getJsonArray(jsonObject, "action"); if (actionArray != null) { @@ -21611,10 +22248,11 @@ private TestScript.Teardown.Action parseTestScriptTeardownAction(java.lang.Strin return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Teardown.Action.class, jsonObject); } TestScript.Teardown.Action.Builder builder = TestScript.Teardown.Action.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.operation(parseTestScriptSetupActionOperation("operation", getJsonValue(jsonObject, "operation", JsonObject.class), -1)); stackPop(); @@ -21626,10 +22264,11 @@ private TestScript.Test parseTestScriptTest(java.lang.String elementName, JsonOb return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Test.class, jsonObject); } TestScript.Test.Builder builder = TestScript.Test.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.description(parseString("description", getJsonValue(jsonObject, "description", JsonString.class), jsonObject.get("_description"), -1)); @@ -21648,10 +22287,11 @@ private TestScript.Test.Action parseTestScriptTestAction(java.lang.String elemen return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Test.Action.class, jsonObject); } TestScript.Test.Action.Builder builder = TestScript.Test.Action.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.operation(parseTestScriptSetupActionOperation("operation", getJsonValue(jsonObject, "operation", JsonObject.class), -1)); builder._assert(parseTestScriptSetupActionAssert("assert", getJsonValue(jsonObject, "assert", JsonObject.class), -1)); @@ -21664,10 +22304,11 @@ private TestScript.Variable parseTestScriptVariable(java.lang.String elementName return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TestScript.Variable.class, jsonObject); } TestScript.Variable.Builder builder = TestScript.Variable.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.defaultValue(parseString("defaultValue", getJsonValue(jsonObject, "defaultValue", JsonString.class), jsonObject.get("_defaultValue"), -1)); @@ -21687,9 +22328,10 @@ private Time parseTime(java.lang.String elementName, JsonValue jsonValue, JsonVa } stackPush(elementName, elementIndex); Time.Builder builder = Time.builder(); + builder.setValidating(validating); if (_jsonValue != null && _jsonValue.getValueType() == JsonValue.ValueType.OBJECT) { JsonObject jsonObject = (JsonObject) _jsonValue; - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Element.class, jsonObject); } parseElement(builder, jsonObject); @@ -21711,10 +22353,11 @@ private Timing parseTiming(java.lang.String elementName, JsonObject jsonObject, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Timing.class, jsonObject); } Timing.Builder builder = Timing.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); JsonArray eventArray = getJsonArray(jsonObject, "event", true); if (eventArray != null) { @@ -21734,10 +22377,11 @@ private Timing.Repeat parseTimingRepeat(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Timing.Repeat.class, jsonObject); } Timing.Repeat.Builder builder = Timing.Repeat.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.bounds(parseChoiceElement("bounds", jsonObject, Duration.class, Range.class, Period.class)); builder.count((PositiveInt) parseInteger(PositiveInt.builder(), "count", getJsonValue(jsonObject, "count", JsonNumber.class), jsonObject.get("_count"), -1)); @@ -21781,10 +22425,11 @@ private TriggerDefinition parseTriggerDefinition(java.lang.String elementName, J return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(TriggerDefinition.class, jsonObject); } TriggerDefinition.Builder builder = TriggerDefinition.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.type((TriggerType) parseString(TriggerType.builder(), "type", getJsonValue(jsonObject, "type", JsonString.class), jsonObject.get("_type"), -1)); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); @@ -21805,9 +22450,10 @@ private Uri parseUri(Uri.Builder builder, java.lang.String elementName, JsonValu return null; } stackPush(elementName, elementIndex); + builder.setValidating(validating); if (_jsonValue != null && _jsonValue.getValueType() == JsonValue.ValueType.OBJECT) { JsonObject jsonObject = (JsonObject) _jsonValue; - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Element.class, jsonObject); } parseElement(builder, jsonObject); @@ -21833,10 +22479,11 @@ private UsageContext parseUsageContext(java.lang.String elementName, JsonObject return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(UsageContext.class, jsonObject); } UsageContext.Builder builder = UsageContext.builder(); + builder.setValidating(validating); parseElement(builder, jsonObject); builder.code(parseCoding("code", getJsonValue(jsonObject, "code", JsonObject.class), -1)); builder.value(parseChoiceElement("value", jsonObject, CodeableConcept.class, Quantity.class, Range.class, Reference.class)); @@ -21849,10 +22496,11 @@ private ValueSet parseValueSet(java.lang.String elementName, JsonObject jsonObje return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ValueSet.class, jsonObject); } ValueSet.Builder builder = ValueSet.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); builder.url(parseUri("url", getJsonValue(jsonObject, "url", JsonString.class), jsonObject.get("_url"), -1)); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); @@ -21901,10 +22549,11 @@ private ValueSet.Compose parseValueSetCompose(java.lang.String elementName, Json return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ValueSet.Compose.class, jsonObject); } ValueSet.Compose.Builder builder = ValueSet.Compose.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.lockedDate(parseDate("lockedDate", getJsonValue(jsonObject, "lockedDate", JsonString.class), jsonObject.get("_lockedDate"), -1)); builder.inactive(parseBoolean("inactive", getJsonValue(jsonObject, "inactive", JsonValue.class), jsonObject.get("_inactive"), -1)); @@ -21929,10 +22578,11 @@ private ValueSet.Compose.Include parseValueSetComposeInclude(java.lang.String el return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ValueSet.Compose.Include.class, jsonObject); } ValueSet.Compose.Include.Builder builder = ValueSet.Compose.Include.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.system(parseUri("system", getJsonValue(jsonObject, "system", JsonString.class), jsonObject.get("_system"), -1)); builder.version(parseString("version", getJsonValue(jsonObject, "version", JsonString.class), jsonObject.get("_version"), -1)); @@ -21964,10 +22614,11 @@ private ValueSet.Compose.Include.Concept parseValueSetComposeIncludeConcept(java return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ValueSet.Compose.Include.Concept.class, jsonObject); } ValueSet.Compose.Include.Concept.Builder builder = ValueSet.Compose.Include.Concept.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.code((Code) parseString(Code.builder(), "code", getJsonValue(jsonObject, "code", JsonString.class), jsonObject.get("_code"), -1)); builder.display(parseString("display", getJsonValue(jsonObject, "display", JsonString.class), jsonObject.get("_display"), -1)); @@ -21986,10 +22637,11 @@ private ValueSet.Compose.Include.Concept.Designation parseValueSetComposeInclude return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ValueSet.Compose.Include.Concept.Designation.class, jsonObject); } ValueSet.Compose.Include.Concept.Designation.Builder builder = ValueSet.Compose.Include.Concept.Designation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.language((Code) parseString(Code.builder(), "language", getJsonValue(jsonObject, "language", JsonString.class), jsonObject.get("_language"), -1)); builder.use(parseCoding("use", getJsonValue(jsonObject, "use", JsonObject.class), -1)); @@ -22003,10 +22655,11 @@ private ValueSet.Compose.Include.Filter parseValueSetComposeIncludeFilter(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ValueSet.Compose.Include.Filter.class, jsonObject); } ValueSet.Compose.Include.Filter.Builder builder = ValueSet.Compose.Include.Filter.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.property((Code) parseString(Code.builder(), "property", getJsonValue(jsonObject, "property", JsonString.class), jsonObject.get("_property"), -1)); builder.op((FilterOperator) parseString(FilterOperator.builder(), "op", getJsonValue(jsonObject, "op", JsonString.class), jsonObject.get("_op"), -1)); @@ -22020,10 +22673,11 @@ private ValueSet.Expansion parseValueSetExpansion(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ValueSet.Expansion.class, jsonObject); } ValueSet.Expansion.Builder builder = ValueSet.Expansion.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.identifier(parseUri("identifier", getJsonValue(jsonObject, "identifier", JsonString.class), jsonObject.get("_identifier"), -1)); builder.timestamp(parseDateTime("timestamp", getJsonValue(jsonObject, "timestamp", JsonString.class), jsonObject.get("_timestamp"), -1)); @@ -22050,10 +22704,11 @@ private ValueSet.Expansion.Contains parseValueSetExpansionContains(java.lang.Str return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ValueSet.Expansion.Contains.class, jsonObject); } ValueSet.Expansion.Contains.Builder builder = ValueSet.Expansion.Contains.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.system(parseUri("system", getJsonValue(jsonObject, "system", JsonString.class), jsonObject.get("_system"), -1)); builder._abstract(parseBoolean("abstract", getJsonValue(jsonObject, "abstract", JsonValue.class), jsonObject.get("_abstract"), -1)); @@ -22082,10 +22737,11 @@ private ValueSet.Expansion.Parameter parseValueSetExpansionParameter(java.lang.S return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(ValueSet.Expansion.Parameter.class, jsonObject); } ValueSet.Expansion.Parameter.Builder builder = ValueSet.Expansion.Parameter.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.name(parseString("name", getJsonValue(jsonObject, "name", JsonString.class), jsonObject.get("_name"), -1)); builder.value(parseChoiceElement("value", jsonObject, String.class, Boolean.class, Integer.class, Decimal.class, Uri.class, Code.class, DateTime.class)); @@ -22098,10 +22754,11 @@ private VerificationResult parseVerificationResult(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(VerificationResult.class, jsonObject); } VerificationResult.Builder builder = VerificationResult.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray targetArray = getJsonArray(jsonObject, "target"); if (targetArray != null) { @@ -22152,10 +22809,11 @@ private VerificationResult.Attestation parseVerificationResultAttestation(java.l return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(VerificationResult.Attestation.class, jsonObject); } VerificationResult.Attestation.Builder builder = VerificationResult.Attestation.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.who(parseReference("who", getJsonValue(jsonObject, "who", JsonObject.class), -1)); builder.onBehalfOf(parseReference("onBehalfOf", getJsonValue(jsonObject, "onBehalfOf", JsonObject.class), -1)); @@ -22174,10 +22832,11 @@ private VerificationResult.PrimarySource parseVerificationResultPrimarySource(ja return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(VerificationResult.PrimarySource.class, jsonObject); } VerificationResult.PrimarySource.Builder builder = VerificationResult.PrimarySource.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.who(parseReference("who", getJsonValue(jsonObject, "who", JsonObject.class), -1)); JsonArray typeArray = getJsonArray(jsonObject, "type"); @@ -22210,10 +22869,11 @@ private VerificationResult.Validator parseVerificationResultValidator(java.lang. return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(VerificationResult.Validator.class, jsonObject); } VerificationResult.Validator.Builder builder = VerificationResult.Validator.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.organization(parseReference("organization", getJsonValue(jsonObject, "organization", JsonObject.class), -1)); builder.identityCertificate(parseString("identityCertificate", getJsonValue(jsonObject, "identityCertificate", JsonString.class), jsonObject.get("_identityCertificate"), -1)); @@ -22227,10 +22887,11 @@ private VisionPrescription parseVisionPrescription(java.lang.String elementName, return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(VisionPrescription.class, jsonObject); } VisionPrescription.Builder builder = VisionPrescription.builder(); + builder.setValidating(validating); parseDomainResource(builder, jsonObject); JsonArray identifierArray = getJsonArray(jsonObject, "identifier"); if (identifierArray != null) { @@ -22259,10 +22920,11 @@ private VisionPrescription.LensSpecification parseVisionPrescriptionLensSpecific return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(VisionPrescription.LensSpecification.class, jsonObject); } VisionPrescription.LensSpecification.Builder builder = VisionPrescription.LensSpecification.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.product(parseCodeableConcept("product", getJsonValue(jsonObject, "product", JsonObject.class), -1)); builder.eye((VisionEyes) parseString(VisionEyes.builder(), "eye", getJsonValue(jsonObject, "eye", JsonString.class), jsonObject.get("_eye"), -1)); @@ -22297,10 +22959,11 @@ private VisionPrescription.LensSpecification.Prism parseVisionPrescriptionLensSp return null; } stackPush(elementName, elementIndex); - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(VisionPrescription.LensSpecification.Prism.class, jsonObject); } VisionPrescription.LensSpecification.Prism.Builder builder = VisionPrescription.LensSpecification.Prism.builder(); + builder.setValidating(validating); parseBackboneElement(builder, jsonObject); builder.amount(parseDecimal("amount", getJsonValue(jsonObject, "amount", JsonNumber.class), jsonObject.get("_amount"), -1)); builder.base((VisionBase) parseString(VisionBase.builder(), "base", getJsonValue(jsonObject, "base", JsonString.class), jsonObject.get("_base"), -1)); @@ -22314,9 +22977,10 @@ private Xhtml parseXhtml(java.lang.String elementName, JsonValue jsonValue, Json } stackPush(elementName, elementIndex); Xhtml.Builder builder = Xhtml.builder(); + builder.setValidating(validating); if (_jsonValue != null && _jsonValue.getValueType() == JsonValue.ValueType.OBJECT) { JsonObject jsonObject = (JsonObject) _jsonValue; - if (getPropertyOrDefault(FHIRParser.PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS, java.lang.Boolean.FALSE, java.lang.Boolean.class) == false) { + if (!ignoringUnrecognizedElements) { checkForUnrecognizedElements(Element.class, jsonObject); } parseElement(builder, jsonObject); diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRParser.java b/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRParser.java index b6a1478785d..e57b110490b 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRParser.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRParser.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019, 2020 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -12,6 +12,7 @@ import com.ibm.fhir.model.format.Format; import com.ibm.fhir.model.parser.exception.FHIRParserException; import com.ibm.fhir.model.resource.Resource; +import com.ibm.fhir.model.util.ValidationSupport; /** * Parse FHIR resource representations into fhir-model objects @@ -20,75 +21,116 @@ public interface FHIRParser { /** * Property name for a property that controls whether the parser will ignore or throw an exception on unrecognized elements */ + @Deprecated public static final String PROPERTY_IGNORE_UNRECOGNIZED_ELEMENTS = "com.ibm.fhir.model.parser.ignoreUnrecognizedElements"; - + /** * Read a resource from the passed InputStream. This method does not close the passed InputStream. - * + * * @param The resource type to read * @param in * @return * @throws FHIRParserException - * @throws ClassCastException If the InputStream contains a FHIR resource type that cannot be cast to the requested type + * @throws ClassCastException If the InputStream contains a FHIR resource type that cannot be cast to the requested type */ T parse(InputStream in) throws FHIRParserException; - + /** * Read a resource using the passed Reader. This method does not close the passed Reader. - * + * * @param The resource type to read * @param reader * @return * @throws FHIRParserException - * @throws ClassCastException If the InputStream contains a FHIR resource type that cannot be cast to the requested type + * @throws ClassCastException If the InputStream contains a FHIR resource type that cannot be cast to the requested type */ T parse(Reader reader) throws FHIRParserException; + /** + * Set the validating parser indicator for this parser + * + *

    A validating parser performs basic validation during parsing / deserialization of the input format including: + *

      + *
    • element cardinality checking
    • + *
    • element type checking
    • + *
    • element value checking
    • + *
    + * + * @param validating + * the validating parser indicator + * @see ValidationSupport + */ + void setValidating(boolean validating); + + /** + * Indicates whether this parser is a validating parser + * + * @return + * true if this parser is a validating parser, false otherwise + */ + boolean isValidating(); + + /** + * Set the ignoring unrecognized elements indicator for this parser + * + * @param ignoringUnrecognizedElements + * the ignoring unrecognized elements indicator + */ + void setIgnoringUnrecognizedElements(boolean ignoringUnrecognizedElements); + + /** + * Indicates whether this parser is ignoring unrecognized elements + * + * @return + * true if this parser is ignoring unrecognized elements, false otherwise + */ + boolean isIgnoringUnrecognizedElements(); + /** * Set the property with the given name to the passed value - * + * * @throws IllegalArgumentException if the property {@code name} is unknown or unsupported * @see {@link #isPropertySupported(String)} */ void setProperty(String name, Object value); - + /** * @return the property value or {@code null} if the property has no value */ Object getProperty(String name); - + /** * @return the property value or {@code defaultValue} if the property has no value */ Object getPropertyOrDefault(String name, Object defaultValue); - + /** * @return the property value or {@code null} if the property has no value */ T getProperty(String name, Class type); - + /** * @return the property value or {@code defaultValue} if the property has no value */ T getPropertyOrDefault(String name, T defaultValue, Class type); - + /** * Whether the generator supports the property with the passed name */ boolean isPropertySupported(String name); - + /** * Attempt to cast the FHIRParser to a specific subclass - * + * * @param The FHIRParser subclass to cast to * @return - * @throws ClassCastException If the InputStream contains a FHIR resource type that cannot be cast to the requested type + * @throws ClassCastException If the InputStream contains a FHIR resource type that cannot be cast to the requested type */ T as(Class parserClass); - + /** * Create a FHIRParser for the given format. - * + * * @param format * @return * @throws IllegalArgumentException if {@code format} is not supported diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRXMLParser.java b/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRXMLParser.java index 02e72861491..58a18de601b 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRXMLParser.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/parser/FHIRXMLParser.java @@ -392,6 +392,7 @@ private Resource parseResource(java.lang.String elementName, XMLStreamReader rea private Account parseAccount(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Account.Builder builder = Account.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, subjectElementIndex = 0, coverageElementIndex = 0, guarantorElementIndex = 0; while (reader.hasNext()) { @@ -478,7 +479,11 @@ private Account parseAccount(java.lang.String elementName, XMLStreamReader reade builder.partOf(parseReference("partOf", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -495,6 +500,7 @@ private Account parseAccount(java.lang.String elementName, XMLStreamReader reade private Account.Coverage parseAccountCoverage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Account.Coverage.Builder builder = Account.Coverage.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -525,7 +531,11 @@ private Account.Coverage parseAccountCoverage(java.lang.String elementName, XMLS builder.priority((PositiveInt) parseInteger(PositiveInt.builder(), "priority", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -542,6 +552,7 @@ private Account.Coverage parseAccountCoverage(java.lang.String elementName, XMLS private Account.Guarantor parseAccountGuarantor(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Account.Guarantor.Builder builder = Account.Guarantor.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -576,7 +587,11 @@ private Account.Guarantor parseAccountGuarantor(java.lang.String elementName, XM builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -593,6 +608,7 @@ private Account.Guarantor parseAccountGuarantor(java.lang.String elementName, XM private ActivityDefinition parseActivityDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ActivityDefinition.Builder builder = ActivityDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, topicElementIndex = 0, authorElementIndex = 0, editorElementIndex = 0, reviewerElementIndex = 0, endorserElementIndex = 0, relatedArtifactElementIndex = 0, libraryElementIndex = 0, participantElementIndex = 0, dosageElementIndex = 0, bodySiteElementIndex = 0, specimenRequirementElementIndex = 0, observationRequirementElementIndex = 0, observationResultRequirementElementIndex = 0, dynamicValueElementIndex = 0; while (reader.hasNext()) { @@ -847,7 +863,11 @@ private ActivityDefinition parseActivityDefinition(java.lang.String elementName, builder.dynamicValue(parseActivityDefinitionDynamicValue("dynamicValue", reader, dynamicValueElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -864,6 +884,7 @@ private ActivityDefinition parseActivityDefinition(java.lang.String elementName, private ActivityDefinition.DynamicValue parseActivityDefinitionDynamicValue(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ActivityDefinition.DynamicValue.Builder builder = ActivityDefinition.DynamicValue.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -894,7 +915,11 @@ private ActivityDefinition.DynamicValue parseActivityDefinitionDynamicValue(java builder.expression(parseExpression("expression", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -911,6 +936,7 @@ private ActivityDefinition.DynamicValue parseActivityDefinitionDynamicValue(java private ActivityDefinition.Participant parseActivityDefinitionParticipant(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ActivityDefinition.Participant.Builder builder = ActivityDefinition.Participant.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -941,7 +967,11 @@ private ActivityDefinition.Participant parseActivityDefinitionParticipant(java.l builder.role(parseCodeableConcept("role", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -958,6 +988,7 @@ private ActivityDefinition.Participant parseActivityDefinitionParticipant(java.l private Address parseAddress(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Address.Builder builder = Address.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -1016,7 +1047,11 @@ private Address parseAddress(java.lang.String elementName, XMLStreamReader reade builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -1033,6 +1068,7 @@ private Address parseAddress(java.lang.String elementName, XMLStreamReader reade private AdverseEvent parseAdverseEvent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); AdverseEvent.Builder builder = AdverseEvent.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, categoryElementIndex = 0, resultingConditionElementIndex = 0, contributorElementIndex = 0, suspectEntityElementIndex = 0, subjectMedicalHistoryElementIndex = 0, referenceDocumentElementIndex = 0, studyElementIndex = 0; while (reader.hasNext()) { @@ -1155,7 +1191,11 @@ private AdverseEvent parseAdverseEvent(java.lang.String elementName, XMLStreamRe builder.study(parseReference("study", reader, studyElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -1172,6 +1212,7 @@ private AdverseEvent parseAdverseEvent(java.lang.String elementName, XMLStreamRe private AdverseEvent.SuspectEntity parseAdverseEventSuspectEntity(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); AdverseEvent.SuspectEntity.Builder builder = AdverseEvent.SuspectEntity.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -1202,7 +1243,11 @@ private AdverseEvent.SuspectEntity parseAdverseEventSuspectEntity(java.lang.Stri builder.causality(parseAdverseEventSuspectEntityCausality("causality", reader, causalityElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -1219,6 +1264,7 @@ private AdverseEvent.SuspectEntity parseAdverseEventSuspectEntity(java.lang.Stri private AdverseEvent.SuspectEntity.Causality parseAdverseEventSuspectEntityCausality(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); AdverseEvent.SuspectEntity.Causality.Builder builder = AdverseEvent.SuspectEntity.Causality.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -1257,7 +1303,11 @@ private AdverseEvent.SuspectEntity.Causality parseAdverseEventSuspectEntityCausa builder.method(parseCodeableConcept("method", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -1274,6 +1324,7 @@ private AdverseEvent.SuspectEntity.Causality parseAdverseEventSuspectEntityCausa private AllergyIntolerance parseAllergyIntolerance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); AllergyIntolerance.Builder builder = AllergyIntolerance.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, categoryElementIndex = 0, noteElementIndex = 0, reactionElementIndex = 0; while (reader.hasNext()) { @@ -1396,7 +1447,11 @@ private AllergyIntolerance parseAllergyIntolerance(java.lang.String elementName, builder.reaction(parseAllergyIntoleranceReaction("reaction", reader, reactionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -1413,6 +1468,7 @@ private AllergyIntolerance parseAllergyIntolerance(java.lang.String elementName, private AllergyIntolerance.Reaction parseAllergyIntoleranceReaction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); AllergyIntolerance.Reaction.Builder builder = AllergyIntolerance.Reaction.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -1463,7 +1519,11 @@ private AllergyIntolerance.Reaction parseAllergyIntoleranceReaction(java.lang.St builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -1480,6 +1540,7 @@ private AllergyIntolerance.Reaction parseAllergyIntoleranceReaction(java.lang.St private Annotation parseAnnotation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Annotation.Builder builder = Annotation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -1514,7 +1575,11 @@ private Annotation parseAnnotation(java.lang.String elementName, XMLStreamReader builder.text((Markdown) parseString(Markdown.builder(), "text", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -1531,6 +1596,7 @@ private Annotation parseAnnotation(java.lang.String elementName, XMLStreamReader private Appointment parseAppointment(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Appointment.Builder builder = Appointment.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, serviceCategoryElementIndex = 0, serviceTypeElementIndex = 0, specialtyElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, supportingInformationElementIndex = 0, slotElementIndex = 0, basedOnElementIndex = 0, participantElementIndex = 0, requestedPeriodElementIndex = 0; while (reader.hasNext()) { @@ -1661,7 +1727,11 @@ private Appointment parseAppointment(java.lang.String elementName, XMLStreamRead builder.requestedPeriod(parsePeriod("requestedPeriod", reader, requestedPeriodElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -1678,6 +1748,7 @@ private Appointment parseAppointment(java.lang.String elementName, XMLStreamRead private Appointment.Participant parseAppointmentParticipant(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Appointment.Participant.Builder builder = Appointment.Participant.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -1720,7 +1791,11 @@ private Appointment.Participant parseAppointmentParticipant(java.lang.String ele builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -1737,6 +1812,7 @@ private Appointment.Participant parseAppointmentParticipant(java.lang.String ele private AppointmentResponse parseAppointmentResponse(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); AppointmentResponse.Builder builder = AppointmentResponse.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, participantTypeElementIndex = 0; while (reader.hasNext()) { @@ -1811,7 +1887,11 @@ private AppointmentResponse parseAppointmentResponse(java.lang.String elementNam builder.comment(parseString("comment", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -1828,6 +1908,7 @@ private AppointmentResponse parseAppointmentResponse(java.lang.String elementNam private Attachment parseAttachment(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Attachment.Builder builder = Attachment.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -1878,7 +1959,11 @@ private Attachment parseAttachment(java.lang.String elementName, XMLStreamReader builder.creation(parseDateTime("creation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -1895,6 +1980,7 @@ private Attachment parseAttachment(java.lang.String elementName, XMLStreamReader private AuditEvent parseAuditEvent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); AuditEvent.Builder builder = AuditEvent.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, subtypeElementIndex = 0, purposeOfEventElementIndex = 0, agentElementIndex = 0, entityElementIndex = 0; while (reader.hasNext()) { @@ -1981,7 +2067,11 @@ private AuditEvent parseAuditEvent(java.lang.String elementName, XMLStreamReader builder.entity(parseAuditEventEntity("entity", reader, entityElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -1998,6 +2088,7 @@ private AuditEvent parseAuditEvent(java.lang.String elementName, XMLStreamReader private AuditEvent.Agent parseAuditEventAgent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); AuditEvent.Agent.Builder builder = AuditEvent.Agent.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -2064,7 +2155,11 @@ private AuditEvent.Agent parseAuditEventAgent(java.lang.String elementName, XMLS builder.purposeOfUse(parseCodeableConcept("purposeOfUse", reader, purposeOfUseElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2081,6 +2176,7 @@ private AuditEvent.Agent parseAuditEventAgent(java.lang.String elementName, XMLS private AuditEvent.Agent.Network parseAuditEventAgentNetwork(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); AuditEvent.Agent.Network.Builder builder = AuditEvent.Agent.Network.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -2111,7 +2207,11 @@ private AuditEvent.Agent.Network parseAuditEventAgentNetwork(java.lang.String el builder.type((AuditEventAgentNetworkType) parseString(AuditEventAgentNetworkType.builder(), "type", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2128,6 +2228,7 @@ private AuditEvent.Agent.Network parseAuditEventAgentNetwork(java.lang.String el private AuditEvent.Entity parseAuditEventEntity(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); AuditEvent.Entity.Builder builder = AuditEvent.Entity.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -2186,7 +2287,11 @@ private AuditEvent.Entity parseAuditEventEntity(java.lang.String elementName, XM builder.detail(parseAuditEventEntityDetail("detail", reader, detailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2203,6 +2308,7 @@ private AuditEvent.Entity parseAuditEventEntity(java.lang.String elementName, XM private AuditEvent.Entity.Detail parseAuditEventEntityDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); AuditEvent.Entity.Detail.Builder builder = AuditEvent.Entity.Detail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -2237,7 +2343,11 @@ private AuditEvent.Entity.Detail parseAuditEventEntityDetail(java.lang.String el builder.value(parseBase64Binary("valueBase64Binary", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2254,6 +2364,7 @@ private AuditEvent.Entity.Detail parseAuditEventEntityDetail(java.lang.String el private AuditEvent.Source parseAuditEventSource(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); AuditEvent.Source.Builder builder = AuditEvent.Source.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -2288,7 +2399,11 @@ private AuditEvent.Source parseAuditEventSource(java.lang.String elementName, XM builder.type(parseCoding("type", reader, typeElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2305,6 +2420,7 @@ private AuditEvent.Source parseAuditEventSource(java.lang.String elementName, XM private Base64Binary parseBase64Binary(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Base64Binary.Builder builder = Base64Binary.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -2327,7 +2443,11 @@ private Base64Binary parseBase64Binary(java.lang.String elementName, XMLStreamRe builder.extension(parseExtension("extension", reader, extensionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2344,6 +2464,7 @@ private Base64Binary parseBase64Binary(java.lang.String elementName, XMLStreamRe private Basic parseBasic(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Basic.Builder builder = Basic.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0; while (reader.hasNext()) { @@ -2406,7 +2527,11 @@ private Basic parseBasic(java.lang.String elementName, XMLStreamReader reader, i builder.author(parseReference("author", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2423,6 +2548,7 @@ private Basic parseBasic(java.lang.String elementName, XMLStreamReader reader, i private Binary parseBinary(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Binary.Builder builder = Binary.builder(); + builder.setValidating(validating); int position = -1; while (reader.hasNext()) { int eventType = reader.next(); @@ -2460,7 +2586,11 @@ private Binary parseBinary(java.lang.String elementName, XMLStreamReader reader, builder.data(parseBase64Binary("data", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2477,6 +2607,7 @@ private Binary parseBinary(java.lang.String elementName, XMLStreamReader reader, private BiologicallyDerivedProduct parseBiologicallyDerivedProduct(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); BiologicallyDerivedProduct.Builder builder = BiologicallyDerivedProduct.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, requestElementIndex = 0, parentElementIndex = 0, processingElementIndex = 0, storageElementIndex = 0; while (reader.hasNext()) { @@ -2563,7 +2694,11 @@ private BiologicallyDerivedProduct parseBiologicallyDerivedProduct(java.lang.Str builder.storage(parseBiologicallyDerivedProductStorage("storage", reader, storageElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2580,6 +2715,7 @@ private BiologicallyDerivedProduct parseBiologicallyDerivedProduct(java.lang.Str private BiologicallyDerivedProduct.Collection parseBiologicallyDerivedProductCollection(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); BiologicallyDerivedProduct.Collection.Builder builder = BiologicallyDerivedProduct.Collection.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -2618,7 +2754,11 @@ private BiologicallyDerivedProduct.Collection parseBiologicallyDerivedProductCol builder.collected(parsePeriod("collectedPeriod", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2635,6 +2775,7 @@ private BiologicallyDerivedProduct.Collection parseBiologicallyDerivedProductCol private BiologicallyDerivedProduct.Manipulation parseBiologicallyDerivedProductManipulation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); BiologicallyDerivedProduct.Manipulation.Builder builder = BiologicallyDerivedProduct.Manipulation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -2669,7 +2810,11 @@ private BiologicallyDerivedProduct.Manipulation parseBiologicallyDerivedProductM builder.time(parsePeriod("timePeriod", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2686,6 +2831,7 @@ private BiologicallyDerivedProduct.Manipulation parseBiologicallyDerivedProductM private BiologicallyDerivedProduct.Processing parseBiologicallyDerivedProductProcessing(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); BiologicallyDerivedProduct.Processing.Builder builder = BiologicallyDerivedProduct.Processing.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -2728,7 +2874,11 @@ private BiologicallyDerivedProduct.Processing parseBiologicallyDerivedProductPro builder.time(parsePeriod("timePeriod", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2745,6 +2895,7 @@ private BiologicallyDerivedProduct.Processing parseBiologicallyDerivedProductPro private BiologicallyDerivedProduct.Storage parseBiologicallyDerivedProductStorage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); BiologicallyDerivedProduct.Storage.Builder builder = BiologicallyDerivedProduct.Storage.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -2783,7 +2934,11 @@ private BiologicallyDerivedProduct.Storage parseBiologicallyDerivedProductStorag builder.duration(parsePeriod("duration", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2800,6 +2955,7 @@ private BiologicallyDerivedProduct.Storage parseBiologicallyDerivedProductStorag private BodyStructure parseBodyStructure(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); BodyStructure.Builder builder = BodyStructure.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, locationQualifierElementIndex = 0, imageElementIndex = 0; while (reader.hasNext()) { @@ -2874,7 +3030,11 @@ private BodyStructure parseBodyStructure(java.lang.String elementName, XMLStream builder.patient(parseReference("patient", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2891,6 +3051,7 @@ private BodyStructure parseBodyStructure(java.lang.String elementName, XMLStream private Boolean parseBoolean(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Boolean.Builder builder = Boolean.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -2913,7 +3074,11 @@ private Boolean parseBoolean(java.lang.String elementName, XMLStreamReader reade builder.extension(parseExtension("extension", reader, extensionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -2930,6 +3095,7 @@ private Boolean parseBoolean(java.lang.String elementName, XMLStreamReader reade private Bundle parseBundle(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Bundle.Builder builder = Bundle.builder(); + builder.setValidating(validating); int position = -1; int linkElementIndex = 0, entryElementIndex = 0; while (reader.hasNext()) { @@ -2984,7 +3150,11 @@ private Bundle parseBundle(java.lang.String elementName, XMLStreamReader reader, builder.signature(parseSignature("signature", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3001,6 +3171,7 @@ private Bundle parseBundle(java.lang.String elementName, XMLStreamReader reader, private Bundle.Entry parseBundleEntry(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Bundle.Entry.Builder builder = Bundle.Entry.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3047,7 +3218,11 @@ private Bundle.Entry parseBundleEntry(java.lang.String elementName, XMLStreamRea builder.response(parseBundleEntryResponse("response", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3064,6 +3239,7 @@ private Bundle.Entry parseBundleEntry(java.lang.String elementName, XMLStreamRea private Bundle.Entry.Request parseBundleEntryRequest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Bundle.Entry.Request.Builder builder = Bundle.Entry.Request.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3110,7 +3286,11 @@ private Bundle.Entry.Request parseBundleEntryRequest(java.lang.String elementNam builder.ifNoneExist(parseString("ifNoneExist", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3127,6 +3307,7 @@ private Bundle.Entry.Request parseBundleEntryRequest(java.lang.String elementNam private Bundle.Entry.Response parseBundleEntryResponse(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Bundle.Entry.Response.Builder builder = Bundle.Entry.Response.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3169,7 +3350,11 @@ private Bundle.Entry.Response parseBundleEntryResponse(java.lang.String elementN builder.outcome(parseResource("outcome", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3186,6 +3371,7 @@ private Bundle.Entry.Response parseBundleEntryResponse(java.lang.String elementN private Bundle.Entry.Search parseBundleEntrySearch(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Bundle.Entry.Search.Builder builder = Bundle.Entry.Search.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3216,7 +3402,11 @@ private Bundle.Entry.Search parseBundleEntrySearch(java.lang.String elementName, builder.score(parseDecimal("score", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3233,6 +3423,7 @@ private Bundle.Entry.Search parseBundleEntrySearch(java.lang.String elementName, private Bundle.Link parseBundleLink(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Bundle.Link.Builder builder = Bundle.Link.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3263,7 +3454,11 @@ private Bundle.Link parseBundleLink(java.lang.String elementName, XMLStreamReade builder.url(parseUri("url", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3280,6 +3475,7 @@ private Bundle.Link parseBundleLink(java.lang.String elementName, XMLStreamReade private CapabilityStatement parseCapabilityStatement(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Builder builder = CapabilityStatement.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, instantiatesElementIndex = 0, importsElementIndex = 0, formatElementIndex = 0, patchFormatElementIndex = 0, implementationGuideElementIndex = 0, restElementIndex = 0, messagingElementIndex = 0, documentElementIndex = 0; while (reader.hasNext()) { @@ -3426,7 +3622,11 @@ private CapabilityStatement parseCapabilityStatement(java.lang.String elementNam builder.document(parseCapabilityStatementDocument("document", reader, documentElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3443,6 +3643,7 @@ private CapabilityStatement parseCapabilityStatement(java.lang.String elementNam private CapabilityStatement.Document parseCapabilityStatementDocument(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Document.Builder builder = CapabilityStatement.Document.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3477,7 +3678,11 @@ private CapabilityStatement.Document parseCapabilityStatementDocument(java.lang. builder.profile((Canonical) parseUri(Canonical.builder(), "profile", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3494,6 +3699,7 @@ private CapabilityStatement.Document parseCapabilityStatementDocument(java.lang. private CapabilityStatement.Implementation parseCapabilityStatementImplementation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Implementation.Builder builder = CapabilityStatement.Implementation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3528,7 +3734,11 @@ private CapabilityStatement.Implementation parseCapabilityStatementImplementatio builder.custodian(parseReference("custodian", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3545,6 +3755,7 @@ private CapabilityStatement.Implementation parseCapabilityStatementImplementatio private CapabilityStatement.Messaging parseCapabilityStatementMessaging(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Messaging.Builder builder = CapabilityStatement.Messaging.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3583,7 +3794,11 @@ private CapabilityStatement.Messaging parseCapabilityStatementMessaging(java.lan builder.supportedMessage(parseCapabilityStatementMessagingSupportedMessage("supportedMessage", reader, supportedMessageElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3600,6 +3815,7 @@ private CapabilityStatement.Messaging parseCapabilityStatementMessaging(java.lan private CapabilityStatement.Messaging.Endpoint parseCapabilityStatementMessagingEndpoint(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Messaging.Endpoint.Builder builder = CapabilityStatement.Messaging.Endpoint.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3630,7 +3846,11 @@ private CapabilityStatement.Messaging.Endpoint parseCapabilityStatementMessaging builder.address((Url) parseUri(Url.builder(), "address", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3647,6 +3867,7 @@ private CapabilityStatement.Messaging.Endpoint parseCapabilityStatementMessaging private CapabilityStatement.Messaging.SupportedMessage parseCapabilityStatementMessagingSupportedMessage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Messaging.SupportedMessage.Builder builder = CapabilityStatement.Messaging.SupportedMessage.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3677,7 +3898,11 @@ private CapabilityStatement.Messaging.SupportedMessage parseCapabilityStatementM builder.definition((Canonical) parseUri(Canonical.builder(), "definition", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3694,6 +3919,7 @@ private CapabilityStatement.Messaging.SupportedMessage parseCapabilityStatementM private CapabilityStatement.Rest parseCapabilityStatementRest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Rest.Builder builder = CapabilityStatement.Rest.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3748,7 +3974,11 @@ private CapabilityStatement.Rest parseCapabilityStatementRest(java.lang.String e builder.compartment((Canonical) parseUri(Canonical.builder(), "compartment", reader, compartmentElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3765,6 +3995,7 @@ private CapabilityStatement.Rest parseCapabilityStatementRest(java.lang.String e private CapabilityStatement.Rest.Interaction parseCapabilityStatementRestInteraction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Rest.Interaction.Builder builder = CapabilityStatement.Rest.Interaction.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3795,7 +4026,11 @@ private CapabilityStatement.Rest.Interaction parseCapabilityStatementRestInterac builder.documentation((Markdown) parseString(Markdown.builder(), "documentation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3812,6 +4047,7 @@ private CapabilityStatement.Rest.Interaction parseCapabilityStatementRestInterac private CapabilityStatement.Rest.Resource parseCapabilityStatementRestResource(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Rest.Resource.Builder builder = CapabilityStatement.Rest.Resource.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3902,7 +4138,11 @@ private CapabilityStatement.Rest.Resource parseCapabilityStatementRestResource(j builder.operation(parseCapabilityStatementRestResourceOperation("operation", reader, operationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3919,6 +4159,7 @@ private CapabilityStatement.Rest.Resource parseCapabilityStatementRestResource(j private CapabilityStatement.Rest.Resource.Interaction parseCapabilityStatementRestResourceInteraction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Rest.Resource.Interaction.Builder builder = CapabilityStatement.Rest.Resource.Interaction.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -3949,7 +4190,11 @@ private CapabilityStatement.Rest.Resource.Interaction parseCapabilityStatementRe builder.documentation((Markdown) parseString(Markdown.builder(), "documentation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -3966,6 +4211,7 @@ private CapabilityStatement.Rest.Resource.Interaction parseCapabilityStatementRe private CapabilityStatement.Rest.Resource.Operation parseCapabilityStatementRestResourceOperation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Rest.Resource.Operation.Builder builder = CapabilityStatement.Rest.Resource.Operation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -4000,7 +4246,11 @@ private CapabilityStatement.Rest.Resource.Operation parseCapabilityStatementRest builder.documentation((Markdown) parseString(Markdown.builder(), "documentation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -4017,6 +4267,7 @@ private CapabilityStatement.Rest.Resource.Operation parseCapabilityStatementRest private CapabilityStatement.Rest.Resource.SearchParam parseCapabilityStatementRestResourceSearchParam(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Rest.Resource.SearchParam.Builder builder = CapabilityStatement.Rest.Resource.SearchParam.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -4055,7 +4306,11 @@ private CapabilityStatement.Rest.Resource.SearchParam parseCapabilityStatementRe builder.documentation((Markdown) parseString(Markdown.builder(), "documentation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -4072,6 +4327,7 @@ private CapabilityStatement.Rest.Resource.SearchParam parseCapabilityStatementRe private CapabilityStatement.Rest.Security parseCapabilityStatementRestSecurity(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Rest.Security.Builder builder = CapabilityStatement.Rest.Security.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -4106,7 +4362,11 @@ private CapabilityStatement.Rest.Security parseCapabilityStatementRestSecurity(j builder.description((Markdown) parseString(Markdown.builder(), "description", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -4123,6 +4383,7 @@ private CapabilityStatement.Rest.Security parseCapabilityStatementRestSecurity(j private CapabilityStatement.Software parseCapabilityStatementSoftware(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CapabilityStatement.Software.Builder builder = CapabilityStatement.Software.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -4157,7 +4418,11 @@ private CapabilityStatement.Software parseCapabilityStatementSoftware(java.lang. builder.releaseDate(parseDateTime("releaseDate", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -4174,6 +4439,7 @@ private CapabilityStatement.Software parseCapabilityStatementSoftware(java.lang. private CarePlan parseCarePlan(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CarePlan.Builder builder = CarePlan.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, instantiatesCanonicalElementIndex = 0, instantiatesUriElementIndex = 0, basedOnElementIndex = 0, replacesElementIndex = 0, partOfElementIndex = 0, categoryElementIndex = 0, contributorElementIndex = 0, careTeamElementIndex = 0, addressesElementIndex = 0, supportingInfoElementIndex = 0, goalElementIndex = 0, activityElementIndex = 0, noteElementIndex = 0; while (reader.hasNext()) { @@ -4308,7 +4574,11 @@ private CarePlan parseCarePlan(java.lang.String elementName, XMLStreamReader rea builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -4325,6 +4595,7 @@ private CarePlan parseCarePlan(java.lang.String elementName, XMLStreamReader rea private CarePlan.Activity parseCarePlanActivity(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CarePlan.Activity.Builder builder = CarePlan.Activity.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -4367,7 +4638,11 @@ private CarePlan.Activity parseCarePlanActivity(java.lang.String elementName, XM builder.detail(parseCarePlanActivityDetail("detail", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -4384,6 +4659,7 @@ private CarePlan.Activity parseCarePlanActivity(java.lang.String elementName, XM private CarePlan.Activity.Detail parseCarePlanActivityDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CarePlan.Activity.Detail.Builder builder = CarePlan.Activity.Detail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -4486,7 +4762,11 @@ private CarePlan.Activity.Detail parseCarePlanActivityDetail(java.lang.String el builder.description(parseString("description", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -4503,6 +4783,7 @@ private CarePlan.Activity.Detail parseCarePlanActivityDetail(java.lang.String el private CareTeam parseCareTeam(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CareTeam.Builder builder = CareTeam.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, categoryElementIndex = 0, participantElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, managingOrganizationElementIndex = 0, telecomElementIndex = 0, noteElementIndex = 0; while (reader.hasNext()) { @@ -4597,7 +4878,11 @@ private CareTeam parseCareTeam(java.lang.String elementName, XMLStreamReader rea builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -4614,6 +4899,7 @@ private CareTeam parseCareTeam(java.lang.String elementName, XMLStreamReader rea private CareTeam.Participant parseCareTeamParticipant(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CareTeam.Participant.Builder builder = CareTeam.Participant.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -4652,7 +4938,11 @@ private CareTeam.Participant parseCareTeamParticipant(java.lang.String elementNa builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -4669,6 +4959,7 @@ private CareTeam.Participant parseCareTeamParticipant(java.lang.String elementNa private CatalogEntry parseCatalogEntry(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CatalogEntry.Builder builder = CatalogEntry.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, additionalIdentifierElementIndex = 0, classificationElementIndex = 0, additionalCharacteristicElementIndex = 0, additionalClassificationElementIndex = 0, relatedEntryElementIndex = 0; while (reader.hasNext()) { @@ -4763,7 +5054,11 @@ private CatalogEntry parseCatalogEntry(java.lang.String elementName, XMLStreamRe builder.relatedEntry(parseCatalogEntryRelatedEntry("relatedEntry", reader, relatedEntryElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -4780,6 +5075,7 @@ private CatalogEntry parseCatalogEntry(java.lang.String elementName, XMLStreamRe private CatalogEntry.RelatedEntry parseCatalogEntryRelatedEntry(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CatalogEntry.RelatedEntry.Builder builder = CatalogEntry.RelatedEntry.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -4810,7 +5106,11 @@ private CatalogEntry.RelatedEntry parseCatalogEntryRelatedEntry(java.lang.String builder.item(parseReference("item", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -4827,6 +5127,7 @@ private CatalogEntry.RelatedEntry parseCatalogEntryRelatedEntry(java.lang.String private ChargeItem parseChargeItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ChargeItem.Builder builder = ChargeItem.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, definitionUriElementIndex = 0, definitionCanonicalElementIndex = 0, partOfElementIndex = 0, performerElementIndex = 0, bodysiteElementIndex = 0, reasonElementIndex = 0, serviceElementIndex = 0, accountElementIndex = 0, noteElementIndex = 0, supportingInformationElementIndex = 0; while (reader.hasNext()) { @@ -4985,7 +5286,11 @@ private ChargeItem parseChargeItem(java.lang.String elementName, XMLStreamReader builder.supportingInformation(parseReference("supportingInformation", reader, supportingInformationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -5002,6 +5307,7 @@ private ChargeItem parseChargeItem(java.lang.String elementName, XMLStreamReader private ChargeItem.Performer parseChargeItemPerformer(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ChargeItem.Performer.Builder builder = ChargeItem.Performer.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -5032,7 +5338,11 @@ private ChargeItem.Performer parseChargeItemPerformer(java.lang.String elementNa builder.actor(parseReference("actor", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -5049,6 +5359,7 @@ private ChargeItem.Performer parseChargeItemPerformer(java.lang.String elementNa private ChargeItemDefinition parseChargeItemDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ChargeItemDefinition.Builder builder = ChargeItemDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, derivedFromUriElementIndex = 0, partOfElementIndex = 0, replacesElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, instanceElementIndex = 0, applicabilityElementIndex = 0, propertyGroupElementIndex = 0; while (reader.hasNext()) { @@ -5183,7 +5494,11 @@ private ChargeItemDefinition parseChargeItemDefinition(java.lang.String elementN builder.propertyGroup(parseChargeItemDefinitionPropertyGroup("propertyGroup", reader, propertyGroupElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -5200,6 +5515,7 @@ private ChargeItemDefinition parseChargeItemDefinition(java.lang.String elementN private ChargeItemDefinition.Applicability parseChargeItemDefinitionApplicability(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ChargeItemDefinition.Applicability.Builder builder = ChargeItemDefinition.Applicability.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -5234,7 +5550,11 @@ private ChargeItemDefinition.Applicability parseChargeItemDefinitionApplicabilit builder.expression(parseString("expression", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -5251,6 +5571,7 @@ private ChargeItemDefinition.Applicability parseChargeItemDefinitionApplicabilit private ChargeItemDefinition.PropertyGroup parseChargeItemDefinitionPropertyGroup(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ChargeItemDefinition.PropertyGroup.Builder builder = ChargeItemDefinition.PropertyGroup.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -5281,7 +5602,11 @@ private ChargeItemDefinition.PropertyGroup parseChargeItemDefinitionPropertyGrou builder.priceComponent(parseChargeItemDefinitionPropertyGroupPriceComponent("priceComponent", reader, priceComponentElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -5298,6 +5623,7 @@ private ChargeItemDefinition.PropertyGroup parseChargeItemDefinitionPropertyGrou private ChargeItemDefinition.PropertyGroup.PriceComponent parseChargeItemDefinitionPropertyGroupPriceComponent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ChargeItemDefinition.PropertyGroup.PriceComponent.Builder builder = ChargeItemDefinition.PropertyGroup.PriceComponent.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -5336,7 +5662,11 @@ private ChargeItemDefinition.PropertyGroup.PriceComponent parseChargeItemDefinit builder.amount(parseMoney("amount", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -5353,6 +5683,7 @@ private ChargeItemDefinition.PropertyGroup.PriceComponent parseChargeItemDefinit private Claim parseClaim(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Claim.Builder builder = Claim.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, relatedElementIndex = 0, careTeamElementIndex = 0, supportingInfoElementIndex = 0, diagnosisElementIndex = 0, procedureElementIndex = 0, insuranceElementIndex = 0, itemElementIndex = 0; while (reader.hasNext()) { @@ -5503,7 +5834,11 @@ private Claim parseClaim(java.lang.String elementName, XMLStreamReader reader, i builder.total(parseMoney("total", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -5520,6 +5855,7 @@ private Claim parseClaim(java.lang.String elementName, XMLStreamReader reader, i private Claim.Accident parseClaimAccident(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Claim.Accident.Builder builder = Claim.Accident.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -5558,7 +5894,11 @@ private Claim.Accident parseClaimAccident(java.lang.String elementName, XMLStrea builder.location(parseReference("locationReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -5575,6 +5915,7 @@ private Claim.Accident parseClaimAccident(java.lang.String elementName, XMLStrea private Claim.CareTeam parseClaimCareTeam(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Claim.CareTeam.Builder builder = Claim.CareTeam.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -5617,7 +5958,11 @@ private Claim.CareTeam parseClaimCareTeam(java.lang.String elementName, XMLStrea builder.qualification(parseCodeableConcept("qualification", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -5634,6 +5979,7 @@ private Claim.CareTeam parseClaimCareTeam(java.lang.String elementName, XMLStrea private Claim.Diagnosis parseClaimDiagnosis(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Claim.Diagnosis.Builder builder = Claim.Diagnosis.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -5680,7 +6026,11 @@ private Claim.Diagnosis parseClaimDiagnosis(java.lang.String elementName, XMLStr builder.packageCode(parseCodeableConcept("packageCode", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -5697,6 +6047,7 @@ private Claim.Diagnosis parseClaimDiagnosis(java.lang.String elementName, XMLStr private Claim.Insurance parseClaimInsurance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Claim.Insurance.Builder builder = Claim.Insurance.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -5747,7 +6098,11 @@ private Claim.Insurance parseClaimInsurance(java.lang.String elementName, XMLStr builder.claimResponse(parseReference("claimResponse", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -5764,6 +6119,7 @@ private Claim.Insurance parseClaimInsurance(java.lang.String elementName, XMLStr private Claim.Item parseClaimItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Claim.Item.Builder builder = Claim.Item.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -5882,7 +6238,11 @@ private Claim.Item parseClaimItem(java.lang.String elementName, XMLStreamReader builder.detail(parseClaimItemDetail("detail", reader, detailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -5899,6 +6259,7 @@ private Claim.Item parseClaimItem(java.lang.String elementName, XMLStreamReader private Claim.Item.Detail parseClaimItemDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Claim.Item.Detail.Builder builder = Claim.Item.Detail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -5969,7 +6330,11 @@ private Claim.Item.Detail parseClaimItemDetail(java.lang.String elementName, XML builder.subDetail(parseClaimItemDetailSubDetail("subDetail", reader, subDetailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -5986,6 +6351,7 @@ private Claim.Item.Detail parseClaimItemDetail(java.lang.String elementName, XML private Claim.Item.Detail.SubDetail parseClaimItemDetailSubDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Claim.Item.Detail.SubDetail.Builder builder = Claim.Item.Detail.SubDetail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -6052,7 +6418,11 @@ private Claim.Item.Detail.SubDetail parseClaimItemDetailSubDetail(java.lang.Stri builder.udi(parseReference("udi", reader, udiElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -6069,6 +6439,7 @@ private Claim.Item.Detail.SubDetail parseClaimItemDetailSubDetail(java.lang.Stri private Claim.Payee parseClaimPayee(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Claim.Payee.Builder builder = Claim.Payee.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -6099,7 +6470,11 @@ private Claim.Payee parseClaimPayee(java.lang.String elementName, XMLStreamReade builder.party(parseReference("party", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -6116,6 +6491,7 @@ private Claim.Payee parseClaimPayee(java.lang.String elementName, XMLStreamReade private Claim.Procedure parseClaimProcedure(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Claim.Procedure.Builder builder = Claim.Procedure.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -6162,7 +6538,11 @@ private Claim.Procedure parseClaimProcedure(java.lang.String elementName, XMLStr builder.udi(parseReference("udi", reader, udiElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -6179,6 +6559,7 @@ private Claim.Procedure parseClaimProcedure(java.lang.String elementName, XMLStr private Claim.Related parseClaimRelated(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Claim.Related.Builder builder = Claim.Related.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -6213,7 +6594,11 @@ private Claim.Related parseClaimRelated(java.lang.String elementName, XMLStreamR builder.reference(parseIdentifier("reference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -6230,6 +6615,7 @@ private Claim.Related parseClaimRelated(java.lang.String elementName, XMLStreamR private Claim.SupportingInfo parseClaimSupportingInfo(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Claim.SupportingInfo.Builder builder = Claim.SupportingInfo.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -6296,7 +6682,11 @@ private Claim.SupportingInfo parseClaimSupportingInfo(java.lang.String elementNa builder.reason(parseCodeableConcept("reason", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -6313,6 +6703,7 @@ private Claim.SupportingInfo parseClaimSupportingInfo(java.lang.String elementNa private ClaimResponse parseClaimResponse(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClaimResponse.Builder builder = ClaimResponse.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, itemElementIndex = 0, addItemElementIndex = 0, adjudicationElementIndex = 0, totalElementIndex = 0, processNoteElementIndex = 0, communicationRequestElementIndex = 0, insuranceElementIndex = 0, errorElementIndex = 0; while (reader.hasNext()) { @@ -6463,7 +6854,11 @@ private ClaimResponse parseClaimResponse(java.lang.String elementName, XMLStream builder.error(parseClaimResponseError("error", reader, errorElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -6480,6 +6875,7 @@ private ClaimResponse parseClaimResponse(java.lang.String elementName, XMLStream private ClaimResponse.AddItem parseClaimResponseAddItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClaimResponse.AddItem.Builder builder = ClaimResponse.AddItem.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -6586,7 +6982,11 @@ private ClaimResponse.AddItem parseClaimResponseAddItem(java.lang.String element builder.detail(parseClaimResponseAddItemDetail("detail", reader, detailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -6603,6 +7003,7 @@ private ClaimResponse.AddItem parseClaimResponseAddItem(java.lang.String element private ClaimResponse.AddItem.Detail parseClaimResponseAddItemDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClaimResponse.AddItem.Detail.Builder builder = ClaimResponse.AddItem.Detail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -6661,7 +7062,11 @@ private ClaimResponse.AddItem.Detail parseClaimResponseAddItemDetail(java.lang.S builder.subDetail(parseClaimResponseAddItemDetailSubDetail("subDetail", reader, subDetailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -6678,6 +7083,7 @@ private ClaimResponse.AddItem.Detail parseClaimResponseAddItemDetail(java.lang.S private ClaimResponse.AddItem.Detail.SubDetail parseClaimResponseAddItemDetailSubDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClaimResponse.AddItem.Detail.SubDetail.Builder builder = ClaimResponse.AddItem.Detail.SubDetail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -6732,7 +7138,11 @@ private ClaimResponse.AddItem.Detail.SubDetail parseClaimResponseAddItemDetailSu builder.adjudication(parseClaimResponseItemAdjudication("adjudication", reader, adjudicationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -6749,6 +7159,7 @@ private ClaimResponse.AddItem.Detail.SubDetail parseClaimResponseAddItemDetailSu private ClaimResponse.Error parseClaimResponseError(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClaimResponse.Error.Builder builder = ClaimResponse.Error.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -6787,7 +7198,11 @@ private ClaimResponse.Error parseClaimResponseError(java.lang.String elementName builder.code(parseCodeableConcept("code", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -6804,6 +7219,7 @@ private ClaimResponse.Error parseClaimResponseError(java.lang.String elementName private ClaimResponse.Insurance parseClaimResponseInsurance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClaimResponse.Insurance.Builder builder = ClaimResponse.Insurance.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -6846,7 +7262,11 @@ private ClaimResponse.Insurance parseClaimResponseInsurance(java.lang.String ele builder.claimResponse(parseReference("claimResponse", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -6863,6 +7283,7 @@ private ClaimResponse.Insurance parseClaimResponseInsurance(java.lang.String ele private ClaimResponse.Item parseClaimResponseItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClaimResponse.Item.Builder builder = ClaimResponse.Item.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -6901,7 +7322,11 @@ private ClaimResponse.Item parseClaimResponseItem(java.lang.String elementName, builder.detail(parseClaimResponseItemDetail("detail", reader, detailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -6918,6 +7343,7 @@ private ClaimResponse.Item parseClaimResponseItem(java.lang.String elementName, private ClaimResponse.Item.Adjudication parseClaimResponseItemAdjudication(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClaimResponse.Item.Adjudication.Builder builder = ClaimResponse.Item.Adjudication.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -6956,7 +7382,11 @@ private ClaimResponse.Item.Adjudication parseClaimResponseItemAdjudication(java. builder.value(parseDecimal("value", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -6973,6 +7403,7 @@ private ClaimResponse.Item.Adjudication parseClaimResponseItemAdjudication(java. private ClaimResponse.Item.Detail parseClaimResponseItemDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClaimResponse.Item.Detail.Builder builder = ClaimResponse.Item.Detail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -7011,7 +7442,11 @@ private ClaimResponse.Item.Detail parseClaimResponseItemDetail(java.lang.String builder.subDetail(parseClaimResponseItemDetailSubDetail("subDetail", reader, subDetailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7028,6 +7463,7 @@ private ClaimResponse.Item.Detail parseClaimResponseItemDetail(java.lang.String private ClaimResponse.Item.Detail.SubDetail parseClaimResponseItemDetailSubDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClaimResponse.Item.Detail.SubDetail.Builder builder = ClaimResponse.Item.Detail.SubDetail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -7062,7 +7498,11 @@ private ClaimResponse.Item.Detail.SubDetail parseClaimResponseItemDetailSubDetai builder.adjudication(parseClaimResponseItemAdjudication("adjudication", reader, adjudicationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7079,6 +7519,7 @@ private ClaimResponse.Item.Detail.SubDetail parseClaimResponseItemDetailSubDetai private ClaimResponse.Payment parseClaimResponsePayment(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClaimResponse.Payment.Builder builder = ClaimResponse.Payment.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -7125,7 +7566,11 @@ private ClaimResponse.Payment parseClaimResponsePayment(java.lang.String element builder.identifier(parseIdentifier("identifier", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7142,6 +7587,7 @@ private ClaimResponse.Payment parseClaimResponsePayment(java.lang.String element private ClaimResponse.ProcessNote parseClaimResponseProcessNote(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClaimResponse.ProcessNote.Builder builder = ClaimResponse.ProcessNote.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -7180,7 +7626,11 @@ private ClaimResponse.ProcessNote parseClaimResponseProcessNote(java.lang.String builder.language(parseCodeableConcept("language", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7197,6 +7647,7 @@ private ClaimResponse.ProcessNote parseClaimResponseProcessNote(java.lang.String private ClaimResponse.Total parseClaimResponseTotal(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClaimResponse.Total.Builder builder = ClaimResponse.Total.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -7227,7 +7678,11 @@ private ClaimResponse.Total parseClaimResponseTotal(java.lang.String elementName builder.amount(parseMoney("amount", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7244,6 +7699,7 @@ private ClaimResponse.Total parseClaimResponseTotal(java.lang.String elementName private ClinicalImpression parseClinicalImpression(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClinicalImpression.Builder builder = ClinicalImpression.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, problemElementIndex = 0, investigationElementIndex = 0, protocolElementIndex = 0, findingElementIndex = 0, prognosisCodeableConceptElementIndex = 0, prognosisReferenceElementIndex = 0, supportingInfoElementIndex = 0, noteElementIndex = 0; while (reader.hasNext()) { @@ -7370,7 +7826,11 @@ private ClinicalImpression parseClinicalImpression(java.lang.String elementName, builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7387,6 +7847,7 @@ private ClinicalImpression parseClinicalImpression(java.lang.String elementName, private ClinicalImpression.Finding parseClinicalImpressionFinding(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClinicalImpression.Finding.Builder builder = ClinicalImpression.Finding.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -7421,7 +7882,11 @@ private ClinicalImpression.Finding parseClinicalImpressionFinding(java.lang.Stri builder.basis(parseString("basis", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7438,6 +7903,7 @@ private ClinicalImpression.Finding parseClinicalImpressionFinding(java.lang.Stri private ClinicalImpression.Investigation parseClinicalImpressionInvestigation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ClinicalImpression.Investigation.Builder builder = ClinicalImpression.Investigation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -7468,7 +7934,11 @@ private ClinicalImpression.Investigation parseClinicalImpressionInvestigation(ja builder.item(parseReference("item", reader, itemElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7485,6 +7955,7 @@ private ClinicalImpression.Investigation parseClinicalImpressionInvestigation(ja private CodeSystem parseCodeSystem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CodeSystem.Builder builder = CodeSystem.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, filterElementIndex = 0, propertyElementIndex = 0, conceptElementIndex = 0; while (reader.hasNext()) { @@ -7631,7 +8102,11 @@ private CodeSystem parseCodeSystem(java.lang.String elementName, XMLStreamReader builder.concept(parseCodeSystemConcept("concept", reader, conceptElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7648,6 +8123,7 @@ private CodeSystem parseCodeSystem(java.lang.String elementName, XMLStreamReader private CodeSystem.Concept parseCodeSystemConcept(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CodeSystem.Concept.Builder builder = CodeSystem.Concept.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -7694,7 +8170,11 @@ private CodeSystem.Concept parseCodeSystemConcept(java.lang.String elementName, builder.concept(parseCodeSystemConcept("concept", reader, conceptElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7711,6 +8191,7 @@ private CodeSystem.Concept parseCodeSystemConcept(java.lang.String elementName, private CodeSystem.Concept.Designation parseCodeSystemConceptDesignation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CodeSystem.Concept.Designation.Builder builder = CodeSystem.Concept.Designation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -7745,7 +8226,11 @@ private CodeSystem.Concept.Designation parseCodeSystemConceptDesignation(java.la builder.value(parseString("value", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7762,6 +8247,7 @@ private CodeSystem.Concept.Designation parseCodeSystemConceptDesignation(java.la private CodeSystem.Concept.Property parseCodeSystemConceptProperty(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CodeSystem.Concept.Property.Builder builder = CodeSystem.Concept.Property.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -7816,7 +8302,11 @@ private CodeSystem.Concept.Property parseCodeSystemConceptProperty(java.lang.Str builder.value(parseDecimal("valueDecimal", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7833,6 +8323,7 @@ private CodeSystem.Concept.Property parseCodeSystemConceptProperty(java.lang.Str private CodeSystem.Filter parseCodeSystemFilter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CodeSystem.Filter.Builder builder = CodeSystem.Filter.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -7871,7 +8362,11 @@ private CodeSystem.Filter parseCodeSystemFilter(java.lang.String elementName, XM builder.value(parseString("value", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7888,6 +8383,7 @@ private CodeSystem.Filter parseCodeSystemFilter(java.lang.String elementName, XM private CodeSystem.Property parseCodeSystemProperty(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CodeSystem.Property.Builder builder = CodeSystem.Property.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -7926,7 +8422,11 @@ private CodeSystem.Property parseCodeSystemProperty(java.lang.String elementName builder.type((PropertyType) parseString(PropertyType.builder(), "type", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7943,6 +8443,7 @@ private CodeSystem.Property parseCodeSystemProperty(java.lang.String elementName private CodeableConcept parseCodeableConcept(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CodeableConcept.Builder builder = CodeableConcept.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -7969,7 +8470,11 @@ private CodeableConcept parseCodeableConcept(java.lang.String elementName, XMLSt builder.text(parseString("text", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -7986,6 +8491,7 @@ private CodeableConcept parseCodeableConcept(java.lang.String elementName, XMLSt private Coding parseCoding(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Coding.Builder builder = Coding.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -8024,7 +8530,11 @@ private Coding parseCoding(java.lang.String elementName, XMLStreamReader reader, builder.userSelected(parseBoolean("userSelected", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -8041,6 +8551,7 @@ private Coding parseCoding(java.lang.String elementName, XMLStreamReader reader, private Communication parseCommunication(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Communication.Builder builder = Communication.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, instantiatesCanonicalElementIndex = 0, instantiatesUriElementIndex = 0, basedOnElementIndex = 0, partOfElementIndex = 0, inResponseToElementIndex = 0, categoryElementIndex = 0, mediumElementIndex = 0, aboutElementIndex = 0, recipientElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, payloadElementIndex = 0, noteElementIndex = 0; while (reader.hasNext()) { @@ -8175,7 +8686,11 @@ private Communication parseCommunication(java.lang.String elementName, XMLStream builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -8192,6 +8707,7 @@ private Communication parseCommunication(java.lang.String elementName, XMLStream private Communication.Payload parseCommunicationPayload(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Communication.Payload.Builder builder = Communication.Payload.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -8226,7 +8742,11 @@ private Communication.Payload parseCommunicationPayload(java.lang.String element builder.content(parseReference("contentReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -8243,6 +8763,7 @@ private Communication.Payload parseCommunicationPayload(java.lang.String element private CommunicationRequest parseCommunicationRequest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CommunicationRequest.Builder builder = CommunicationRequest.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, basedOnElementIndex = 0, replacesElementIndex = 0, categoryElementIndex = 0, mediumElementIndex = 0, aboutElementIndex = 0, payloadElementIndex = 0, recipientElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, noteElementIndex = 0; while (reader.hasNext()) { @@ -8377,7 +8898,11 @@ private CommunicationRequest parseCommunicationRequest(java.lang.String elementN builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -8394,6 +8919,7 @@ private CommunicationRequest parseCommunicationRequest(java.lang.String elementN private CommunicationRequest.Payload parseCommunicationRequestPayload(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CommunicationRequest.Payload.Builder builder = CommunicationRequest.Payload.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -8428,7 +8954,11 @@ private CommunicationRequest.Payload parseCommunicationRequestPayload(java.lang. builder.content(parseReference("contentReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -8445,6 +8975,7 @@ private CommunicationRequest.Payload parseCommunicationRequestPayload(java.lang. private CompartmentDefinition parseCompartmentDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CompartmentDefinition.Builder builder = CompartmentDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, resourceElementIndex = 0; while (reader.hasNext()) { @@ -8543,7 +9074,11 @@ private CompartmentDefinition parseCompartmentDefinition(java.lang.String elemen builder.resource(parseCompartmentDefinitionResource("resource", reader, resourceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -8560,6 +9095,7 @@ private CompartmentDefinition parseCompartmentDefinition(java.lang.String elemen private CompartmentDefinition.Resource parseCompartmentDefinitionResource(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CompartmentDefinition.Resource.Builder builder = CompartmentDefinition.Resource.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -8594,7 +9130,11 @@ private CompartmentDefinition.Resource parseCompartmentDefinitionResource(java.l builder.documentation(parseString("documentation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -8611,6 +9151,7 @@ private CompartmentDefinition.Resource parseCompartmentDefinitionResource(java.l private Composition parseComposition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Composition.Builder builder = Composition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, categoryElementIndex = 0, authorElementIndex = 0, attesterElementIndex = 0, relatesToElementIndex = 0, eventElementIndex = 0, sectionElementIndex = 0; while (reader.hasNext()) { @@ -8713,7 +9254,11 @@ private Composition parseComposition(java.lang.String elementName, XMLStreamRead builder.section(parseCompositionSection("section", reader, sectionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -8730,6 +9275,7 @@ private Composition parseComposition(java.lang.String elementName, XMLStreamRead private Composition.Attester parseCompositionAttester(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Composition.Attester.Builder builder = Composition.Attester.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -8764,7 +9310,11 @@ private Composition.Attester parseCompositionAttester(java.lang.String elementNa builder.party(parseReference("party", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -8781,6 +9331,7 @@ private Composition.Attester parseCompositionAttester(java.lang.String elementNa private Composition.Event parseCompositionEvent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Composition.Event.Builder builder = Composition.Event.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -8815,7 +9366,11 @@ private Composition.Event parseCompositionEvent(java.lang.String elementName, XM builder.detail(parseReference("detail", reader, detailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -8832,6 +9387,7 @@ private Composition.Event parseCompositionEvent(java.lang.String elementName, XM private Composition.RelatesTo parseCompositionRelatesTo(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Composition.RelatesTo.Builder builder = Composition.RelatesTo.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -8866,7 +9422,11 @@ private Composition.RelatesTo parseCompositionRelatesTo(java.lang.String element builder.target(parseReference("targetReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -8883,6 +9443,7 @@ private Composition.RelatesTo parseCompositionRelatesTo(java.lang.String element private Composition.Section parseCompositionSection(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Composition.Section.Builder builder = Composition.Section.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -8945,7 +9506,11 @@ private Composition.Section parseCompositionSection(java.lang.String elementName builder.section(parseCompositionSection("section", reader, sectionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -8962,6 +9527,7 @@ private Composition.Section parseCompositionSection(java.lang.String elementName private ConceptMap parseConceptMap(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ConceptMap.Builder builder = ConceptMap.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, groupElementIndex = 0; while (reader.hasNext()) { @@ -9084,7 +9650,11 @@ private ConceptMap parseConceptMap(java.lang.String elementName, XMLStreamReader builder.group(parseConceptMapGroup("group", reader, groupElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9101,6 +9671,7 @@ private ConceptMap parseConceptMap(java.lang.String elementName, XMLStreamReader private ConceptMap.Group parseConceptMapGroup(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ConceptMap.Group.Builder builder = ConceptMap.Group.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -9147,7 +9718,11 @@ private ConceptMap.Group parseConceptMapGroup(java.lang.String elementName, XMLS builder.unmapped(parseConceptMapGroupUnmapped("unmapped", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9164,6 +9739,7 @@ private ConceptMap.Group parseConceptMapGroup(java.lang.String elementName, XMLS private ConceptMap.Group.Element parseConceptMapGroupElement(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ConceptMap.Group.Element.Builder builder = ConceptMap.Group.Element.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -9198,7 +9774,11 @@ private ConceptMap.Group.Element parseConceptMapGroupElement(java.lang.String el builder.target(parseConceptMapGroupElementTarget("target", reader, targetElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9215,6 +9795,7 @@ private ConceptMap.Group.Element parseConceptMapGroupElement(java.lang.String el private ConceptMap.Group.Element.Target parseConceptMapGroupElementTarget(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ConceptMap.Group.Element.Target.Builder builder = ConceptMap.Group.Element.Target.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -9261,7 +9842,11 @@ private ConceptMap.Group.Element.Target parseConceptMapGroupElementTarget(java.l builder.product(parseConceptMapGroupElementTargetDependsOn("product", reader, productElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9278,6 +9863,7 @@ private ConceptMap.Group.Element.Target parseConceptMapGroupElementTarget(java.l private ConceptMap.Group.Element.Target.DependsOn parseConceptMapGroupElementTargetDependsOn(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ConceptMap.Group.Element.Target.DependsOn.Builder builder = ConceptMap.Group.Element.Target.DependsOn.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -9316,7 +9902,11 @@ private ConceptMap.Group.Element.Target.DependsOn parseConceptMapGroupElementTar builder.display(parseString("display", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9333,6 +9923,7 @@ private ConceptMap.Group.Element.Target.DependsOn parseConceptMapGroupElementTar private ConceptMap.Group.Unmapped parseConceptMapGroupUnmapped(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ConceptMap.Group.Unmapped.Builder builder = ConceptMap.Group.Unmapped.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -9371,7 +9962,11 @@ private ConceptMap.Group.Unmapped parseConceptMapGroupUnmapped(java.lang.String builder.url((Canonical) parseUri(Canonical.builder(), "url", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9388,6 +9983,7 @@ private ConceptMap.Group.Unmapped parseConceptMapGroupUnmapped(java.lang.String private Condition parseCondition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Condition.Builder builder = Condition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, categoryElementIndex = 0, bodySiteElementIndex = 0, stageElementIndex = 0, evidenceElementIndex = 0, noteElementIndex = 0; while (reader.hasNext()) { @@ -9530,7 +10126,11 @@ private Condition parseCondition(java.lang.String elementName, XMLStreamReader r builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9547,6 +10147,7 @@ private Condition parseCondition(java.lang.String elementName, XMLStreamReader r private Condition.Evidence parseConditionEvidence(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Condition.Evidence.Builder builder = Condition.Evidence.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -9577,7 +10178,11 @@ private Condition.Evidence parseConditionEvidence(java.lang.String elementName, builder.detail(parseReference("detail", reader, detailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9594,6 +10199,7 @@ private Condition.Evidence parseConditionEvidence(java.lang.String elementName, private Condition.Stage parseConditionStage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Condition.Stage.Builder builder = Condition.Stage.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -9628,7 +10234,11 @@ private Condition.Stage parseConditionStage(java.lang.String elementName, XMLStr builder.type(parseCodeableConcept("type", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9645,6 +10255,7 @@ private Condition.Stage parseConditionStage(java.lang.String elementName, XMLStr private Consent parseConsent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Consent.Builder builder = Consent.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, categoryElementIndex = 0, performerElementIndex = 0, organizationElementIndex = 0, policyElementIndex = 0, verificationElementIndex = 0; while (reader.hasNext()) { @@ -9743,7 +10354,11 @@ private Consent parseConsent(java.lang.String elementName, XMLStreamReader reade builder.provision(parseConsentProvision("provision", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9760,6 +10375,7 @@ private Consent parseConsent(java.lang.String elementName, XMLStreamReader reade private Consent.Policy parseConsentPolicy(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Consent.Policy.Builder builder = Consent.Policy.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -9790,7 +10406,11 @@ private Consent.Policy parseConsentPolicy(java.lang.String elementName, XMLStrea builder.uri(parseUri("uri", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9807,6 +10427,7 @@ private Consent.Policy parseConsentPolicy(java.lang.String elementName, XMLStrea private Consent.Provision parseConsentProvision(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Consent.Provision.Builder builder = Consent.Provision.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -9873,7 +10494,11 @@ private Consent.Provision parseConsentProvision(java.lang.String elementName, XM builder.provision(parseConsentProvision("provision", reader, provisionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9890,6 +10515,7 @@ private Consent.Provision parseConsentProvision(java.lang.String elementName, XM private Consent.Provision.Actor parseConsentProvisionActor(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Consent.Provision.Actor.Builder builder = Consent.Provision.Actor.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -9920,7 +10546,11 @@ private Consent.Provision.Actor parseConsentProvisionActor(java.lang.String elem builder.reference(parseReference("reference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9937,6 +10567,7 @@ private Consent.Provision.Actor parseConsentProvisionActor(java.lang.String elem private Consent.Provision.Data parseConsentProvisionData(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Consent.Provision.Data.Builder builder = Consent.Provision.Data.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -9967,7 +10598,11 @@ private Consent.Provision.Data parseConsentProvisionData(java.lang.String elemen builder.reference(parseReference("reference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -9984,6 +10619,7 @@ private Consent.Provision.Data parseConsentProvisionData(java.lang.String elemen private Consent.Verification parseConsentVerification(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Consent.Verification.Builder builder = Consent.Verification.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -10018,7 +10654,11 @@ private Consent.Verification parseConsentVerification(java.lang.String elementNa builder.verificationDate(parseDateTime("verificationDate", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -10035,6 +10675,7 @@ private Consent.Verification parseConsentVerification(java.lang.String elementNa private ContactDetail parseContactDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ContactDetail.Builder builder = ContactDetail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -10061,7 +10702,11 @@ private ContactDetail parseContactDetail(java.lang.String elementName, XMLStream builder.telecom(parseContactPoint("telecom", reader, telecomElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -10078,6 +10723,7 @@ private ContactDetail parseContactDetail(java.lang.String elementName, XMLStream private ContactPoint parseContactPoint(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ContactPoint.Builder builder = ContactPoint.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -10116,7 +10762,11 @@ private ContactPoint parseContactPoint(java.lang.String elementName, XMLStreamRe builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -10133,6 +10783,7 @@ private ContactPoint parseContactPoint(java.lang.String elementName, XMLStreamRe private Contract parseContract(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Builder builder = Contract.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, subjectElementIndex = 0, authorityElementIndex = 0, domainElementIndex = 0, siteElementIndex = 0, aliasElementIndex = 0, subTypeElementIndex = 0, termElementIndex = 0, supportingInfoElementIndex = 0, relevantHistoryElementIndex = 0, signerElementIndex = 0, friendlyElementIndex = 0, legalElementIndex = 0, ruleElementIndex = 0; while (reader.hasNext()) { @@ -10315,7 +10966,11 @@ private Contract parseContract(java.lang.String elementName, XMLStreamReader rea builder.legallyBinding(parseReference("legallyBindingReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -10332,6 +10987,7 @@ private Contract parseContract(java.lang.String elementName, XMLStreamReader rea private Contract.ContentDefinition parseContractContentDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.ContentDefinition.Builder builder = Contract.ContentDefinition.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -10378,7 +11034,11 @@ private Contract.ContentDefinition parseContractContentDefinition(java.lang.Stri builder.copyright((Markdown) parseString(Markdown.builder(), "copyright", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -10395,6 +11055,7 @@ private Contract.ContentDefinition parseContractContentDefinition(java.lang.Stri private Contract.Friendly parseContractFriendly(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Friendly.Builder builder = Contract.Friendly.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -10425,7 +11086,11 @@ private Contract.Friendly parseContractFriendly(java.lang.String elementName, XM builder.content(parseReference("contentReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -10442,6 +11107,7 @@ private Contract.Friendly parseContractFriendly(java.lang.String elementName, XM private Contract.Legal parseContractLegal(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Legal.Builder builder = Contract.Legal.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -10472,7 +11138,11 @@ private Contract.Legal parseContractLegal(java.lang.String elementName, XMLStrea builder.content(parseReference("contentReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -10489,6 +11159,7 @@ private Contract.Legal parseContractLegal(java.lang.String elementName, XMLStrea private Contract.Rule parseContractRule(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Rule.Builder builder = Contract.Rule.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -10519,7 +11190,11 @@ private Contract.Rule parseContractRule(java.lang.String elementName, XMLStreamR builder.content(parseReference("contentReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -10536,6 +11211,7 @@ private Contract.Rule parseContractRule(java.lang.String elementName, XMLStreamR private Contract.Signer parseContractSigner(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Signer.Builder builder = Contract.Signer.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -10570,7 +11246,11 @@ private Contract.Signer parseContractSigner(java.lang.String elementName, XMLStr builder.signature(parseSignature("signature", reader, signatureElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -10587,6 +11267,7 @@ private Contract.Signer parseContractSigner(java.lang.String elementName, XMLStr private Contract.Term parseContractTerm(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Term.Builder builder = Contract.Term.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -10661,7 +11342,11 @@ private Contract.Term parseContractTerm(java.lang.String elementName, XMLStreamR builder.group(parseContractTerm("group", reader, groupElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -10678,6 +11363,7 @@ private Contract.Term parseContractTerm(java.lang.String elementName, XMLStreamR private Contract.Term.Action parseContractTermAction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Term.Action.Builder builder = Contract.Term.Action.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -10792,7 +11478,11 @@ private Contract.Term.Action parseContractTermAction(java.lang.String elementNam builder.securityLabelNumber((UnsignedInt) parseInteger(UnsignedInt.builder(), "securityLabelNumber", reader, securityLabelNumberElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -10809,6 +11499,7 @@ private Contract.Term.Action parseContractTermAction(java.lang.String elementNam private Contract.Term.Action.Subject parseContractTermActionSubject(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Term.Action.Subject.Builder builder = Contract.Term.Action.Subject.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -10839,7 +11530,11 @@ private Contract.Term.Action.Subject parseContractTermActionSubject(java.lang.St builder.role(parseCodeableConcept("role", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -10856,6 +11551,7 @@ private Contract.Term.Action.Subject parseContractTermActionSubject(java.lang.St private Contract.Term.Asset parseContractTermAsset(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Term.Asset.Builder builder = Contract.Term.Asset.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -10938,7 +11634,11 @@ private Contract.Term.Asset parseContractTermAsset(java.lang.String elementName, builder.valuedItem(parseContractTermAssetValuedItem("valuedItem", reader, valuedItemElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -10955,6 +11655,7 @@ private Contract.Term.Asset parseContractTermAsset(java.lang.String elementName, private Contract.Term.Asset.Context parseContractTermAssetContext(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Term.Asset.Context.Builder builder = Contract.Term.Asset.Context.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -10989,7 +11690,11 @@ private Contract.Term.Asset.Context parseContractTermAssetContext(java.lang.Stri builder.text(parseString("text", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11006,6 +11711,7 @@ private Contract.Term.Asset.Context parseContractTermAssetContext(java.lang.Stri private Contract.Term.Asset.ValuedItem parseContractTermAssetValuedItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Term.Asset.ValuedItem.Builder builder = Contract.Term.Asset.ValuedItem.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -11088,7 +11794,11 @@ private Contract.Term.Asset.ValuedItem parseContractTermAssetValuedItem(java.lan builder.securityLabelNumber((UnsignedInt) parseInteger(UnsignedInt.builder(), "securityLabelNumber", reader, securityLabelNumberElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11105,6 +11815,7 @@ private Contract.Term.Asset.ValuedItem parseContractTermAssetValuedItem(java.lan private Contract.Term.Offer parseContractTermOffer(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Term.Offer.Builder builder = Contract.Term.Offer.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -11167,7 +11878,11 @@ private Contract.Term.Offer parseContractTermOffer(java.lang.String elementName, builder.securityLabelNumber((UnsignedInt) parseInteger(UnsignedInt.builder(), "securityLabelNumber", reader, securityLabelNumberElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11184,6 +11899,7 @@ private Contract.Term.Offer parseContractTermOffer(java.lang.String elementName, private Contract.Term.Offer.Answer parseContractTermOfferAnswer(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Term.Offer.Answer.Builder builder = Contract.Term.Offer.Answer.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -11254,7 +11970,11 @@ private Contract.Term.Offer.Answer parseContractTermOfferAnswer(java.lang.String builder.value(parseReference("valueReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11271,6 +11991,7 @@ private Contract.Term.Offer.Answer parseContractTermOfferAnswer(java.lang.String private Contract.Term.Offer.Party parseContractTermOfferParty(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Term.Offer.Party.Builder builder = Contract.Term.Offer.Party.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -11301,7 +12022,11 @@ private Contract.Term.Offer.Party parseContractTermOfferParty(java.lang.String e builder.role(parseCodeableConcept("role", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11318,6 +12043,7 @@ private Contract.Term.Offer.Party parseContractTermOfferParty(java.lang.String e private Contract.Term.SecurityLabel parseContractTermSecurityLabel(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contract.Term.SecurityLabel.Builder builder = Contract.Term.SecurityLabel.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -11356,7 +12082,11 @@ private Contract.Term.SecurityLabel parseContractTermSecurityLabel(java.lang.Str builder.control(parseCoding("control", reader, controlElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11373,6 +12103,7 @@ private Contract.Term.SecurityLabel parseContractTermSecurityLabel(java.lang.Str private Contributor parseContributor(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Contributor.Builder builder = Contributor.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -11403,7 +12134,11 @@ private Contributor parseContributor(java.lang.String elementName, XMLStreamRead builder.contact(parseContactDetail("contact", reader, contactElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11420,6 +12155,7 @@ private Contributor parseContributor(java.lang.String elementName, XMLStreamRead private Coverage parseCoverage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Coverage.Builder builder = Coverage.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, payorElementIndex = 0, classElementIndex = 0, costToBeneficiaryElementIndex = 0, contractElementIndex = 0; while (reader.hasNext()) { @@ -11530,7 +12266,11 @@ private Coverage parseCoverage(java.lang.String elementName, XMLStreamReader rea builder.contract(parseReference("contract", reader, contractElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11547,6 +12287,7 @@ private Coverage parseCoverage(java.lang.String elementName, XMLStreamReader rea private Coverage.Class parseCoverageClass(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Coverage.Class.Builder builder = Coverage.Class.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -11581,7 +12322,11 @@ private Coverage.Class parseCoverageClass(java.lang.String elementName, XMLStrea builder.name(parseString("name", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11598,6 +12343,7 @@ private Coverage.Class parseCoverageClass(java.lang.String elementName, XMLStrea private Coverage.CostToBeneficiary parseCoverageCostToBeneficiary(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Coverage.CostToBeneficiary.Builder builder = Coverage.CostToBeneficiary.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -11636,7 +12382,11 @@ private Coverage.CostToBeneficiary parseCoverageCostToBeneficiary(java.lang.Stri builder.exception(parseCoverageCostToBeneficiaryException("exception", reader, exceptionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11653,6 +12403,7 @@ private Coverage.CostToBeneficiary parseCoverageCostToBeneficiary(java.lang.Stri private Coverage.CostToBeneficiary.Exception parseCoverageCostToBeneficiaryException(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Coverage.CostToBeneficiary.Exception.Builder builder = Coverage.CostToBeneficiary.Exception.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -11683,7 +12434,11 @@ private Coverage.CostToBeneficiary.Exception parseCoverageCostToBeneficiaryExcep builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11700,6 +12455,7 @@ private Coverage.CostToBeneficiary.Exception parseCoverageCostToBeneficiaryExcep private CoverageEligibilityRequest parseCoverageEligibilityRequest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CoverageEligibilityRequest.Builder builder = CoverageEligibilityRequest.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, purposeElementIndex = 0, supportingInfoElementIndex = 0, insuranceElementIndex = 0, itemElementIndex = 0; while (reader.hasNext()) { @@ -11802,7 +12558,11 @@ private CoverageEligibilityRequest parseCoverageEligibilityRequest(java.lang.Str builder.item(parseCoverageEligibilityRequestItem("item", reader, itemElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11819,6 +12579,7 @@ private CoverageEligibilityRequest parseCoverageEligibilityRequest(java.lang.Str private CoverageEligibilityRequest.Insurance parseCoverageEligibilityRequestInsurance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CoverageEligibilityRequest.Insurance.Builder builder = CoverageEligibilityRequest.Insurance.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -11853,7 +12614,11 @@ private CoverageEligibilityRequest.Insurance parseCoverageEligibilityRequestInsu builder.businessArrangement(parseString("businessArrangement", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11870,6 +12635,7 @@ private CoverageEligibilityRequest.Insurance parseCoverageEligibilityRequestInsu private CoverageEligibilityRequest.Item parseCoverageEligibilityRequestItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CoverageEligibilityRequest.Item.Builder builder = CoverageEligibilityRequest.Item.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -11932,7 +12698,11 @@ private CoverageEligibilityRequest.Item parseCoverageEligibilityRequestItem(java builder.detail(parseReference("detail", reader, detailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11949,6 +12719,7 @@ private CoverageEligibilityRequest.Item parseCoverageEligibilityRequestItem(java private CoverageEligibilityRequest.Item.Diagnosis parseCoverageEligibilityRequestItemDiagnosis(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CoverageEligibilityRequest.Item.Diagnosis.Builder builder = CoverageEligibilityRequest.Item.Diagnosis.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -11979,7 +12750,11 @@ private CoverageEligibilityRequest.Item.Diagnosis parseCoverageEligibilityReques builder.diagnosis(parseReference("diagnosisReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -11996,6 +12771,7 @@ private CoverageEligibilityRequest.Item.Diagnosis parseCoverageEligibilityReques private CoverageEligibilityRequest.SupportingInfo parseCoverageEligibilityRequestSupportingInfo(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CoverageEligibilityRequest.SupportingInfo.Builder builder = CoverageEligibilityRequest.SupportingInfo.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12030,7 +12806,11 @@ private CoverageEligibilityRequest.SupportingInfo parseCoverageEligibilityReques builder.appliesToAll(parseBoolean("appliesToAll", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12047,6 +12827,7 @@ private CoverageEligibilityRequest.SupportingInfo parseCoverageEligibilityReques private CoverageEligibilityResponse parseCoverageEligibilityResponse(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CoverageEligibilityResponse.Builder builder = CoverageEligibilityResponse.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, purposeElementIndex = 0, insuranceElementIndex = 0, errorElementIndex = 0; while (reader.hasNext()) { @@ -12153,7 +12934,11 @@ private CoverageEligibilityResponse parseCoverageEligibilityResponse(java.lang.S builder.error(parseCoverageEligibilityResponseError("error", reader, errorElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12170,6 +12955,7 @@ private CoverageEligibilityResponse parseCoverageEligibilityResponse(java.lang.S private CoverageEligibilityResponse.Error parseCoverageEligibilityResponseError(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CoverageEligibilityResponse.Error.Builder builder = CoverageEligibilityResponse.Error.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12196,7 +12982,11 @@ private CoverageEligibilityResponse.Error parseCoverageEligibilityResponseError( builder.code(parseCodeableConcept("code", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12213,6 +13003,7 @@ private CoverageEligibilityResponse.Error parseCoverageEligibilityResponseError( private CoverageEligibilityResponse.Insurance parseCoverageEligibilityResponseInsurance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CoverageEligibilityResponse.Insurance.Builder builder = CoverageEligibilityResponse.Insurance.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12251,7 +13042,11 @@ private CoverageEligibilityResponse.Insurance parseCoverageEligibilityResponseIn builder.item(parseCoverageEligibilityResponseInsuranceItem("item", reader, itemElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12268,6 +13063,7 @@ private CoverageEligibilityResponse.Insurance parseCoverageEligibilityResponseIn private CoverageEligibilityResponse.Insurance.Item parseCoverageEligibilityResponseInsuranceItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CoverageEligibilityResponse.Insurance.Item.Builder builder = CoverageEligibilityResponse.Insurance.Item.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12346,7 +13142,11 @@ private CoverageEligibilityResponse.Insurance.Item parseCoverageEligibilityRespo builder.authorizationUrl(parseUri("authorizationUrl", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12363,6 +13163,7 @@ private CoverageEligibilityResponse.Insurance.Item parseCoverageEligibilityRespo private CoverageEligibilityResponse.Insurance.Item.Benefit parseCoverageEligibilityResponseInsuranceItemBenefit(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); CoverageEligibilityResponse.Insurance.Item.Benefit.Builder builder = CoverageEligibilityResponse.Insurance.Item.Benefit.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12413,7 +13214,11 @@ private CoverageEligibilityResponse.Insurance.Item.Benefit parseCoverageEligibil builder.used(parseMoney("usedMoney", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12430,6 +13235,7 @@ private CoverageEligibilityResponse.Insurance.Item.Benefit parseCoverageEligibil private DataRequirement parseDataRequirement(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DataRequirement.Builder builder = DataRequirement.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12484,7 +13290,11 @@ private DataRequirement parseDataRequirement(java.lang.String elementName, XMLSt builder.sort(parseDataRequirementSort("sort", reader, sortElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12501,6 +13311,7 @@ private DataRequirement parseDataRequirement(java.lang.String elementName, XMLSt private DataRequirement.CodeFilter parseDataRequirementCodeFilter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DataRequirement.CodeFilter.Builder builder = DataRequirement.CodeFilter.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12539,7 +13350,11 @@ private DataRequirement.CodeFilter parseDataRequirementCodeFilter(java.lang.Stri builder.code(parseCoding("code", reader, codeElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12556,6 +13371,7 @@ private DataRequirement.CodeFilter parseDataRequirementCodeFilter(java.lang.Stri private DataRequirement.DateFilter parseDataRequirementDateFilter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DataRequirement.DateFilter.Builder builder = DataRequirement.DateFilter.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12598,7 +13414,11 @@ private DataRequirement.DateFilter parseDataRequirementDateFilter(java.lang.Stri builder.value((Duration) parseQuantity(Duration.builder(), "valueDuration", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12615,6 +13435,7 @@ private DataRequirement.DateFilter parseDataRequirementDateFilter(java.lang.Stri private DataRequirement.Sort parseDataRequirementSort(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DataRequirement.Sort.Builder builder = DataRequirement.Sort.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12645,7 +13466,11 @@ private DataRequirement.Sort parseDataRequirementSort(java.lang.String elementNa builder.direction((SortDirection) parseString(SortDirection.builder(), "direction", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12662,6 +13487,7 @@ private DataRequirement.Sort parseDataRequirementSort(java.lang.String elementNa private Date parseDate(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Date.Builder builder = Date.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12684,7 +13510,11 @@ private Date parseDate(java.lang.String elementName, XMLStreamReader reader, int builder.extension(parseExtension("extension", reader, extensionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12701,6 +13531,7 @@ private Date parseDate(java.lang.String elementName, XMLStreamReader reader, int private DateTime parseDateTime(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DateTime.Builder builder = DateTime.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12723,7 +13554,11 @@ private DateTime parseDateTime(java.lang.String elementName, XMLStreamReader rea builder.extension(parseExtension("extension", reader, extensionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12740,6 +13575,7 @@ private DateTime parseDateTime(java.lang.String elementName, XMLStreamReader rea private Decimal parseDecimal(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Decimal.Builder builder = Decimal.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12762,7 +13598,11 @@ private Decimal parseDecimal(java.lang.String elementName, XMLStreamReader reade builder.extension(parseExtension("extension", reader, extensionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12779,6 +13619,7 @@ private Decimal parseDecimal(java.lang.String elementName, XMLStreamReader reade private DetectedIssue parseDetectedIssue(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DetectedIssue.Builder builder = DetectedIssue.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, implicatedElementIndex = 0, evidenceElementIndex = 0, mitigationElementIndex = 0; while (reader.hasNext()) { @@ -12873,7 +13714,11 @@ private DetectedIssue parseDetectedIssue(java.lang.String elementName, XMLStream builder.mitigation(parseDetectedIssueMitigation("mitigation", reader, mitigationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12890,6 +13735,7 @@ private DetectedIssue parseDetectedIssue(java.lang.String elementName, XMLStream private DetectedIssue.Evidence parseDetectedIssueEvidence(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DetectedIssue.Evidence.Builder builder = DetectedIssue.Evidence.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12920,7 +13766,11 @@ private DetectedIssue.Evidence parseDetectedIssueEvidence(java.lang.String eleme builder.detail(parseReference("detail", reader, detailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12937,6 +13787,7 @@ private DetectedIssue.Evidence parseDetectedIssueEvidence(java.lang.String eleme private DetectedIssue.Mitigation parseDetectedIssueMitigation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DetectedIssue.Mitigation.Builder builder = DetectedIssue.Mitigation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -12971,7 +13822,11 @@ private DetectedIssue.Mitigation parseDetectedIssueMitigation(java.lang.String e builder.author(parseReference("author", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -12988,6 +13843,7 @@ private DetectedIssue.Mitigation parseDetectedIssueMitigation(java.lang.String e private Device parseDevice(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Device.Builder builder = Device.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, udiCarrierElementIndex = 0, statusReasonElementIndex = 0, deviceNameElementIndex = 0, specializationElementIndex = 0, versionElementIndex = 0, propertyElementIndex = 0, contactElementIndex = 0, noteElementIndex = 0, safetyElementIndex = 0; while (reader.hasNext()) { @@ -13134,7 +13990,11 @@ private Device parseDevice(java.lang.String elementName, XMLStreamReader reader, builder.parent(parseReference("parent", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13151,6 +14011,7 @@ private Device parseDevice(java.lang.String elementName, XMLStreamReader reader, private Device.DeviceName parseDeviceDeviceName(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Device.DeviceName.Builder builder = Device.DeviceName.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -13181,7 +14042,11 @@ private Device.DeviceName parseDeviceDeviceName(java.lang.String elementName, XM builder.type((DeviceNameType) parseString(DeviceNameType.builder(), "type", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13198,6 +14063,7 @@ private Device.DeviceName parseDeviceDeviceName(java.lang.String elementName, XM private Device.Property parseDeviceProperty(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Device.Property.Builder builder = Device.Property.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -13232,7 +14098,11 @@ private Device.Property parseDeviceProperty(java.lang.String elementName, XMLStr builder.valueCode(parseCodeableConcept("valueCode", reader, valueCodeElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13249,6 +14119,7 @@ private Device.Property parseDeviceProperty(java.lang.String elementName, XMLStr private Device.Specialization parseDeviceSpecialization(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Device.Specialization.Builder builder = Device.Specialization.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -13279,7 +14150,11 @@ private Device.Specialization parseDeviceSpecialization(java.lang.String element builder.version(parseString("version", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13296,6 +14171,7 @@ private Device.Specialization parseDeviceSpecialization(java.lang.String element private Device.UdiCarrier parseDeviceUdiCarrier(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Device.UdiCarrier.Builder builder = Device.UdiCarrier.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -13342,7 +14218,11 @@ private Device.UdiCarrier parseDeviceUdiCarrier(java.lang.String elementName, XM builder.entryType((UDIEntryType) parseString(UDIEntryType.builder(), "entryType", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13359,6 +14239,7 @@ private Device.UdiCarrier parseDeviceUdiCarrier(java.lang.String elementName, XM private Device.Version parseDeviceVersion(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Device.Version.Builder builder = Device.Version.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -13393,7 +14274,11 @@ private Device.Version parseDeviceVersion(java.lang.String elementName, XMLStrea builder.value(parseString("value", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13410,6 +14295,7 @@ private Device.Version parseDeviceVersion(java.lang.String elementName, XMLStrea private DeviceDefinition parseDeviceDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DeviceDefinition.Builder builder = DeviceDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, udiDeviceIdentifierElementIndex = 0, deviceNameElementIndex = 0, specializationElementIndex = 0, versionElementIndex = 0, safetyElementIndex = 0, shelfLifeStorageElementIndex = 0, languageCodeElementIndex = 0, capabilityElementIndex = 0, propertyElementIndex = 0, contactElementIndex = 0, noteElementIndex = 0, materialElementIndex = 0; while (reader.hasNext()) { @@ -13544,7 +14430,11 @@ private DeviceDefinition parseDeviceDefinition(java.lang.String elementName, XML builder.material(parseDeviceDefinitionMaterial("material", reader, materialElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13561,6 +14451,7 @@ private DeviceDefinition parseDeviceDefinition(java.lang.String elementName, XML private DeviceDefinition.Capability parseDeviceDefinitionCapability(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DeviceDefinition.Capability.Builder builder = DeviceDefinition.Capability.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -13591,7 +14482,11 @@ private DeviceDefinition.Capability parseDeviceDefinitionCapability(java.lang.St builder.description(parseCodeableConcept("description", reader, descriptionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13608,6 +14503,7 @@ private DeviceDefinition.Capability parseDeviceDefinitionCapability(java.lang.St private DeviceDefinition.DeviceName parseDeviceDefinitionDeviceName(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DeviceDefinition.DeviceName.Builder builder = DeviceDefinition.DeviceName.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -13638,7 +14534,11 @@ private DeviceDefinition.DeviceName parseDeviceDefinitionDeviceName(java.lang.St builder.type((DeviceNameType) parseString(DeviceNameType.builder(), "type", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13655,6 +14555,7 @@ private DeviceDefinition.DeviceName parseDeviceDefinitionDeviceName(java.lang.St private DeviceDefinition.Material parseDeviceDefinitionMaterial(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DeviceDefinition.Material.Builder builder = DeviceDefinition.Material.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -13689,7 +14590,11 @@ private DeviceDefinition.Material parseDeviceDefinitionMaterial(java.lang.String builder.allergenicIndicator(parseBoolean("allergenicIndicator", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13706,6 +14611,7 @@ private DeviceDefinition.Material parseDeviceDefinitionMaterial(java.lang.String private DeviceDefinition.Property parseDeviceDefinitionProperty(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DeviceDefinition.Property.Builder builder = DeviceDefinition.Property.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -13740,7 +14646,11 @@ private DeviceDefinition.Property parseDeviceDefinitionProperty(java.lang.String builder.valueCode(parseCodeableConcept("valueCode", reader, valueCodeElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13757,6 +14667,7 @@ private DeviceDefinition.Property parseDeviceDefinitionProperty(java.lang.String private DeviceDefinition.Specialization parseDeviceDefinitionSpecialization(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DeviceDefinition.Specialization.Builder builder = DeviceDefinition.Specialization.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -13787,7 +14698,11 @@ private DeviceDefinition.Specialization parseDeviceDefinitionSpecialization(java builder.version(parseString("version", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13804,6 +14719,7 @@ private DeviceDefinition.Specialization parseDeviceDefinitionSpecialization(java private DeviceDefinition.UdiDeviceIdentifier parseDeviceDefinitionUdiDeviceIdentifier(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DeviceDefinition.UdiDeviceIdentifier.Builder builder = DeviceDefinition.UdiDeviceIdentifier.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -13838,7 +14754,11 @@ private DeviceDefinition.UdiDeviceIdentifier parseDeviceDefinitionUdiDeviceIdent builder.jurisdiction(parseUri("jurisdiction", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13855,6 +14775,7 @@ private DeviceDefinition.UdiDeviceIdentifier parseDeviceDefinitionUdiDeviceIdent private DeviceMetric parseDeviceMetric(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DeviceMetric.Builder builder = DeviceMetric.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, calibrationElementIndex = 0; while (reader.hasNext()) { @@ -13937,7 +14858,11 @@ private DeviceMetric parseDeviceMetric(java.lang.String elementName, XMLStreamRe builder.calibration(parseDeviceMetricCalibration("calibration", reader, calibrationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -13954,6 +14879,7 @@ private DeviceMetric parseDeviceMetric(java.lang.String elementName, XMLStreamRe private DeviceMetric.Calibration parseDeviceMetricCalibration(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DeviceMetric.Calibration.Builder builder = DeviceMetric.Calibration.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -13988,7 +14914,11 @@ private DeviceMetric.Calibration parseDeviceMetricCalibration(java.lang.String e builder.time(parseInstant("time", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -14005,6 +14935,7 @@ private DeviceMetric.Calibration parseDeviceMetricCalibration(java.lang.String e private DeviceRequest parseDeviceRequest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DeviceRequest.Builder builder = DeviceRequest.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, instantiatesCanonicalElementIndex = 0, instantiatesUriElementIndex = 0, basedOnElementIndex = 0, priorRequestElementIndex = 0, parameterElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, insuranceElementIndex = 0, supportingInfoElementIndex = 0, noteElementIndex = 0, relevantHistoryElementIndex = 0; while (reader.hasNext()) { @@ -14155,7 +15086,11 @@ private DeviceRequest parseDeviceRequest(java.lang.String elementName, XMLStream builder.relevantHistory(parseReference("relevantHistory", reader, relevantHistoryElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -14172,6 +15107,7 @@ private DeviceRequest parseDeviceRequest(java.lang.String elementName, XMLStream private DeviceRequest.Parameter parseDeviceRequestParameter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DeviceRequest.Parameter.Builder builder = DeviceRequest.Parameter.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -14214,7 +15150,11 @@ private DeviceRequest.Parameter parseDeviceRequestParameter(java.lang.String ele builder.value(parseBoolean("valueBoolean", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -14231,6 +15171,7 @@ private DeviceRequest.Parameter parseDeviceRequestParameter(java.lang.String ele private DeviceUseStatement parseDeviceUseStatement(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DeviceUseStatement.Builder builder = DeviceUseStatement.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, basedOnElementIndex = 0, derivedFromElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, noteElementIndex = 0; while (reader.hasNext()) { @@ -14333,7 +15274,11 @@ private DeviceUseStatement parseDeviceUseStatement(java.lang.String elementName, builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -14350,6 +15295,7 @@ private DeviceUseStatement parseDeviceUseStatement(java.lang.String elementName, private DiagnosticReport parseDiagnosticReport(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DiagnosticReport.Builder builder = DiagnosticReport.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, basedOnElementIndex = 0, categoryElementIndex = 0, performerElementIndex = 0, resultsInterpreterElementIndex = 0, specimenElementIndex = 0, resultElementIndex = 0, imagingStudyElementIndex = 0, mediaElementIndex = 0, conclusionCodeElementIndex = 0, presentedFormElementIndex = 0; while (reader.hasNext()) { @@ -14468,7 +15414,11 @@ private DiagnosticReport parseDiagnosticReport(java.lang.String elementName, XML builder.presentedForm(parseAttachment("presentedForm", reader, presentedFormElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -14485,6 +15435,7 @@ private DiagnosticReport parseDiagnosticReport(java.lang.String elementName, XML private DiagnosticReport.Media parseDiagnosticReportMedia(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DiagnosticReport.Media.Builder builder = DiagnosticReport.Media.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -14515,7 +15466,11 @@ private DiagnosticReport.Media parseDiagnosticReportMedia(java.lang.String eleme builder.link(parseReference("link", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -14532,6 +15487,7 @@ private DiagnosticReport.Media parseDiagnosticReportMedia(java.lang.String eleme private DocumentManifest parseDocumentManifest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DocumentManifest.Builder builder = DocumentManifest.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, authorElementIndex = 0, recipientElementIndex = 0, contentElementIndex = 0, relatedElementIndex = 0; while (reader.hasNext()) { @@ -14622,7 +15578,11 @@ private DocumentManifest parseDocumentManifest(java.lang.String elementName, XML builder.related(parseDocumentManifestRelated("related", reader, relatedElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -14639,6 +15599,7 @@ private DocumentManifest parseDocumentManifest(java.lang.String elementName, XML private DocumentManifest.Related parseDocumentManifestRelated(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DocumentManifest.Related.Builder builder = DocumentManifest.Related.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -14669,7 +15630,11 @@ private DocumentManifest.Related parseDocumentManifestRelated(java.lang.String e builder.ref(parseReference("ref", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -14686,6 +15651,7 @@ private DocumentManifest.Related parseDocumentManifestRelated(java.lang.String e private DocumentReference parseDocumentReference(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DocumentReference.Builder builder = DocumentReference.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, categoryElementIndex = 0, authorElementIndex = 0, relatesToElementIndex = 0, securityLabelElementIndex = 0, contentElementIndex = 0; while (reader.hasNext()) { @@ -14792,7 +15758,11 @@ private DocumentReference parseDocumentReference(java.lang.String elementName, X builder.context(parseDocumentReferenceContext("context", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -14809,6 +15779,7 @@ private DocumentReference parseDocumentReference(java.lang.String elementName, X private DocumentReference.Content parseDocumentReferenceContent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DocumentReference.Content.Builder builder = DocumentReference.Content.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -14839,7 +15810,11 @@ private DocumentReference.Content parseDocumentReferenceContent(java.lang.String builder.format(parseCoding("format", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -14856,6 +15831,7 @@ private DocumentReference.Content parseDocumentReferenceContent(java.lang.String private DocumentReference.Context parseDocumentReferenceContext(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DocumentReference.Context.Builder builder = DocumentReference.Context.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -14906,7 +15882,11 @@ private DocumentReference.Context parseDocumentReferenceContext(java.lang.String builder.related(parseReference("related", reader, relatedElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -14923,6 +15903,7 @@ private DocumentReference.Context parseDocumentReferenceContext(java.lang.String private DocumentReference.RelatesTo parseDocumentReferenceRelatesTo(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); DocumentReference.RelatesTo.Builder builder = DocumentReference.RelatesTo.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -14953,7 +15934,11 @@ private DocumentReference.RelatesTo parseDocumentReferenceRelatesTo(java.lang.St builder.target(parseReference("target", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -14970,6 +15955,7 @@ private DocumentReference.RelatesTo parseDocumentReferenceRelatesTo(java.lang.St private Dosage parseDosage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Dosage.Builder builder = Dosage.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -15048,7 +16034,11 @@ private Dosage parseDosage(java.lang.String elementName, XMLStreamReader reader, builder.maxDosePerLifetime((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "maxDosePerLifetime", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -15065,6 +16055,7 @@ private Dosage parseDosage(java.lang.String elementName, XMLStreamReader reader, private Dosage.DoseAndRate parseDosageDoseAndRate(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Dosage.DoseAndRate.Builder builder = Dosage.DoseAndRate.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -15111,7 +16102,11 @@ private Dosage.DoseAndRate parseDosageDoseAndRate(java.lang.String elementName, builder.rate((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "rateQuantity", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -15128,6 +16123,7 @@ private Dosage.DoseAndRate parseDosageDoseAndRate(java.lang.String elementName, private EffectEvidenceSynthesis parseEffectEvidenceSynthesis(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EffectEvidenceSynthesis.Builder builder = EffectEvidenceSynthesis.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, noteElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, topicElementIndex = 0, authorElementIndex = 0, editorElementIndex = 0, reviewerElementIndex = 0, endorserElementIndex = 0, relatedArtifactElementIndex = 0, resultsByExposureElementIndex = 0, effectEstimateElementIndex = 0, certaintyElementIndex = 0; while (reader.hasNext()) { @@ -15302,7 +16298,11 @@ private EffectEvidenceSynthesis parseEffectEvidenceSynthesis(java.lang.String el builder.certainty(parseEffectEvidenceSynthesisCertainty("certainty", reader, certaintyElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -15319,6 +16319,7 @@ private EffectEvidenceSynthesis parseEffectEvidenceSynthesis(java.lang.String el private EffectEvidenceSynthesis.Certainty parseEffectEvidenceSynthesisCertainty(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EffectEvidenceSynthesis.Certainty.Builder builder = EffectEvidenceSynthesis.Certainty.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -15353,7 +16354,11 @@ private EffectEvidenceSynthesis.Certainty parseEffectEvidenceSynthesisCertainty( builder.certaintySubcomponent(parseEffectEvidenceSynthesisCertaintyCertaintySubcomponent("certaintySubcomponent", reader, certaintySubcomponentElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -15370,6 +16375,7 @@ private EffectEvidenceSynthesis.Certainty parseEffectEvidenceSynthesisCertainty( private EffectEvidenceSynthesis.Certainty.CertaintySubcomponent parseEffectEvidenceSynthesisCertaintyCertaintySubcomponent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EffectEvidenceSynthesis.Certainty.CertaintySubcomponent.Builder builder = EffectEvidenceSynthesis.Certainty.CertaintySubcomponent.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -15404,7 +16410,11 @@ private EffectEvidenceSynthesis.Certainty.CertaintySubcomponent parseEffectEvide builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -15421,6 +16431,7 @@ private EffectEvidenceSynthesis.Certainty.CertaintySubcomponent parseEffectEvide private EffectEvidenceSynthesis.EffectEstimate parseEffectEvidenceSynthesisEffectEstimate(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EffectEvidenceSynthesis.EffectEstimate.Builder builder = EffectEvidenceSynthesis.EffectEstimate.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -15467,7 +16478,11 @@ private EffectEvidenceSynthesis.EffectEstimate parseEffectEvidenceSynthesisEffec builder.precisionEstimate(parseEffectEvidenceSynthesisEffectEstimatePrecisionEstimate("precisionEstimate", reader, precisionEstimateElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -15484,6 +16499,7 @@ private EffectEvidenceSynthesis.EffectEstimate parseEffectEvidenceSynthesisEffec private EffectEvidenceSynthesis.EffectEstimate.PrecisionEstimate parseEffectEvidenceSynthesisEffectEstimatePrecisionEstimate(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EffectEvidenceSynthesis.EffectEstimate.PrecisionEstimate.Builder builder = EffectEvidenceSynthesis.EffectEstimate.PrecisionEstimate.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -15522,7 +16538,11 @@ private EffectEvidenceSynthesis.EffectEstimate.PrecisionEstimate parseEffectEvid builder.to(parseDecimal("to", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -15539,6 +16559,7 @@ private EffectEvidenceSynthesis.EffectEstimate.PrecisionEstimate parseEffectEvid private EffectEvidenceSynthesis.ResultsByExposure parseEffectEvidenceSynthesisResultsByExposure(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EffectEvidenceSynthesis.ResultsByExposure.Builder builder = EffectEvidenceSynthesis.ResultsByExposure.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -15577,7 +16598,11 @@ private EffectEvidenceSynthesis.ResultsByExposure parseEffectEvidenceSynthesisRe builder.riskEvidenceSynthesis(parseReference("riskEvidenceSynthesis", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -15594,6 +16619,7 @@ private EffectEvidenceSynthesis.ResultsByExposure parseEffectEvidenceSynthesisRe private EffectEvidenceSynthesis.SampleSize parseEffectEvidenceSynthesisSampleSize(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EffectEvidenceSynthesis.SampleSize.Builder builder = EffectEvidenceSynthesis.SampleSize.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -15628,7 +16654,11 @@ private EffectEvidenceSynthesis.SampleSize parseEffectEvidenceSynthesisSampleSiz builder.numberOfParticipants(parseInteger("numberOfParticipants", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -15645,6 +16675,7 @@ private EffectEvidenceSynthesis.SampleSize parseEffectEvidenceSynthesisSampleSiz private ElementDefinition parseElementDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ElementDefinition.Builder builder = ElementDefinition.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -16455,7 +17486,11 @@ private ElementDefinition parseElementDefinition(java.lang.String elementName, X builder.mapping(parseElementDefinitionMapping("mapping", reader, mappingElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -16472,6 +17507,7 @@ private ElementDefinition parseElementDefinition(java.lang.String elementName, X private ElementDefinition.Base parseElementDefinitionBase(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ElementDefinition.Base.Builder builder = ElementDefinition.Base.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -16506,7 +17542,11 @@ private ElementDefinition.Base parseElementDefinitionBase(java.lang.String eleme builder.max(parseString("max", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -16523,6 +17563,7 @@ private ElementDefinition.Base parseElementDefinitionBase(java.lang.String eleme private ElementDefinition.Binding parseElementDefinitionBinding(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ElementDefinition.Binding.Builder builder = ElementDefinition.Binding.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -16557,7 +17598,11 @@ private ElementDefinition.Binding parseElementDefinitionBinding(java.lang.String builder.valueSet((Canonical) parseUri(Canonical.builder(), "valueSet", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -16574,6 +17619,7 @@ private ElementDefinition.Binding parseElementDefinitionBinding(java.lang.String private ElementDefinition.Constraint parseElementDefinitionConstraint(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ElementDefinition.Constraint.Builder builder = ElementDefinition.Constraint.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -16624,7 +17670,11 @@ private ElementDefinition.Constraint parseElementDefinitionConstraint(java.lang. builder.source((Canonical) parseUri(Canonical.builder(), "source", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -16641,6 +17691,7 @@ private ElementDefinition.Constraint parseElementDefinitionConstraint(java.lang. private ElementDefinition.Example parseElementDefinitionExample(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ElementDefinition.Example.Builder builder = ElementDefinition.Example.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -16867,7 +17918,11 @@ private ElementDefinition.Example parseElementDefinitionExample(java.lang.String builder.value(parseMeta("valueMeta", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -16884,6 +17939,7 @@ private ElementDefinition.Example parseElementDefinitionExample(java.lang.String private ElementDefinition.Mapping parseElementDefinitionMapping(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ElementDefinition.Mapping.Builder builder = ElementDefinition.Mapping.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -16922,7 +17978,11 @@ private ElementDefinition.Mapping parseElementDefinitionMapping(java.lang.String builder.comment(parseString("comment", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -16939,6 +17999,7 @@ private ElementDefinition.Mapping parseElementDefinitionMapping(java.lang.String private ElementDefinition.Slicing parseElementDefinitionSlicing(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ElementDefinition.Slicing.Builder builder = ElementDefinition.Slicing.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -16977,7 +18038,11 @@ private ElementDefinition.Slicing parseElementDefinitionSlicing(java.lang.String builder.rules((SlicingRules) parseString(SlicingRules.builder(), "rules", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -16994,6 +18059,7 @@ private ElementDefinition.Slicing parseElementDefinitionSlicing(java.lang.String private ElementDefinition.Slicing.Discriminator parseElementDefinitionSlicingDiscriminator(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ElementDefinition.Slicing.Discriminator.Builder builder = ElementDefinition.Slicing.Discriminator.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -17024,7 +18090,11 @@ private ElementDefinition.Slicing.Discriminator parseElementDefinitionSlicingDis builder.path(parseString("path", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -17041,6 +18111,7 @@ private ElementDefinition.Slicing.Discriminator parseElementDefinitionSlicingDis private ElementDefinition.Type parseElementDefinitionType(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ElementDefinition.Type.Builder builder = ElementDefinition.Type.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -17083,7 +18154,11 @@ private ElementDefinition.Type parseElementDefinitionType(java.lang.String eleme builder.versioning((ReferenceVersionRules) parseString(ReferenceVersionRules.builder(), "versioning", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -17100,6 +18175,7 @@ private ElementDefinition.Type parseElementDefinitionType(java.lang.String eleme private Encounter parseEncounter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Encounter.Builder builder = Encounter.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, statusHistoryElementIndex = 0, classHistoryElementIndex = 0, typeElementIndex = 0, episodeOfCareElementIndex = 0, basedOnElementIndex = 0, participantElementIndex = 0, appointmentElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, diagnosisElementIndex = 0, accountElementIndex = 0, locationElementIndex = 0; while (reader.hasNext()) { @@ -17234,7 +18310,11 @@ private Encounter parseEncounter(java.lang.String elementName, XMLStreamReader r builder.partOf(parseReference("partOf", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -17251,6 +18331,7 @@ private Encounter parseEncounter(java.lang.String elementName, XMLStreamReader r private Encounter.ClassHistory parseEncounterClassHistory(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Encounter.ClassHistory.Builder builder = Encounter.ClassHistory.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -17281,7 +18362,11 @@ private Encounter.ClassHistory parseEncounterClassHistory(java.lang.String eleme builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -17298,6 +18383,7 @@ private Encounter.ClassHistory parseEncounterClassHistory(java.lang.String eleme private Encounter.Diagnosis parseEncounterDiagnosis(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Encounter.Diagnosis.Builder builder = Encounter.Diagnosis.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -17332,7 +18418,11 @@ private Encounter.Diagnosis parseEncounterDiagnosis(java.lang.String elementName builder.rank((PositiveInt) parseInteger(PositiveInt.builder(), "rank", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -17349,6 +18439,7 @@ private Encounter.Diagnosis parseEncounterDiagnosis(java.lang.String elementName private Encounter.Hospitalization parseEncounterHospitalization(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Encounter.Hospitalization.Builder builder = Encounter.Hospitalization.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -17407,7 +18498,11 @@ private Encounter.Hospitalization parseEncounterHospitalization(java.lang.String builder.dischargeDisposition(parseCodeableConcept("dischargeDisposition", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -17424,6 +18519,7 @@ private Encounter.Hospitalization parseEncounterHospitalization(java.lang.String private Encounter.Location parseEncounterLocation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Encounter.Location.Builder builder = Encounter.Location.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -17462,7 +18558,11 @@ private Encounter.Location parseEncounterLocation(java.lang.String elementName, builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -17479,6 +18579,7 @@ private Encounter.Location parseEncounterLocation(java.lang.String elementName, private Encounter.Participant parseEncounterParticipant(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Encounter.Participant.Builder builder = Encounter.Participant.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -17513,7 +18614,11 @@ private Encounter.Participant parseEncounterParticipant(java.lang.String element builder.individual(parseReference("individual", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -17530,6 +18635,7 @@ private Encounter.Participant parseEncounterParticipant(java.lang.String element private Encounter.StatusHistory parseEncounterStatusHistory(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Encounter.StatusHistory.Builder builder = Encounter.StatusHistory.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -17560,7 +18666,11 @@ private Encounter.StatusHistory parseEncounterStatusHistory(java.lang.String ele builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -17577,6 +18687,7 @@ private Encounter.StatusHistory parseEncounterStatusHistory(java.lang.String ele private Endpoint parseEndpoint(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Endpoint.Builder builder = Endpoint.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, payloadTypeElementIndex = 0, payloadMimeTypeElementIndex = 0, headerElementIndex = 0; while (reader.hasNext()) { @@ -17663,7 +18774,11 @@ private Endpoint parseEndpoint(java.lang.String elementName, XMLStreamReader rea builder.header(parseString("header", reader, headerElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -17680,6 +18795,7 @@ private Endpoint parseEndpoint(java.lang.String elementName, XMLStreamReader rea private EnrollmentRequest parseEnrollmentRequest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EnrollmentRequest.Builder builder = EnrollmentRequest.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0; while (reader.hasNext()) { @@ -17750,7 +18866,11 @@ private EnrollmentRequest parseEnrollmentRequest(java.lang.String elementName, X builder.coverage(parseReference("coverage", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -17767,6 +18887,7 @@ private EnrollmentRequest parseEnrollmentRequest(java.lang.String elementName, X private EnrollmentResponse parseEnrollmentResponse(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EnrollmentResponse.Builder builder = EnrollmentResponse.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0; while (reader.hasNext()) { @@ -17841,7 +18962,11 @@ private EnrollmentResponse parseEnrollmentResponse(java.lang.String elementName, builder.requestProvider(parseReference("requestProvider", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -17858,6 +18983,7 @@ private EnrollmentResponse parseEnrollmentResponse(java.lang.String elementName, private EpisodeOfCare parseEpisodeOfCare(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EpisodeOfCare.Builder builder = EpisodeOfCare.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, statusHistoryElementIndex = 0, typeElementIndex = 0, diagnosisElementIndex = 0, referralRequestElementIndex = 0, teamElementIndex = 0, accountElementIndex = 0; while (reader.hasNext()) { @@ -17948,7 +19074,11 @@ private EpisodeOfCare parseEpisodeOfCare(java.lang.String elementName, XMLStream builder.account(parseReference("account", reader, accountElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -17965,6 +19095,7 @@ private EpisodeOfCare parseEpisodeOfCare(java.lang.String elementName, XMLStream private EpisodeOfCare.Diagnosis parseEpisodeOfCareDiagnosis(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EpisodeOfCare.Diagnosis.Builder builder = EpisodeOfCare.Diagnosis.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -17999,7 +19130,11 @@ private EpisodeOfCare.Diagnosis parseEpisodeOfCareDiagnosis(java.lang.String ele builder.rank((PositiveInt) parseInteger(PositiveInt.builder(), "rank", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -18016,6 +19151,7 @@ private EpisodeOfCare.Diagnosis parseEpisodeOfCareDiagnosis(java.lang.String ele private EpisodeOfCare.StatusHistory parseEpisodeOfCareStatusHistory(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EpisodeOfCare.StatusHistory.Builder builder = EpisodeOfCare.StatusHistory.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -18046,7 +19182,11 @@ private EpisodeOfCare.StatusHistory parseEpisodeOfCareStatusHistory(java.lang.St builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -18063,6 +19203,7 @@ private EpisodeOfCare.StatusHistory parseEpisodeOfCareStatusHistory(java.lang.St private EventDefinition parseEventDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EventDefinition.Builder builder = EventDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, topicElementIndex = 0, authorElementIndex = 0, editorElementIndex = 0, reviewerElementIndex = 0, endorserElementIndex = 0, relatedArtifactElementIndex = 0, triggerElementIndex = 0; while (reader.hasNext()) { @@ -18221,7 +19362,11 @@ private EventDefinition parseEventDefinition(java.lang.String elementName, XMLSt builder.trigger(parseTriggerDefinition("trigger", reader, triggerElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -18238,6 +19383,7 @@ private EventDefinition parseEventDefinition(java.lang.String elementName, XMLSt private Evidence parseEvidence(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Evidence.Builder builder = Evidence.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, noteElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, topicElementIndex = 0, authorElementIndex = 0, editorElementIndex = 0, reviewerElementIndex = 0, endorserElementIndex = 0, relatedArtifactElementIndex = 0, exposureVariantElementIndex = 0, outcomeElementIndex = 0; while (reader.hasNext()) { @@ -18392,7 +19538,11 @@ private Evidence parseEvidence(java.lang.String elementName, XMLStreamReader rea builder.outcome(parseReference("outcome", reader, outcomeElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -18409,6 +19559,7 @@ private Evidence parseEvidence(java.lang.String elementName, XMLStreamReader rea private EvidenceVariable parseEvidenceVariable(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EvidenceVariable.Builder builder = EvidenceVariable.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, noteElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, topicElementIndex = 0, authorElementIndex = 0, editorElementIndex = 0, reviewerElementIndex = 0, endorserElementIndex = 0, relatedArtifactElementIndex = 0, characteristicElementIndex = 0; while (reader.hasNext()) { @@ -18559,7 +19710,11 @@ private EvidenceVariable parseEvidenceVariable(java.lang.String elementName, XML builder.characteristic(parseEvidenceVariableCharacteristic("characteristic", reader, characteristicElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -18576,6 +19731,7 @@ private EvidenceVariable parseEvidenceVariable(java.lang.String elementName, XML private EvidenceVariable.Characteristic parseEvidenceVariableCharacteristic(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); EvidenceVariable.Characteristic.Builder builder = EvidenceVariable.Characteristic.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -18658,7 +19814,11 @@ private EvidenceVariable.Characteristic parseEvidenceVariableCharacteristic(java builder.groupMeasure((GroupMeasure) parseString(GroupMeasure.builder(), "groupMeasure", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -18675,6 +19835,7 @@ private EvidenceVariable.Characteristic parseEvidenceVariableCharacteristic(java private ExampleScenario parseExampleScenario(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExampleScenario.Builder builder = ExampleScenario.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, actorElementIndex = 0, instanceElementIndex = 0, processElementIndex = 0, workflowElementIndex = 0; while (reader.hasNext()) { @@ -18785,7 +19946,11 @@ private ExampleScenario parseExampleScenario(java.lang.String elementName, XMLSt builder.workflow((Canonical) parseUri(Canonical.builder(), "workflow", reader, workflowElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -18802,6 +19967,7 @@ private ExampleScenario parseExampleScenario(java.lang.String elementName, XMLSt private ExampleScenario.Actor parseExampleScenarioActor(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExampleScenario.Actor.Builder builder = ExampleScenario.Actor.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -18840,7 +20006,11 @@ private ExampleScenario.Actor parseExampleScenarioActor(java.lang.String element builder.description((Markdown) parseString(Markdown.builder(), "description", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -18857,6 +20027,7 @@ private ExampleScenario.Actor parseExampleScenarioActor(java.lang.String element private ExampleScenario.Instance parseExampleScenarioInstance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExampleScenario.Instance.Builder builder = ExampleScenario.Instance.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -18903,7 +20074,11 @@ private ExampleScenario.Instance parseExampleScenarioInstance(java.lang.String e builder.containedInstance(parseExampleScenarioInstanceContainedInstance("containedInstance", reader, containedInstanceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -18920,6 +20095,7 @@ private ExampleScenario.Instance parseExampleScenarioInstance(java.lang.String e private ExampleScenario.Instance.ContainedInstance parseExampleScenarioInstanceContainedInstance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExampleScenario.Instance.ContainedInstance.Builder builder = ExampleScenario.Instance.ContainedInstance.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -18950,7 +20126,11 @@ private ExampleScenario.Instance.ContainedInstance parseExampleScenarioInstanceC builder.versionId(parseString("versionId", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -18967,6 +20147,7 @@ private ExampleScenario.Instance.ContainedInstance parseExampleScenarioInstanceC private ExampleScenario.Instance.Version parseExampleScenarioInstanceVersion(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExampleScenario.Instance.Version.Builder builder = ExampleScenario.Instance.Version.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -18997,7 +20178,11 @@ private ExampleScenario.Instance.Version parseExampleScenarioInstanceVersion(jav builder.description((Markdown) parseString(Markdown.builder(), "description", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -19014,6 +20199,7 @@ private ExampleScenario.Instance.Version parseExampleScenarioInstanceVersion(jav private ExampleScenario.Process parseExampleScenarioProcess(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExampleScenario.Process.Builder builder = ExampleScenario.Process.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -19056,7 +20242,11 @@ private ExampleScenario.Process parseExampleScenarioProcess(java.lang.String ele builder.step(parseExampleScenarioProcessStep("step", reader, stepElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -19073,6 +20263,7 @@ private ExampleScenario.Process parseExampleScenarioProcess(java.lang.String ele private ExampleScenario.Process.Step parseExampleScenarioProcessStep(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExampleScenario.Process.Step.Builder builder = ExampleScenario.Process.Step.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -19111,7 +20302,11 @@ private ExampleScenario.Process.Step parseExampleScenarioProcessStep(java.lang.S builder.alternative(parseExampleScenarioProcessStepAlternative("alternative", reader, alternativeElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -19128,6 +20323,7 @@ private ExampleScenario.Process.Step parseExampleScenarioProcessStep(java.lang.S private ExampleScenario.Process.Step.Alternative parseExampleScenarioProcessStepAlternative(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExampleScenario.Process.Step.Alternative.Builder builder = ExampleScenario.Process.Step.Alternative.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -19162,7 +20358,11 @@ private ExampleScenario.Process.Step.Alternative parseExampleScenarioProcessStep builder.step(parseExampleScenarioProcessStep("step", reader, stepElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -19179,6 +20379,7 @@ private ExampleScenario.Process.Step.Alternative parseExampleScenarioProcessStep private ExampleScenario.Process.Step.Operation parseExampleScenarioProcessStepOperation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExampleScenario.Process.Step.Operation.Builder builder = ExampleScenario.Process.Step.Operation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -19241,7 +20442,11 @@ private ExampleScenario.Process.Step.Operation parseExampleScenarioProcessStepOp builder.response(parseExampleScenarioInstanceContainedInstance("response", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -19258,6 +20463,7 @@ private ExampleScenario.Process.Step.Operation parseExampleScenarioProcessStepOp private ExplanationOfBenefit parseExplanationOfBenefit(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.Builder builder = ExplanationOfBenefit.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, relatedElementIndex = 0, preAuthRefElementIndex = 0, preAuthRefPeriodElementIndex = 0, careTeamElementIndex = 0, supportingInfoElementIndex = 0, diagnosisElementIndex = 0, procedureElementIndex = 0, insuranceElementIndex = 0, itemElementIndex = 0, addItemElementIndex = 0, adjudicationElementIndex = 0, totalElementIndex = 0, processNoteElementIndex = 0, benefitBalanceElementIndex = 0; while (reader.hasNext()) { @@ -19472,7 +20678,11 @@ private ExplanationOfBenefit parseExplanationOfBenefit(java.lang.String elementN builder.benefitBalance(parseExplanationOfBenefitBenefitBalance("benefitBalance", reader, benefitBalanceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -19489,6 +20699,7 @@ private ExplanationOfBenefit parseExplanationOfBenefit(java.lang.String elementN private ExplanationOfBenefit.Accident parseExplanationOfBenefitAccident(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.Accident.Builder builder = ExplanationOfBenefit.Accident.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -19527,7 +20738,11 @@ private ExplanationOfBenefit.Accident parseExplanationOfBenefitAccident(java.lan builder.location(parseReference("locationReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -19544,6 +20759,7 @@ private ExplanationOfBenefit.Accident parseExplanationOfBenefitAccident(java.lan private ExplanationOfBenefit.AddItem parseExplanationOfBenefitAddItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.AddItem.Builder builder = ExplanationOfBenefit.AddItem.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -19650,7 +20866,11 @@ private ExplanationOfBenefit.AddItem parseExplanationOfBenefitAddItem(java.lang. builder.detail(parseExplanationOfBenefitAddItemDetail("detail", reader, detailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -19667,6 +20887,7 @@ private ExplanationOfBenefit.AddItem parseExplanationOfBenefitAddItem(java.lang. private ExplanationOfBenefit.AddItem.Detail parseExplanationOfBenefitAddItemDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.AddItem.Detail.Builder builder = ExplanationOfBenefit.AddItem.Detail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -19725,7 +20946,11 @@ private ExplanationOfBenefit.AddItem.Detail parseExplanationOfBenefitAddItemDeta builder.subDetail(parseExplanationOfBenefitAddItemDetailSubDetail("subDetail", reader, subDetailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -19742,6 +20967,7 @@ private ExplanationOfBenefit.AddItem.Detail parseExplanationOfBenefitAddItemDeta private ExplanationOfBenefit.AddItem.Detail.SubDetail parseExplanationOfBenefitAddItemDetailSubDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.AddItem.Detail.SubDetail.Builder builder = ExplanationOfBenefit.AddItem.Detail.SubDetail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -19796,7 +21022,11 @@ private ExplanationOfBenefit.AddItem.Detail.SubDetail parseExplanationOfBenefitA builder.adjudication(parseExplanationOfBenefitItemAdjudication("adjudication", reader, adjudicationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -19813,6 +21043,7 @@ private ExplanationOfBenefit.AddItem.Detail.SubDetail parseExplanationOfBenefitA private ExplanationOfBenefit.BenefitBalance parseExplanationOfBenefitBenefitBalance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.BenefitBalance.Builder builder = ExplanationOfBenefit.BenefitBalance.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -19867,7 +21098,11 @@ private ExplanationOfBenefit.BenefitBalance parseExplanationOfBenefitBenefitBala builder.financial(parseExplanationOfBenefitBenefitBalanceFinancial("financial", reader, financialElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -19884,6 +21119,7 @@ private ExplanationOfBenefit.BenefitBalance parseExplanationOfBenefitBenefitBala private ExplanationOfBenefit.BenefitBalance.Financial parseExplanationOfBenefitBenefitBalanceFinancial(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.BenefitBalance.Financial.Builder builder = ExplanationOfBenefit.BenefitBalance.Financial.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -19930,7 +21166,11 @@ private ExplanationOfBenefit.BenefitBalance.Financial parseExplanationOfBenefitB builder.used(parseMoney("usedMoney", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -19947,6 +21187,7 @@ private ExplanationOfBenefit.BenefitBalance.Financial parseExplanationOfBenefitB private ExplanationOfBenefit.CareTeam parseExplanationOfBenefitCareTeam(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.CareTeam.Builder builder = ExplanationOfBenefit.CareTeam.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -19989,7 +21230,11 @@ private ExplanationOfBenefit.CareTeam parseExplanationOfBenefitCareTeam(java.lan builder.qualification(parseCodeableConcept("qualification", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20006,6 +21251,7 @@ private ExplanationOfBenefit.CareTeam parseExplanationOfBenefitCareTeam(java.lan private ExplanationOfBenefit.Diagnosis parseExplanationOfBenefitDiagnosis(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.Diagnosis.Builder builder = ExplanationOfBenefit.Diagnosis.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20052,7 +21298,11 @@ private ExplanationOfBenefit.Diagnosis parseExplanationOfBenefitDiagnosis(java.l builder.packageCode(parseCodeableConcept("packageCode", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20069,6 +21319,7 @@ private ExplanationOfBenefit.Diagnosis parseExplanationOfBenefitDiagnosis(java.l private ExplanationOfBenefit.Insurance parseExplanationOfBenefitInsurance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.Insurance.Builder builder = ExplanationOfBenefit.Insurance.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20103,7 +21354,11 @@ private ExplanationOfBenefit.Insurance parseExplanationOfBenefitInsurance(java.l builder.preAuthRef(parseString("preAuthRef", reader, preAuthRefElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20120,6 +21375,7 @@ private ExplanationOfBenefit.Insurance parseExplanationOfBenefitInsurance(java.l private ExplanationOfBenefit.Item parseExplanationOfBenefitItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.Item.Builder builder = ExplanationOfBenefit.Item.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20246,7 +21502,11 @@ private ExplanationOfBenefit.Item parseExplanationOfBenefitItem(java.lang.String builder.detail(parseExplanationOfBenefitItemDetail("detail", reader, detailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20263,6 +21523,7 @@ private ExplanationOfBenefit.Item parseExplanationOfBenefitItem(java.lang.String private ExplanationOfBenefit.Item.Adjudication parseExplanationOfBenefitItemAdjudication(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.Item.Adjudication.Builder builder = ExplanationOfBenefit.Item.Adjudication.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20301,7 +21562,11 @@ private ExplanationOfBenefit.Item.Adjudication parseExplanationOfBenefitItemAdju builder.value(parseDecimal("value", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20318,6 +21583,7 @@ private ExplanationOfBenefit.Item.Adjudication parseExplanationOfBenefitItemAdju private ExplanationOfBenefit.Item.Detail parseExplanationOfBenefitItemDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.Item.Detail.Builder builder = ExplanationOfBenefit.Item.Detail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20396,7 +21662,11 @@ private ExplanationOfBenefit.Item.Detail parseExplanationOfBenefitItemDetail(jav builder.subDetail(parseExplanationOfBenefitItemDetailSubDetail("subDetail", reader, subDetailElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20413,6 +21683,7 @@ private ExplanationOfBenefit.Item.Detail parseExplanationOfBenefitItemDetail(jav private ExplanationOfBenefit.Item.Detail.SubDetail parseExplanationOfBenefitItemDetailSubDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.Item.Detail.SubDetail.Builder builder = ExplanationOfBenefit.Item.Detail.SubDetail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20487,7 +21758,11 @@ private ExplanationOfBenefit.Item.Detail.SubDetail parseExplanationOfBenefitItem builder.adjudication(parseExplanationOfBenefitItemAdjudication("adjudication", reader, adjudicationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20504,6 +21779,7 @@ private ExplanationOfBenefit.Item.Detail.SubDetail parseExplanationOfBenefitItem private ExplanationOfBenefit.Payee parseExplanationOfBenefitPayee(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.Payee.Builder builder = ExplanationOfBenefit.Payee.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20534,7 +21810,11 @@ private ExplanationOfBenefit.Payee parseExplanationOfBenefitPayee(java.lang.Stri builder.party(parseReference("party", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20551,6 +21831,7 @@ private ExplanationOfBenefit.Payee parseExplanationOfBenefitPayee(java.lang.Stri private ExplanationOfBenefit.Payment parseExplanationOfBenefitPayment(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.Payment.Builder builder = ExplanationOfBenefit.Payment.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20597,7 +21878,11 @@ private ExplanationOfBenefit.Payment parseExplanationOfBenefitPayment(java.lang. builder.identifier(parseIdentifier("identifier", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20614,6 +21899,7 @@ private ExplanationOfBenefit.Payment parseExplanationOfBenefitPayment(java.lang. private ExplanationOfBenefit.Procedure parseExplanationOfBenefitProcedure(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.Procedure.Builder builder = ExplanationOfBenefit.Procedure.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20660,7 +21946,11 @@ private ExplanationOfBenefit.Procedure parseExplanationOfBenefitProcedure(java.l builder.udi(parseReference("udi", reader, udiElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20677,6 +21967,7 @@ private ExplanationOfBenefit.Procedure parseExplanationOfBenefitProcedure(java.l private ExplanationOfBenefit.ProcessNote parseExplanationOfBenefitProcessNote(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.ProcessNote.Builder builder = ExplanationOfBenefit.ProcessNote.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20715,7 +22006,11 @@ private ExplanationOfBenefit.ProcessNote parseExplanationOfBenefitProcessNote(ja builder.language(parseCodeableConcept("language", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20732,6 +22027,7 @@ private ExplanationOfBenefit.ProcessNote parseExplanationOfBenefitProcessNote(ja private ExplanationOfBenefit.Related parseExplanationOfBenefitRelated(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.Related.Builder builder = ExplanationOfBenefit.Related.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20766,7 +22062,11 @@ private ExplanationOfBenefit.Related parseExplanationOfBenefitRelated(java.lang. builder.reference(parseIdentifier("reference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20783,6 +22083,7 @@ private ExplanationOfBenefit.Related parseExplanationOfBenefitRelated(java.lang. private ExplanationOfBenefit.SupportingInfo parseExplanationOfBenefitSupportingInfo(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.SupportingInfo.Builder builder = ExplanationOfBenefit.SupportingInfo.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20849,7 +22150,11 @@ private ExplanationOfBenefit.SupportingInfo parseExplanationOfBenefitSupportingI builder.reason(parseCoding("reason", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20866,6 +22171,7 @@ private ExplanationOfBenefit.SupportingInfo parseExplanationOfBenefitSupportingI private ExplanationOfBenefit.Total parseExplanationOfBenefitTotal(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ExplanationOfBenefit.Total.Builder builder = ExplanationOfBenefit.Total.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20896,7 +22202,11 @@ private ExplanationOfBenefit.Total parseExplanationOfBenefitTotal(java.lang.Stri builder.amount(parseMoney("amount", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20913,6 +22223,7 @@ private ExplanationOfBenefit.Total parseExplanationOfBenefitTotal(java.lang.Stri private Expression parseExpression(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Expression.Builder builder = Expression.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -20951,7 +22262,11 @@ private Expression parseExpression(java.lang.String elementName, XMLStreamReader builder.reference(parseUri("reference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -20968,6 +22283,7 @@ private Expression parseExpression(java.lang.String elementName, XMLStreamReader private Extension parseExtension(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Extension.Builder builder = Extension.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -21190,7 +22506,11 @@ private Extension parseExtension(java.lang.String elementName, XMLStreamReader r builder.value(parseMeta("valueMeta", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -21207,6 +22527,7 @@ private Extension parseExtension(java.lang.String elementName, XMLStreamReader r private FamilyMemberHistory parseFamilyMemberHistory(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); FamilyMemberHistory.Builder builder = FamilyMemberHistory.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, instantiatesCanonicalElementIndex = 0, instantiatesUriElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, noteElementIndex = 0, conditionElementIndex = 0; while (reader.hasNext()) { @@ -21353,7 +22674,11 @@ private FamilyMemberHistory parseFamilyMemberHistory(java.lang.String elementNam builder.condition(parseFamilyMemberHistoryCondition("condition", reader, conditionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -21370,6 +22695,7 @@ private FamilyMemberHistory parseFamilyMemberHistory(java.lang.String elementNam private FamilyMemberHistory.Condition parseFamilyMemberHistoryCondition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); FamilyMemberHistory.Condition.Builder builder = FamilyMemberHistory.Condition.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -21424,7 +22750,11 @@ private FamilyMemberHistory.Condition parseFamilyMemberHistoryCondition(java.lan builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -21441,6 +22771,7 @@ private FamilyMemberHistory.Condition parseFamilyMemberHistoryCondition(java.lan private Flag parseFlag(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Flag.Builder builder = Flag.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, categoryElementIndex = 0; while (reader.hasNext()) { @@ -21515,7 +22846,11 @@ private Flag parseFlag(java.lang.String elementName, XMLStreamReader reader, int builder.author(parseReference("author", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -21532,6 +22867,7 @@ private Flag parseFlag(java.lang.String elementName, XMLStreamReader reader, int private Goal parseGoal(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Goal.Builder builder = Goal.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, categoryElementIndex = 0, targetElementIndex = 0, addressesElementIndex = 0, noteElementIndex = 0, outcomeCodeElementIndex = 0, outcomeReferenceElementIndex = 0; while (reader.hasNext()) { @@ -21642,7 +22978,11 @@ private Goal parseGoal(java.lang.String elementName, XMLStreamReader reader, int builder.outcomeReference(parseReference("outcomeReference", reader, outcomeReferenceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -21659,6 +22999,7 @@ private Goal parseGoal(java.lang.String elementName, XMLStreamReader reader, int private Goal.Target parseGoalTarget(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Goal.Target.Builder builder = Goal.Target.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -21721,7 +23062,11 @@ private Goal.Target parseGoalTarget(java.lang.String elementName, XMLStreamReade builder.due((Duration) parseQuantity(Duration.builder(), "dueDuration", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -21738,6 +23083,7 @@ private Goal.Target parseGoalTarget(java.lang.String elementName, XMLStreamReade private GraphDefinition parseGraphDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); GraphDefinition.Builder builder = GraphDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, linkElementIndex = 0; while (reader.hasNext()) { @@ -21840,7 +23186,11 @@ private GraphDefinition parseGraphDefinition(java.lang.String elementName, XMLSt builder.link(parseGraphDefinitionLink("link", reader, linkElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -21857,6 +23207,7 @@ private GraphDefinition parseGraphDefinition(java.lang.String elementName, XMLSt private GraphDefinition.Link parseGraphDefinitionLink(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); GraphDefinition.Link.Builder builder = GraphDefinition.Link.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -21903,7 +23254,11 @@ private GraphDefinition.Link parseGraphDefinitionLink(java.lang.String elementNa builder.target(parseGraphDefinitionLinkTarget("target", reader, targetElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -21920,6 +23275,7 @@ private GraphDefinition.Link parseGraphDefinitionLink(java.lang.String elementNa private GraphDefinition.Link.Target parseGraphDefinitionLinkTarget(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); GraphDefinition.Link.Target.Builder builder = GraphDefinition.Link.Target.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -21962,7 +23318,11 @@ private GraphDefinition.Link.Target parseGraphDefinitionLinkTarget(java.lang.Str builder.link(parseGraphDefinitionLink("link", reader, linkElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -21979,6 +23339,7 @@ private GraphDefinition.Link.Target parseGraphDefinitionLinkTarget(java.lang.Str private GraphDefinition.Link.Target.Compartment parseGraphDefinitionLinkTargetCompartment(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); GraphDefinition.Link.Target.Compartment.Builder builder = GraphDefinition.Link.Target.Compartment.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -22021,7 +23382,11 @@ private GraphDefinition.Link.Target.Compartment parseGraphDefinitionLinkTargetCo builder.description(parseString("description", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -22038,6 +23403,7 @@ private GraphDefinition.Link.Target.Compartment parseGraphDefinitionLinkTargetCo private Group parseGroup(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Group.Builder builder = Group.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, characteristicElementIndex = 0, memberElementIndex = 0; while (reader.hasNext()) { @@ -22120,7 +23486,11 @@ private Group parseGroup(java.lang.String elementName, XMLStreamReader reader, i builder.member(parseGroupMember("member", reader, memberElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -22137,6 +23507,7 @@ private Group parseGroup(java.lang.String elementName, XMLStreamReader reader, i private Group.Characteristic parseGroupCharacteristic(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Group.Characteristic.Builder builder = Group.Characteristic.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -22191,7 +23562,11 @@ private Group.Characteristic parseGroupCharacteristic(java.lang.String elementNa builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -22208,6 +23583,7 @@ private Group.Characteristic parseGroupCharacteristic(java.lang.String elementNa private Group.Member parseGroupMember(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Group.Member.Builder builder = Group.Member.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -22242,7 +23618,11 @@ private Group.Member parseGroupMember(java.lang.String elementName, XMLStreamRea builder.inactive(parseBoolean("inactive", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -22259,6 +23639,7 @@ private Group.Member parseGroupMember(java.lang.String elementName, XMLStreamRea private GuidanceResponse parseGuidanceResponse(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); GuidanceResponse.Builder builder = GuidanceResponse.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, noteElementIndex = 0, evaluationMessageElementIndex = 0, dataRequirementElementIndex = 0; while (reader.hasNext()) { @@ -22369,7 +23750,11 @@ private GuidanceResponse parseGuidanceResponse(java.lang.String elementName, XML builder.dataRequirement(parseDataRequirement("dataRequirement", reader, dataRequirementElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -22386,6 +23771,7 @@ private GuidanceResponse parseGuidanceResponse(java.lang.String elementName, XML private HealthcareService parseHealthcareService(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); HealthcareService.Builder builder = HealthcareService.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, categoryElementIndex = 0, typeElementIndex = 0, specialtyElementIndex = 0, locationElementIndex = 0, telecomElementIndex = 0, coverageAreaElementIndex = 0, serviceProvisionCodeElementIndex = 0, eligibilityElementIndex = 0, programElementIndex = 0, characteristicElementIndex = 0, communicationElementIndex = 0, referralMethodElementIndex = 0, availableTimeElementIndex = 0, notAvailableElementIndex = 0, endpointElementIndex = 0; while (reader.hasNext()) { @@ -22524,7 +23910,11 @@ private HealthcareService parseHealthcareService(java.lang.String elementName, X builder.endpoint(parseReference("endpoint", reader, endpointElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -22541,6 +23931,7 @@ private HealthcareService parseHealthcareService(java.lang.String elementName, X private HealthcareService.AvailableTime parseHealthcareServiceAvailableTime(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); HealthcareService.AvailableTime.Builder builder = HealthcareService.AvailableTime.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -22579,7 +23970,11 @@ private HealthcareService.AvailableTime parseHealthcareServiceAvailableTime(java builder.availableEndTime(parseTime("availableEndTime", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -22596,6 +23991,7 @@ private HealthcareService.AvailableTime parseHealthcareServiceAvailableTime(java private HealthcareService.Eligibility parseHealthcareServiceEligibility(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); HealthcareService.Eligibility.Builder builder = HealthcareService.Eligibility.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -22626,7 +24022,11 @@ private HealthcareService.Eligibility parseHealthcareServiceEligibility(java.lan builder.comment((Markdown) parseString(Markdown.builder(), "comment", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -22643,6 +24043,7 @@ private HealthcareService.Eligibility parseHealthcareServiceEligibility(java.lan private HealthcareService.NotAvailable parseHealthcareServiceNotAvailable(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); HealthcareService.NotAvailable.Builder builder = HealthcareService.NotAvailable.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -22673,7 +24074,11 @@ private HealthcareService.NotAvailable parseHealthcareServiceNotAvailable(java.l builder.during(parsePeriod("during", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -22690,6 +24095,7 @@ private HealthcareService.NotAvailable parseHealthcareServiceNotAvailable(java.l private HumanName parseHumanName(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); HumanName.Builder builder = HumanName.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -22736,7 +24142,11 @@ private HumanName parseHumanName(java.lang.String elementName, XMLStreamReader r builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -22753,6 +24163,7 @@ private HumanName parseHumanName(java.lang.String elementName, XMLStreamReader r private Identifier parseIdentifier(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Identifier.Builder builder = Identifier.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -22795,7 +24206,11 @@ private Identifier parseIdentifier(java.lang.String elementName, XMLStreamReader builder.assigner(parseReference("assigner", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -22812,6 +24227,7 @@ private Identifier parseIdentifier(java.lang.String elementName, XMLStreamReader private ImagingStudy parseImagingStudy(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImagingStudy.Builder builder = ImagingStudy.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, modalityElementIndex = 0, basedOnElementIndex = 0, interpreterElementIndex = 0, endpointElementIndex = 0, procedureCodeElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, noteElementIndex = 0, seriesElementIndex = 0; while (reader.hasNext()) { @@ -22934,7 +24350,11 @@ private ImagingStudy parseImagingStudy(java.lang.String elementName, XMLStreamRe builder.series(parseImagingStudySeries("series", reader, seriesElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -22951,6 +24371,7 @@ private ImagingStudy parseImagingStudy(java.lang.String elementName, XMLStreamRe private ImagingStudy.Series parseImagingStudySeries(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImagingStudy.Series.Builder builder = ImagingStudy.Series.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -23021,7 +24442,11 @@ private ImagingStudy.Series parseImagingStudySeries(java.lang.String elementName builder.instance(parseImagingStudySeriesInstance("instance", reader, instanceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -23038,6 +24463,7 @@ private ImagingStudy.Series parseImagingStudySeries(java.lang.String elementName private ImagingStudy.Series.Instance parseImagingStudySeriesInstance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImagingStudy.Series.Instance.Builder builder = ImagingStudy.Series.Instance.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -23076,7 +24502,11 @@ private ImagingStudy.Series.Instance parseImagingStudySeriesInstance(java.lang.S builder.title(parseString("title", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -23093,6 +24523,7 @@ private ImagingStudy.Series.Instance parseImagingStudySeriesInstance(java.lang.S private ImagingStudy.Series.Performer parseImagingStudySeriesPerformer(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImagingStudy.Series.Performer.Builder builder = ImagingStudy.Series.Performer.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -23123,7 +24554,11 @@ private ImagingStudy.Series.Performer parseImagingStudySeriesPerformer(java.lang builder.actor(parseReference("actor", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -23140,6 +24575,7 @@ private ImagingStudy.Series.Performer parseImagingStudySeriesPerformer(java.lang private Immunization parseImmunization(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Immunization.Builder builder = Immunization.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, performerElementIndex = 0, noteElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, subpotentReasonElementIndex = 0, educationElementIndex = 0, programEligibilityElementIndex = 0, reactionElementIndex = 0, protocolAppliedElementIndex = 0; while (reader.hasNext()) { @@ -23298,7 +24734,11 @@ private Immunization parseImmunization(java.lang.String elementName, XMLStreamRe builder.protocolApplied(parseImmunizationProtocolApplied("protocolApplied", reader, protocolAppliedElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -23315,6 +24755,7 @@ private Immunization parseImmunization(java.lang.String elementName, XMLStreamRe private Immunization.Education parseImmunizationEducation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Immunization.Education.Builder builder = Immunization.Education.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -23353,7 +24794,11 @@ private Immunization.Education parseImmunizationEducation(java.lang.String eleme builder.presentationDate(parseDateTime("presentationDate", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -23370,6 +24815,7 @@ private Immunization.Education parseImmunizationEducation(java.lang.String eleme private Immunization.Performer parseImmunizationPerformer(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Immunization.Performer.Builder builder = Immunization.Performer.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -23400,7 +24846,11 @@ private Immunization.Performer parseImmunizationPerformer(java.lang.String eleme builder.actor(parseReference("actor", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -23417,6 +24867,7 @@ private Immunization.Performer parseImmunizationPerformer(java.lang.String eleme private Immunization.ProtocolApplied parseImmunizationProtocolApplied(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Immunization.ProtocolApplied.Builder builder = Immunization.ProtocolApplied.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -23467,7 +24918,11 @@ private Immunization.ProtocolApplied parseImmunizationProtocolApplied(java.lang. builder.seriesDoses(parseString("seriesDosesString", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -23484,6 +24939,7 @@ private Immunization.ProtocolApplied parseImmunizationProtocolApplied(java.lang. private Immunization.Reaction parseImmunizationReaction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Immunization.Reaction.Builder builder = Immunization.Reaction.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -23518,7 +24974,11 @@ private Immunization.Reaction parseImmunizationReaction(java.lang.String element builder.reported(parseBoolean("reported", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -23535,6 +24995,7 @@ private Immunization.Reaction parseImmunizationReaction(java.lang.String element private ImmunizationEvaluation parseImmunizationEvaluation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImmunizationEvaluation.Builder builder = ImmunizationEvaluation.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, doseStatusReasonElementIndex = 0; while (reader.hasNext()) { @@ -23637,7 +25098,11 @@ private ImmunizationEvaluation parseImmunizationEvaluation(java.lang.String elem builder.seriesDoses(parseString("seriesDosesString", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -23654,6 +25119,7 @@ private ImmunizationEvaluation parseImmunizationEvaluation(java.lang.String elem private ImmunizationRecommendation parseImmunizationRecommendation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImmunizationRecommendation.Builder builder = ImmunizationRecommendation.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, recommendationElementIndex = 0; while (reader.hasNext()) { @@ -23716,7 +25182,11 @@ private ImmunizationRecommendation parseImmunizationRecommendation(java.lang.Str builder.recommendation(parseImmunizationRecommendationRecommendation("recommendation", reader, recommendationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -23733,6 +25203,7 @@ private ImmunizationRecommendation parseImmunizationRecommendation(java.lang.Str private ImmunizationRecommendation.Recommendation parseImmunizationRecommendationRecommendation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImmunizationRecommendation.Recommendation.Builder builder = ImmunizationRecommendation.Recommendation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -23811,7 +25282,11 @@ private ImmunizationRecommendation.Recommendation parseImmunizationRecommendatio builder.supportingPatientInformation(parseReference("supportingPatientInformation", reader, supportingPatientInformationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -23828,6 +25303,7 @@ private ImmunizationRecommendation.Recommendation parseImmunizationRecommendatio private ImmunizationRecommendation.Recommendation.DateCriterion parseImmunizationRecommendationRecommendationDateCriterion(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImmunizationRecommendation.Recommendation.DateCriterion.Builder builder = ImmunizationRecommendation.Recommendation.DateCriterion.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -23858,7 +25334,11 @@ private ImmunizationRecommendation.Recommendation.DateCriterion parseImmunizatio builder.value(parseDateTime("value", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -23875,6 +25355,7 @@ private ImmunizationRecommendation.Recommendation.DateCriterion parseImmunizatio private ImplementationGuide parseImplementationGuide(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImplementationGuide.Builder builder = ImplementationGuide.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, fhirVersionElementIndex = 0, dependsOnElementIndex = 0, globalElementIndex = 0; while (reader.hasNext()) { @@ -23997,7 +25478,11 @@ private ImplementationGuide parseImplementationGuide(java.lang.String elementNam builder.manifest(parseImplementationGuideManifest("manifest", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24014,6 +25499,7 @@ private ImplementationGuide parseImplementationGuide(java.lang.String elementNam private ImplementationGuide.Definition parseImplementationGuideDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImplementationGuide.Definition.Builder builder = ImplementationGuide.Definition.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24056,7 +25542,11 @@ private ImplementationGuide.Definition parseImplementationGuideDefinition(java.l builder.template(parseImplementationGuideDefinitionTemplate("template", reader, templateElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24073,6 +25563,7 @@ private ImplementationGuide.Definition parseImplementationGuideDefinition(java.l private ImplementationGuide.Definition.Grouping parseImplementationGuideDefinitionGrouping(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImplementationGuide.Definition.Grouping.Builder builder = ImplementationGuide.Definition.Grouping.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24103,7 +25594,11 @@ private ImplementationGuide.Definition.Grouping parseImplementationGuideDefiniti builder.description(parseString("description", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24120,6 +25615,7 @@ private ImplementationGuide.Definition.Grouping parseImplementationGuideDefiniti private ImplementationGuide.Definition.Page parseImplementationGuideDefinitionPage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImplementationGuide.Definition.Page.Builder builder = ImplementationGuide.Definition.Page.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24162,7 +25658,11 @@ private ImplementationGuide.Definition.Page parseImplementationGuideDefinitionPa builder.page(parseImplementationGuideDefinitionPage("page", reader, pageElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24179,6 +25679,7 @@ private ImplementationGuide.Definition.Page parseImplementationGuideDefinitionPa private ImplementationGuide.Definition.Parameter parseImplementationGuideDefinitionParameter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImplementationGuide.Definition.Parameter.Builder builder = ImplementationGuide.Definition.Parameter.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24209,7 +25710,11 @@ private ImplementationGuide.Definition.Parameter parseImplementationGuideDefinit builder.value(parseString("value", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24226,6 +25731,7 @@ private ImplementationGuide.Definition.Parameter parseImplementationGuideDefinit private ImplementationGuide.Definition.Resource parseImplementationGuideDefinitionResource(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImplementationGuide.Definition.Resource.Builder builder = ImplementationGuide.Definition.Resource.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24276,7 +25782,11 @@ private ImplementationGuide.Definition.Resource parseImplementationGuideDefiniti builder.groupingId((Id) parseString(Id.builder(), "groupingId", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24293,6 +25803,7 @@ private ImplementationGuide.Definition.Resource parseImplementationGuideDefiniti private ImplementationGuide.Definition.Template parseImplementationGuideDefinitionTemplate(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImplementationGuide.Definition.Template.Builder builder = ImplementationGuide.Definition.Template.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24327,7 +25838,11 @@ private ImplementationGuide.Definition.Template parseImplementationGuideDefiniti builder.scope(parseString("scope", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24344,6 +25859,7 @@ private ImplementationGuide.Definition.Template parseImplementationGuideDefiniti private ImplementationGuide.DependsOn parseImplementationGuideDependsOn(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImplementationGuide.DependsOn.Builder builder = ImplementationGuide.DependsOn.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24378,7 +25894,11 @@ private ImplementationGuide.DependsOn parseImplementationGuideDependsOn(java.lan builder.version(parseString("version", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24395,6 +25915,7 @@ private ImplementationGuide.DependsOn parseImplementationGuideDependsOn(java.lan private ImplementationGuide.Global parseImplementationGuideGlobal(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImplementationGuide.Global.Builder builder = ImplementationGuide.Global.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24425,7 +25946,11 @@ private ImplementationGuide.Global parseImplementationGuideGlobal(java.lang.Stri builder.profile((Canonical) parseUri(Canonical.builder(), "profile", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24442,6 +25967,7 @@ private ImplementationGuide.Global parseImplementationGuideGlobal(java.lang.Stri private ImplementationGuide.Manifest parseImplementationGuideManifest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImplementationGuide.Manifest.Builder builder = ImplementationGuide.Manifest.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24484,7 +26010,11 @@ private ImplementationGuide.Manifest parseImplementationGuideManifest(java.lang. builder.other(parseString("other", reader, otherElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24501,6 +26031,7 @@ private ImplementationGuide.Manifest parseImplementationGuideManifest(java.lang. private ImplementationGuide.Manifest.Page parseImplementationGuideManifestPage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImplementationGuide.Manifest.Page.Builder builder = ImplementationGuide.Manifest.Page.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24535,7 +26066,11 @@ private ImplementationGuide.Manifest.Page parseImplementationGuideManifestPage(j builder.anchor(parseString("anchor", reader, anchorElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24552,6 +26087,7 @@ private ImplementationGuide.Manifest.Page parseImplementationGuideManifestPage(j private ImplementationGuide.Manifest.Resource parseImplementationGuideManifestResource(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ImplementationGuide.Manifest.Resource.Builder builder = ImplementationGuide.Manifest.Resource.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24590,7 +26126,11 @@ private ImplementationGuide.Manifest.Resource parseImplementationGuideManifestRe builder.relativePath((Url) parseUri(Url.builder(), "relativePath", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24607,6 +26147,7 @@ private ImplementationGuide.Manifest.Resource parseImplementationGuideManifestRe private Instant parseInstant(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Instant.Builder builder = Instant.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24629,7 +26170,11 @@ private Instant parseInstant(java.lang.String elementName, XMLStreamReader reade builder.extension(parseExtension("extension", reader, extensionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24646,6 +26191,7 @@ private Instant parseInstant(java.lang.String elementName, XMLStreamReader reade private InsurancePlan parseInsurancePlan(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); InsurancePlan.Builder builder = InsurancePlan.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, typeElementIndex = 0, aliasElementIndex = 0, coverageAreaElementIndex = 0, contactElementIndex = 0, endpointElementIndex = 0, networkElementIndex = 0, coverageElementIndex = 0, planElementIndex = 0; while (reader.hasNext()) { @@ -24744,7 +26290,11 @@ private InsurancePlan parseInsurancePlan(java.lang.String elementName, XMLStream builder.plan(parseInsurancePlanPlan("plan", reader, planElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24761,6 +26311,7 @@ private InsurancePlan parseInsurancePlan(java.lang.String elementName, XMLStream private InsurancePlan.Contact parseInsurancePlanContact(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); InsurancePlan.Contact.Builder builder = InsurancePlan.Contact.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24799,7 +26350,11 @@ private InsurancePlan.Contact parseInsurancePlanContact(java.lang.String element builder.address(parseAddress("address", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24816,6 +26371,7 @@ private InsurancePlan.Contact parseInsurancePlanContact(java.lang.String element private InsurancePlan.Coverage parseInsurancePlanCoverage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); InsurancePlan.Coverage.Builder builder = InsurancePlan.Coverage.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24850,7 +26406,11 @@ private InsurancePlan.Coverage parseInsurancePlanCoverage(java.lang.String eleme builder.benefit(parseInsurancePlanCoverageBenefit("benefit", reader, benefitElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24867,6 +26427,7 @@ private InsurancePlan.Coverage parseInsurancePlanCoverage(java.lang.String eleme private InsurancePlan.Coverage.Benefit parseInsurancePlanCoverageBenefit(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); InsurancePlan.Coverage.Benefit.Builder builder = InsurancePlan.Coverage.Benefit.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24901,7 +26462,11 @@ private InsurancePlan.Coverage.Benefit parseInsurancePlanCoverageBenefit(java.la builder.limit(parseInsurancePlanCoverageBenefitLimit("limit", reader, limitElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24918,6 +26483,7 @@ private InsurancePlan.Coverage.Benefit parseInsurancePlanCoverageBenefit(java.la private InsurancePlan.Coverage.Benefit.Limit parseInsurancePlanCoverageBenefitLimit(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); InsurancePlan.Coverage.Benefit.Limit.Builder builder = InsurancePlan.Coverage.Benefit.Limit.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -24948,7 +26514,11 @@ private InsurancePlan.Coverage.Benefit.Limit parseInsurancePlanCoverageBenefitLi builder.code(parseCodeableConcept("code", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -24965,6 +26535,7 @@ private InsurancePlan.Coverage.Benefit.Limit parseInsurancePlanCoverageBenefitLi private InsurancePlan.Plan parseInsurancePlanPlan(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); InsurancePlan.Plan.Builder builder = InsurancePlan.Plan.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -25011,7 +26582,11 @@ private InsurancePlan.Plan parseInsurancePlanPlan(java.lang.String elementName, builder.specificCost(parseInsurancePlanPlanSpecificCost("specificCost", reader, specificCostElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25028,6 +26603,7 @@ private InsurancePlan.Plan parseInsurancePlanPlan(java.lang.String elementName, private InsurancePlan.Plan.GeneralCost parseInsurancePlanPlanGeneralCost(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); InsurancePlan.Plan.GeneralCost.Builder builder = InsurancePlan.Plan.GeneralCost.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -25066,7 +26642,11 @@ private InsurancePlan.Plan.GeneralCost parseInsurancePlanPlanGeneralCost(java.la builder.comment(parseString("comment", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25083,6 +26663,7 @@ private InsurancePlan.Plan.GeneralCost parseInsurancePlanPlanGeneralCost(java.la private InsurancePlan.Plan.SpecificCost parseInsurancePlanPlanSpecificCost(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); InsurancePlan.Plan.SpecificCost.Builder builder = InsurancePlan.Plan.SpecificCost.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -25113,7 +26694,11 @@ private InsurancePlan.Plan.SpecificCost parseInsurancePlanPlanSpecificCost(java. builder.benefit(parseInsurancePlanPlanSpecificCostBenefit("benefit", reader, benefitElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25130,6 +26715,7 @@ private InsurancePlan.Plan.SpecificCost parseInsurancePlanPlanSpecificCost(java. private InsurancePlan.Plan.SpecificCost.Benefit parseInsurancePlanPlanSpecificCostBenefit(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); InsurancePlan.Plan.SpecificCost.Benefit.Builder builder = InsurancePlan.Plan.SpecificCost.Benefit.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -25160,7 +26746,11 @@ private InsurancePlan.Plan.SpecificCost.Benefit parseInsurancePlanPlanSpecificCo builder.cost(parseInsurancePlanPlanSpecificCostBenefitCost("cost", reader, costElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25177,6 +26767,7 @@ private InsurancePlan.Plan.SpecificCost.Benefit parseInsurancePlanPlanSpecificCo private InsurancePlan.Plan.SpecificCost.Benefit.Cost parseInsurancePlanPlanSpecificCostBenefitCost(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); InsurancePlan.Plan.SpecificCost.Benefit.Cost.Builder builder = InsurancePlan.Plan.SpecificCost.Benefit.Cost.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -25215,7 +26806,11 @@ private InsurancePlan.Plan.SpecificCost.Benefit.Cost parseInsurancePlanPlanSpeci builder.value(parseQuantity("value", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25231,6 +26826,7 @@ private InsurancePlan.Plan.SpecificCost.Benefit.Cost parseInsurancePlanPlanSpeci private Integer parseInteger(Integer.Builder builder, java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -25253,7 +26849,11 @@ private Integer parseInteger(Integer.Builder builder, java.lang.String elementNa builder.extension(parseExtension("extension", reader, extensionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25274,6 +26874,7 @@ private Integer parseInteger(java.lang.String elementName, XMLStreamReader reade private Invoice parseInvoice(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Invoice.Builder builder = Invoice.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, participantElementIndex = 0, lineItemElementIndex = 0, totalPriceComponentElementIndex = 0, noteElementIndex = 0; while (reader.hasNext()) { @@ -25380,7 +26981,11 @@ private Invoice parseInvoice(java.lang.String elementName, XMLStreamReader reade builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25397,6 +27002,7 @@ private Invoice parseInvoice(java.lang.String elementName, XMLStreamReader reade private Invoice.LineItem parseInvoiceLineItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Invoice.LineItem.Builder builder = Invoice.LineItem.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -25435,7 +27041,11 @@ private Invoice.LineItem parseInvoiceLineItem(java.lang.String elementName, XMLS builder.priceComponent(parseInvoiceLineItemPriceComponent("priceComponent", reader, priceComponentElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25452,6 +27062,7 @@ private Invoice.LineItem parseInvoiceLineItem(java.lang.String elementName, XMLS private Invoice.LineItem.PriceComponent parseInvoiceLineItemPriceComponent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Invoice.LineItem.PriceComponent.Builder builder = Invoice.LineItem.PriceComponent.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -25490,7 +27101,11 @@ private Invoice.LineItem.PriceComponent parseInvoiceLineItemPriceComponent(java. builder.amount(parseMoney("amount", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25507,6 +27122,7 @@ private Invoice.LineItem.PriceComponent parseInvoiceLineItemPriceComponent(java. private Invoice.Participant parseInvoiceParticipant(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Invoice.Participant.Builder builder = Invoice.Participant.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -25537,7 +27153,11 @@ private Invoice.Participant parseInvoiceParticipant(java.lang.String elementName builder.actor(parseReference("actor", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25554,6 +27174,7 @@ private Invoice.Participant parseInvoiceParticipant(java.lang.String elementName private Library parseLibrary(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Library.Builder builder = Library.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, topicElementIndex = 0, authorElementIndex = 0, editorElementIndex = 0, reviewerElementIndex = 0, endorserElementIndex = 0, relatedArtifactElementIndex = 0, parameterElementIndex = 0, dataRequirementElementIndex = 0, contentElementIndex = 0; while (reader.hasNext()) { @@ -25724,7 +27345,11 @@ private Library parseLibrary(java.lang.String elementName, XMLStreamReader reade builder.content(parseAttachment("content", reader, contentElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25741,6 +27366,7 @@ private Library parseLibrary(java.lang.String elementName, XMLStreamReader reade private Linkage parseLinkage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Linkage.Builder builder = Linkage.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, itemElementIndex = 0; while (reader.hasNext()) { @@ -25795,7 +27421,11 @@ private Linkage parseLinkage(java.lang.String elementName, XMLStreamReader reade builder.item(parseLinkageItem("item", reader, itemElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25812,6 +27442,7 @@ private Linkage parseLinkage(java.lang.String elementName, XMLStreamReader reade private Linkage.Item parseLinkageItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Linkage.Item.Builder builder = Linkage.Item.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -25842,7 +27473,11 @@ private Linkage.Item parseLinkageItem(java.lang.String elementName, XMLStreamRea builder.resource(parseReference("resource", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25859,6 +27494,7 @@ private Linkage.Item parseLinkageItem(java.lang.String elementName, XMLStreamRea private List parseList(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); List.Builder builder = List.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, noteElementIndex = 0, entryElementIndex = 0; while (reader.hasNext()) { @@ -25953,7 +27589,11 @@ private List parseList(java.lang.String elementName, XMLStreamReader reader, int builder.emptyReason(parseCodeableConcept("emptyReason", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -25970,6 +27610,7 @@ private List parseList(java.lang.String elementName, XMLStreamReader reader, int private List.Entry parseListEntry(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); List.Entry.Builder builder = List.Entry.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -26008,7 +27649,11 @@ private List.Entry parseListEntry(java.lang.String elementName, XMLStreamReader builder.item(parseReference("item", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -26025,6 +27670,7 @@ private List.Entry parseListEntry(java.lang.String elementName, XMLStreamReader private Location parseLocation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Location.Builder builder = Location.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, aliasElementIndex = 0, typeElementIndex = 0, telecomElementIndex = 0, hoursOfOperationElementIndex = 0, endpointElementIndex = 0; while (reader.hasNext()) { @@ -26135,7 +27781,11 @@ private Location parseLocation(java.lang.String elementName, XMLStreamReader rea builder.endpoint(parseReference("endpoint", reader, endpointElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -26152,6 +27802,7 @@ private Location parseLocation(java.lang.String elementName, XMLStreamReader rea private Location.HoursOfOperation parseLocationHoursOfOperation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Location.HoursOfOperation.Builder builder = Location.HoursOfOperation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -26190,7 +27841,11 @@ private Location.HoursOfOperation parseLocationHoursOfOperation(java.lang.String builder.closingTime(parseTime("closingTime", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -26207,6 +27862,7 @@ private Location.HoursOfOperation parseLocationHoursOfOperation(java.lang.String private Location.Position parseLocationPosition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Location.Position.Builder builder = Location.Position.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -26241,7 +27897,11 @@ private Location.Position parseLocationPosition(java.lang.String elementName, XM builder.altitude(parseDecimal("altitude", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -26258,6 +27918,7 @@ private Location.Position parseLocationPosition(java.lang.String elementName, XM private MarketingStatus parseMarketingStatus(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MarketingStatus.Builder builder = MarketingStatus.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -26300,7 +27961,11 @@ private MarketingStatus parseMarketingStatus(java.lang.String elementName, XMLSt builder.restoreDate(parseDateTime("restoreDate", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -26317,6 +27982,7 @@ private MarketingStatus parseMarketingStatus(java.lang.String elementName, XMLSt private Measure parseMeasure(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Measure.Builder builder = Measure.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, topicElementIndex = 0, authorElementIndex = 0, editorElementIndex = 0, reviewerElementIndex = 0, endorserElementIndex = 0, relatedArtifactElementIndex = 0, libraryElementIndex = 0, typeElementIndex = 0, definitionElementIndex = 0, groupElementIndex = 0, supplementalDataElementIndex = 0; while (reader.hasNext()) { @@ -26527,7 +28193,11 @@ private Measure parseMeasure(java.lang.String elementName, XMLStreamReader reade builder.supplementalData(parseMeasureSupplementalData("supplementalData", reader, supplementalDataElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -26544,6 +28214,7 @@ private Measure parseMeasure(java.lang.String elementName, XMLStreamReader reade private Measure.Group parseMeasureGroup(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Measure.Group.Builder builder = Measure.Group.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -26582,7 +28253,11 @@ private Measure.Group parseMeasureGroup(java.lang.String elementName, XMLStreamR builder.stratifier(parseMeasureGroupStratifier("stratifier", reader, stratifierElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -26599,6 +28274,7 @@ private Measure.Group parseMeasureGroup(java.lang.String elementName, XMLStreamR private Measure.Group.Population parseMeasureGroupPopulation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Measure.Group.Population.Builder builder = Measure.Group.Population.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -26633,7 +28309,11 @@ private Measure.Group.Population parseMeasureGroupPopulation(java.lang.String el builder.criteria(parseExpression("criteria", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -26650,6 +28330,7 @@ private Measure.Group.Population parseMeasureGroupPopulation(java.lang.String el private Measure.Group.Stratifier parseMeasureGroupStratifier(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Measure.Group.Stratifier.Builder builder = Measure.Group.Stratifier.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -26688,7 +28369,11 @@ private Measure.Group.Stratifier parseMeasureGroupStratifier(java.lang.String el builder.component(parseMeasureGroupStratifierComponent("component", reader, componentElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -26705,6 +28390,7 @@ private Measure.Group.Stratifier parseMeasureGroupStratifier(java.lang.String el private Measure.Group.Stratifier.Component parseMeasureGroupStratifierComponent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Measure.Group.Stratifier.Component.Builder builder = Measure.Group.Stratifier.Component.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -26739,7 +28425,11 @@ private Measure.Group.Stratifier.Component parseMeasureGroupStratifierComponent( builder.criteria(parseExpression("criteria", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -26756,6 +28446,7 @@ private Measure.Group.Stratifier.Component parseMeasureGroupStratifierComponent( private Measure.SupplementalData parseMeasureSupplementalData(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Measure.SupplementalData.Builder builder = Measure.SupplementalData.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -26794,7 +28485,11 @@ private Measure.SupplementalData parseMeasureSupplementalData(java.lang.String e builder.criteria(parseExpression("criteria", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -26811,6 +28506,7 @@ private Measure.SupplementalData parseMeasureSupplementalData(java.lang.String e private MeasureReport parseMeasureReport(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MeasureReport.Builder builder = MeasureReport.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, groupElementIndex = 0, evaluatedResourceElementIndex = 0; while (reader.hasNext()) { @@ -26897,7 +28593,11 @@ private MeasureReport parseMeasureReport(java.lang.String elementName, XMLStream builder.evaluatedResource(parseReference("evaluatedResource", reader, evaluatedResourceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -26914,6 +28614,7 @@ private MeasureReport parseMeasureReport(java.lang.String elementName, XMLStream private MeasureReport.Group parseMeasureReportGroup(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MeasureReport.Group.Builder builder = MeasureReport.Group.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -26952,7 +28653,11 @@ private MeasureReport.Group parseMeasureReportGroup(java.lang.String elementName builder.stratifier(parseMeasureReportGroupStratifier("stratifier", reader, stratifierElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -26969,6 +28674,7 @@ private MeasureReport.Group parseMeasureReportGroup(java.lang.String elementName private MeasureReport.Group.Population parseMeasureReportGroupPopulation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MeasureReport.Group.Population.Builder builder = MeasureReport.Group.Population.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -27003,7 +28709,11 @@ private MeasureReport.Group.Population parseMeasureReportGroupPopulation(java.la builder.subjectResults(parseReference("subjectResults", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -27020,6 +28730,7 @@ private MeasureReport.Group.Population parseMeasureReportGroupPopulation(java.la private MeasureReport.Group.Stratifier parseMeasureReportGroupStratifier(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MeasureReport.Group.Stratifier.Builder builder = MeasureReport.Group.Stratifier.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -27050,7 +28761,11 @@ private MeasureReport.Group.Stratifier parseMeasureReportGroupStratifier(java.la builder.stratum(parseMeasureReportGroupStratifierStratum("stratum", reader, stratumElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -27067,6 +28782,7 @@ private MeasureReport.Group.Stratifier parseMeasureReportGroupStratifier(java.la private MeasureReport.Group.Stratifier.Stratum parseMeasureReportGroupStratifierStratum(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MeasureReport.Group.Stratifier.Stratum.Builder builder = MeasureReport.Group.Stratifier.Stratum.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -27105,7 +28821,11 @@ private MeasureReport.Group.Stratifier.Stratum parseMeasureReportGroupStratifier builder.measureScore(parseQuantity("measureScore", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -27122,6 +28842,7 @@ private MeasureReport.Group.Stratifier.Stratum parseMeasureReportGroupStratifier private MeasureReport.Group.Stratifier.Stratum.Component parseMeasureReportGroupStratifierStratumComponent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MeasureReport.Group.Stratifier.Stratum.Component.Builder builder = MeasureReport.Group.Stratifier.Stratum.Component.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -27152,7 +28873,11 @@ private MeasureReport.Group.Stratifier.Stratum.Component parseMeasureReportGroup builder.value(parseCodeableConcept("value", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -27169,6 +28894,7 @@ private MeasureReport.Group.Stratifier.Stratum.Component parseMeasureReportGroup private MeasureReport.Group.Stratifier.Stratum.Population parseMeasureReportGroupStratifierStratumPopulation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MeasureReport.Group.Stratifier.Stratum.Population.Builder builder = MeasureReport.Group.Stratifier.Stratum.Population.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -27203,7 +28929,11 @@ private MeasureReport.Group.Stratifier.Stratum.Population parseMeasureReportGrou builder.subjectResults(parseReference("subjectResults", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -27220,6 +28950,7 @@ private MeasureReport.Group.Stratifier.Stratum.Population parseMeasureReportGrou private Media parseMedia(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Media.Builder builder = Media.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, basedOnElementIndex = 0, partOfElementIndex = 0, reasonCodeElementIndex = 0, noteElementIndex = 0; while (reader.hasNext()) { @@ -27354,7 +29085,11 @@ private Media parseMedia(java.lang.String elementName, XMLStreamReader reader, i builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -27371,6 +29106,7 @@ private Media parseMedia(java.lang.String elementName, XMLStreamReader reader, i private Medication parseMedication(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Medication.Builder builder = Medication.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, ingredientElementIndex = 0; while (reader.hasNext()) { @@ -27445,7 +29181,11 @@ private Medication parseMedication(java.lang.String elementName, XMLStreamReader builder.batch(parseMedicationBatch("batch", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -27462,6 +29202,7 @@ private Medication parseMedication(java.lang.String elementName, XMLStreamReader private Medication.Batch parseMedicationBatch(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Medication.Batch.Builder builder = Medication.Batch.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -27492,7 +29233,11 @@ private Medication.Batch parseMedicationBatch(java.lang.String elementName, XMLS builder.expirationDate(parseDateTime("expirationDate", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -27509,6 +29254,7 @@ private Medication.Batch parseMedicationBatch(java.lang.String elementName, XMLS private Medication.Ingredient parseMedicationIngredient(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Medication.Ingredient.Builder builder = Medication.Ingredient.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -27547,7 +29293,11 @@ private Medication.Ingredient parseMedicationIngredient(java.lang.String element builder.strength(parseRatio("strength", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -27564,6 +29314,7 @@ private Medication.Ingredient parseMedicationIngredient(java.lang.String element private MedicationAdministration parseMedicationAdministration(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationAdministration.Builder builder = MedicationAdministration.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, instantiatesElementIndex = 0, partOfElementIndex = 0, statusReasonElementIndex = 0, supportingInformationElementIndex = 0, performerElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, deviceElementIndex = 0, noteElementIndex = 0, eventHistoryElementIndex = 0; while (reader.hasNext()) { @@ -27690,7 +29441,11 @@ private MedicationAdministration parseMedicationAdministration(java.lang.String builder.eventHistory(parseReference("eventHistory", reader, eventHistoryElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -27707,6 +29462,7 @@ private MedicationAdministration parseMedicationAdministration(java.lang.String private MedicationAdministration.Dosage parseMedicationAdministrationDosage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationAdministration.Dosage.Builder builder = MedicationAdministration.Dosage.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -27757,7 +29513,11 @@ private MedicationAdministration.Dosage parseMedicationAdministrationDosage(java builder.rate((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "rateQuantity", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -27774,6 +29534,7 @@ private MedicationAdministration.Dosage parseMedicationAdministrationDosage(java private MedicationAdministration.Performer parseMedicationAdministrationPerformer(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationAdministration.Performer.Builder builder = MedicationAdministration.Performer.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -27804,7 +29565,11 @@ private MedicationAdministration.Performer parseMedicationAdministrationPerforme builder.actor(parseReference("actor", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -27821,6 +29586,7 @@ private MedicationAdministration.Performer parseMedicationAdministrationPerforme private MedicationDispense parseMedicationDispense(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationDispense.Builder builder = MedicationDispense.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, partOfElementIndex = 0, supportingInformationElementIndex = 0, performerElementIndex = 0, authorizingPrescriptionElementIndex = 0, receiverElementIndex = 0, noteElementIndex = 0, dosageInstructionElementIndex = 0, detectedIssueElementIndex = 0, eventHistoryElementIndex = 0; while (reader.hasNext()) { @@ -27967,7 +29733,11 @@ private MedicationDispense parseMedicationDispense(java.lang.String elementName, builder.eventHistory(parseReference("eventHistory", reader, eventHistoryElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -27984,6 +29754,7 @@ private MedicationDispense parseMedicationDispense(java.lang.String elementName, private MedicationDispense.Performer parseMedicationDispensePerformer(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationDispense.Performer.Builder builder = MedicationDispense.Performer.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28014,7 +29785,11 @@ private MedicationDispense.Performer parseMedicationDispensePerformer(java.lang. builder.actor(parseReference("actor", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28031,6 +29806,7 @@ private MedicationDispense.Performer parseMedicationDispensePerformer(java.lang. private MedicationDispense.Substitution parseMedicationDispenseSubstitution(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationDispense.Substitution.Builder builder = MedicationDispense.Substitution.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28069,7 +29845,11 @@ private MedicationDispense.Substitution parseMedicationDispenseSubstitution(java builder.responsibleParty(parseReference("responsibleParty", reader, responsiblePartyElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28086,6 +29866,7 @@ private MedicationDispense.Substitution parseMedicationDispenseSubstitution(java private MedicationKnowledge parseMedicationKnowledge(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.Builder builder = MedicationKnowledge.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, synonymElementIndex = 0, relatedMedicationKnowledgeElementIndex = 0, associatedMedicationElementIndex = 0, productTypeElementIndex = 0, monographElementIndex = 0, ingredientElementIndex = 0, intendedRouteElementIndex = 0, costElementIndex = 0, monitoringProgramElementIndex = 0, administrationGuidelinesElementIndex = 0, medicineClassificationElementIndex = 0, drugCharacteristicElementIndex = 0, contraindicationElementIndex = 0, regulatoryElementIndex = 0, kineticsElementIndex = 0; while (reader.hasNext()) { @@ -28216,7 +29997,11 @@ private MedicationKnowledge parseMedicationKnowledge(java.lang.String elementNam builder.kinetics(parseMedicationKnowledgeKinetics("kinetics", reader, kineticsElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28233,6 +30018,7 @@ private MedicationKnowledge parseMedicationKnowledge(java.lang.String elementNam private MedicationKnowledge.AdministrationGuidelines parseMedicationKnowledgeAdministrationGuidelines(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.AdministrationGuidelines.Builder builder = MedicationKnowledge.AdministrationGuidelines.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28271,7 +30057,11 @@ private MedicationKnowledge.AdministrationGuidelines parseMedicationKnowledgeAdm builder.patientCharacteristics(parseMedicationKnowledgeAdministrationGuidelinesPatientCharacteristics("patientCharacteristics", reader, patientCharacteristicsElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28288,6 +30078,7 @@ private MedicationKnowledge.AdministrationGuidelines parseMedicationKnowledgeAdm private MedicationKnowledge.AdministrationGuidelines.Dosage parseMedicationKnowledgeAdministrationGuidelinesDosage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.AdministrationGuidelines.Dosage.Builder builder = MedicationKnowledge.AdministrationGuidelines.Dosage.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28318,7 +30109,11 @@ private MedicationKnowledge.AdministrationGuidelines.Dosage parseMedicationKnowl builder.dosage(parseDosage("dosage", reader, dosageElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28335,6 +30130,7 @@ private MedicationKnowledge.AdministrationGuidelines.Dosage parseMedicationKnowl private MedicationKnowledge.AdministrationGuidelines.PatientCharacteristics parseMedicationKnowledgeAdministrationGuidelinesPatientCharacteristics(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.AdministrationGuidelines.PatientCharacteristics.Builder builder = MedicationKnowledge.AdministrationGuidelines.PatientCharacteristics.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28369,7 +30165,11 @@ private MedicationKnowledge.AdministrationGuidelines.PatientCharacteristics pars builder.value(parseString("value", reader, valueElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28386,6 +30186,7 @@ private MedicationKnowledge.AdministrationGuidelines.PatientCharacteristics pars private MedicationKnowledge.Cost parseMedicationKnowledgeCost(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.Cost.Builder builder = MedicationKnowledge.Cost.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28420,7 +30221,11 @@ private MedicationKnowledge.Cost parseMedicationKnowledgeCost(java.lang.String e builder.cost(parseMoney("cost", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28437,6 +30242,7 @@ private MedicationKnowledge.Cost parseMedicationKnowledgeCost(java.lang.String e private MedicationKnowledge.DrugCharacteristic parseMedicationKnowledgeDrugCharacteristic(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.DrugCharacteristic.Builder builder = MedicationKnowledge.DrugCharacteristic.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28479,7 +30285,11 @@ private MedicationKnowledge.DrugCharacteristic parseMedicationKnowledgeDrugChara builder.value(parseBase64Binary("valueBase64Binary", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28496,6 +30306,7 @@ private MedicationKnowledge.DrugCharacteristic parseMedicationKnowledgeDrugChara private MedicationKnowledge.Ingredient parseMedicationKnowledgeIngredient(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.Ingredient.Builder builder = MedicationKnowledge.Ingredient.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28534,7 +30345,11 @@ private MedicationKnowledge.Ingredient parseMedicationKnowledgeIngredient(java.l builder.strength(parseRatio("strength", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28551,6 +30366,7 @@ private MedicationKnowledge.Ingredient parseMedicationKnowledgeIngredient(java.l private MedicationKnowledge.Kinetics parseMedicationKnowledgeKinetics(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.Kinetics.Builder builder = MedicationKnowledge.Kinetics.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28585,7 +30401,11 @@ private MedicationKnowledge.Kinetics parseMedicationKnowledgeKinetics(java.lang. builder.halfLifePeriod((Duration) parseQuantity(Duration.builder(), "halfLifePeriod", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28602,6 +30422,7 @@ private MedicationKnowledge.Kinetics parseMedicationKnowledgeKinetics(java.lang. private MedicationKnowledge.MedicineClassification parseMedicationKnowledgeMedicineClassification(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.MedicineClassification.Builder builder = MedicationKnowledge.MedicineClassification.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28632,7 +30453,11 @@ private MedicationKnowledge.MedicineClassification parseMedicationKnowledgeMedic builder.classification(parseCodeableConcept("classification", reader, classificationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28649,6 +30474,7 @@ private MedicationKnowledge.MedicineClassification parseMedicationKnowledgeMedic private MedicationKnowledge.MonitoringProgram parseMedicationKnowledgeMonitoringProgram(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.MonitoringProgram.Builder builder = MedicationKnowledge.MonitoringProgram.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28679,7 +30505,11 @@ private MedicationKnowledge.MonitoringProgram parseMedicationKnowledgeMonitoring builder.name(parseString("name", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28696,6 +30526,7 @@ private MedicationKnowledge.MonitoringProgram parseMedicationKnowledgeMonitoring private MedicationKnowledge.Monograph parseMedicationKnowledgeMonograph(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.Monograph.Builder builder = MedicationKnowledge.Monograph.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28726,7 +30557,11 @@ private MedicationKnowledge.Monograph parseMedicationKnowledgeMonograph(java.lan builder.source(parseReference("source", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28743,6 +30578,7 @@ private MedicationKnowledge.Monograph parseMedicationKnowledgeMonograph(java.lan private MedicationKnowledge.Packaging parseMedicationKnowledgePackaging(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.Packaging.Builder builder = MedicationKnowledge.Packaging.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28773,7 +30609,11 @@ private MedicationKnowledge.Packaging parseMedicationKnowledgePackaging(java.lan builder.quantity((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "quantity", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28790,6 +30630,7 @@ private MedicationKnowledge.Packaging parseMedicationKnowledgePackaging(java.lan private MedicationKnowledge.Regulatory parseMedicationKnowledgeRegulatory(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.Regulatory.Builder builder = MedicationKnowledge.Regulatory.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28828,7 +30669,11 @@ private MedicationKnowledge.Regulatory parseMedicationKnowledgeRegulatory(java.l builder.maxDispense(parseMedicationKnowledgeRegulatoryMaxDispense("maxDispense", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28845,6 +30690,7 @@ private MedicationKnowledge.Regulatory parseMedicationKnowledgeRegulatory(java.l private MedicationKnowledge.Regulatory.MaxDispense parseMedicationKnowledgeRegulatoryMaxDispense(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.Regulatory.MaxDispense.Builder builder = MedicationKnowledge.Regulatory.MaxDispense.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28875,7 +30721,11 @@ private MedicationKnowledge.Regulatory.MaxDispense parseMedicationKnowledgeRegul builder.period((Duration) parseQuantity(Duration.builder(), "period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28892,6 +30742,7 @@ private MedicationKnowledge.Regulatory.MaxDispense parseMedicationKnowledgeRegul private MedicationKnowledge.Regulatory.Schedule parseMedicationKnowledgeRegulatorySchedule(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.Regulatory.Schedule.Builder builder = MedicationKnowledge.Regulatory.Schedule.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28918,7 +30769,11 @@ private MedicationKnowledge.Regulatory.Schedule parseMedicationKnowledgeRegulato builder.schedule(parseCodeableConcept("schedule", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28935,6 +30790,7 @@ private MedicationKnowledge.Regulatory.Schedule parseMedicationKnowledgeRegulato private MedicationKnowledge.Regulatory.Substitution parseMedicationKnowledgeRegulatorySubstitution(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.Regulatory.Substitution.Builder builder = MedicationKnowledge.Regulatory.Substitution.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -28965,7 +30821,11 @@ private MedicationKnowledge.Regulatory.Substitution parseMedicationKnowledgeRegu builder.allowed(parseBoolean("allowed", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -28982,6 +30842,7 @@ private MedicationKnowledge.Regulatory.Substitution parseMedicationKnowledgeRegu private MedicationKnowledge.RelatedMedicationKnowledge parseMedicationKnowledgeRelatedMedicationKnowledge(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationKnowledge.RelatedMedicationKnowledge.Builder builder = MedicationKnowledge.RelatedMedicationKnowledge.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -29012,7 +30873,11 @@ private MedicationKnowledge.RelatedMedicationKnowledge parseMedicationKnowledgeR builder.reference(parseReference("reference", reader, referenceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -29029,6 +30894,7 @@ private MedicationKnowledge.RelatedMedicationKnowledge parseMedicationKnowledgeR private MedicationRequest parseMedicationRequest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationRequest.Builder builder = MedicationRequest.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, categoryElementIndex = 0, supportingInformationElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, instantiatesCanonicalElementIndex = 0, instantiatesUriElementIndex = 0, basedOnElementIndex = 0, insuranceElementIndex = 0, noteElementIndex = 0, dosageInstructionElementIndex = 0, detectedIssueElementIndex = 0, eventHistoryElementIndex = 0; while (reader.hasNext()) { @@ -29207,7 +31073,11 @@ private MedicationRequest parseMedicationRequest(java.lang.String elementName, X builder.eventHistory(parseReference("eventHistory", reader, eventHistoryElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -29224,6 +31094,7 @@ private MedicationRequest parseMedicationRequest(java.lang.String elementName, X private MedicationRequest.DispenseRequest parseMedicationRequestDispenseRequest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationRequest.DispenseRequest.Builder builder = MedicationRequest.DispenseRequest.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -29274,7 +31145,11 @@ private MedicationRequest.DispenseRequest parseMedicationRequestDispenseRequest( builder.performer(parseReference("performer", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -29291,6 +31166,7 @@ private MedicationRequest.DispenseRequest parseMedicationRequestDispenseRequest( private MedicationRequest.DispenseRequest.InitialFill parseMedicationRequestDispenseRequestInitialFill(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationRequest.DispenseRequest.InitialFill.Builder builder = MedicationRequest.DispenseRequest.InitialFill.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -29321,7 +31197,11 @@ private MedicationRequest.DispenseRequest.InitialFill parseMedicationRequestDisp builder.duration((Duration) parseQuantity(Duration.builder(), "duration", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -29338,6 +31218,7 @@ private MedicationRequest.DispenseRequest.InitialFill parseMedicationRequestDisp private MedicationRequest.Substitution parseMedicationRequestSubstitution(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationRequest.Substitution.Builder builder = MedicationRequest.Substitution.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -29372,7 +31253,11 @@ private MedicationRequest.Substitution parseMedicationRequestSubstitution(java.l builder.reason(parseCodeableConcept("reason", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -29389,6 +31274,7 @@ private MedicationRequest.Substitution parseMedicationRequestSubstitution(java.l private MedicationStatement parseMedicationStatement(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicationStatement.Builder builder = MedicationStatement.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, basedOnElementIndex = 0, partOfElementIndex = 0, statusReasonElementIndex = 0, derivedFromElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, noteElementIndex = 0, dosageElementIndex = 0; while (reader.hasNext()) { @@ -29507,7 +31393,11 @@ private MedicationStatement parseMedicationStatement(java.lang.String elementNam builder.dosage(parseDosage("dosage", reader, dosageElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -29524,6 +31414,7 @@ private MedicationStatement parseMedicationStatement(java.lang.String elementNam private MedicinalProduct parseMedicinalProduct(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProduct.Builder builder = MedicinalProduct.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, specialMeasuresElementIndex = 0, productClassificationElementIndex = 0, marketingStatusElementIndex = 0, pharmaceuticalProductElementIndex = 0, packagedMedicinalProductElementIndex = 0, attachedDocumentElementIndex = 0, masterFileElementIndex = 0, contactElementIndex = 0, clinicalTrialElementIndex = 0, nameElementIndex = 0, crossReferenceElementIndex = 0, manufacturingBusinessOperationElementIndex = 0, specialDesignationElementIndex = 0; while (reader.hasNext()) { @@ -29646,7 +31537,11 @@ private MedicinalProduct parseMedicinalProduct(java.lang.String elementName, XML builder.specialDesignation(parseMedicinalProductSpecialDesignation("specialDesignation", reader, specialDesignationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -29663,6 +31558,7 @@ private MedicinalProduct parseMedicinalProduct(java.lang.String elementName, XML private MedicinalProduct.ManufacturingBusinessOperation parseMedicinalProductManufacturingBusinessOperation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProduct.ManufacturingBusinessOperation.Builder builder = MedicinalProduct.ManufacturingBusinessOperation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -29709,7 +31605,11 @@ private MedicinalProduct.ManufacturingBusinessOperation parseMedicinalProductMan builder.regulator(parseReference("regulator", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -29726,6 +31626,7 @@ private MedicinalProduct.ManufacturingBusinessOperation parseMedicinalProductMan private MedicinalProduct.Name parseMedicinalProductName(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProduct.Name.Builder builder = MedicinalProduct.Name.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -29760,7 +31661,11 @@ private MedicinalProduct.Name parseMedicinalProductName(java.lang.String element builder.countryLanguage(parseMedicinalProductNameCountryLanguage("countryLanguage", reader, countryLanguageElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -29777,6 +31682,7 @@ private MedicinalProduct.Name parseMedicinalProductName(java.lang.String element private MedicinalProduct.Name.CountryLanguage parseMedicinalProductNameCountryLanguage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProduct.Name.CountryLanguage.Builder builder = MedicinalProduct.Name.CountryLanguage.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -29811,7 +31717,11 @@ private MedicinalProduct.Name.CountryLanguage parseMedicinalProductNameCountryLa builder.language(parseCodeableConcept("language", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -29828,6 +31738,7 @@ private MedicinalProduct.Name.CountryLanguage parseMedicinalProductNameCountryLa private MedicinalProduct.Name.NamePart parseMedicinalProductNameNamePart(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProduct.Name.NamePart.Builder builder = MedicinalProduct.Name.NamePart.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -29858,7 +31769,11 @@ private MedicinalProduct.Name.NamePart parseMedicinalProductNameNamePart(java.la builder.type(parseCoding("type", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -29875,6 +31790,7 @@ private MedicinalProduct.Name.NamePart parseMedicinalProductNameNamePart(java.la private MedicinalProduct.SpecialDesignation parseMedicinalProductSpecialDesignation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProduct.SpecialDesignation.Builder builder = MedicinalProduct.SpecialDesignation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -29929,7 +31845,11 @@ private MedicinalProduct.SpecialDesignation parseMedicinalProductSpecialDesignat builder.species(parseCodeableConcept("species", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -29946,6 +31866,7 @@ private MedicinalProduct.SpecialDesignation parseMedicinalProductSpecialDesignat private MedicinalProductAuthorization parseMedicinalProductAuthorization(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductAuthorization.Builder builder = MedicinalProductAuthorization.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, countryElementIndex = 0, jurisdictionElementIndex = 0, jurisdictionalAuthorizationElementIndex = 0; while (reader.hasNext()) { @@ -30052,7 +31973,11 @@ private MedicinalProductAuthorization parseMedicinalProductAuthorization(java.la builder.procedure(parseMedicinalProductAuthorizationProcedure("procedure", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30069,6 +31994,7 @@ private MedicinalProductAuthorization parseMedicinalProductAuthorization(java.la private MedicinalProductAuthorization.JurisdictionalAuthorization parseMedicinalProductAuthorizationJurisdictionalAuthorization(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductAuthorization.JurisdictionalAuthorization.Builder builder = MedicinalProductAuthorization.JurisdictionalAuthorization.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -30111,7 +32037,11 @@ private MedicinalProductAuthorization.JurisdictionalAuthorization parseMedicinal builder.validityPeriod(parsePeriod("validityPeriod", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30128,6 +32058,7 @@ private MedicinalProductAuthorization.JurisdictionalAuthorization parseMedicinal private MedicinalProductAuthorization.Procedure parseMedicinalProductAuthorizationProcedure(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductAuthorization.Procedure.Builder builder = MedicinalProductAuthorization.Procedure.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -30170,7 +32101,11 @@ private MedicinalProductAuthorization.Procedure parseMedicinalProductAuthorizati builder.application(parseMedicinalProductAuthorizationProcedure("application", reader, applicationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30187,6 +32122,7 @@ private MedicinalProductAuthorization.Procedure parseMedicinalProductAuthorizati private MedicinalProductContraindication parseMedicinalProductContraindication(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductContraindication.Builder builder = MedicinalProductContraindication.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, subjectElementIndex = 0, comorbidityElementIndex = 0, therapeuticIndicationElementIndex = 0, otherTherapyElementIndex = 0, populationElementIndex = 0; while (reader.hasNext()) { @@ -30257,7 +32193,11 @@ private MedicinalProductContraindication parseMedicinalProductContraindication(j builder.population(parsePopulation("population", reader, populationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30274,6 +32214,7 @@ private MedicinalProductContraindication parseMedicinalProductContraindication(j private MedicinalProductContraindication.OtherTherapy parseMedicinalProductContraindicationOtherTherapy(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductContraindication.OtherTherapy.Builder builder = MedicinalProductContraindication.OtherTherapy.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -30308,7 +32249,11 @@ private MedicinalProductContraindication.OtherTherapy parseMedicinalProductContr builder.medication(parseReference("medicationReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30325,6 +32270,7 @@ private MedicinalProductContraindication.OtherTherapy parseMedicinalProductContr private MedicinalProductIndication parseMedicinalProductIndication(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductIndication.Builder builder = MedicinalProductIndication.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, subjectElementIndex = 0, comorbidityElementIndex = 0, otherTherapyElementIndex = 0, undesirableEffectElementIndex = 0, populationElementIndex = 0; while (reader.hasNext()) { @@ -30403,7 +32349,11 @@ private MedicinalProductIndication parseMedicinalProductIndication(java.lang.Str builder.population(parsePopulation("population", reader, populationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30420,6 +32370,7 @@ private MedicinalProductIndication parseMedicinalProductIndication(java.lang.Str private MedicinalProductIndication.OtherTherapy parseMedicinalProductIndicationOtherTherapy(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductIndication.OtherTherapy.Builder builder = MedicinalProductIndication.OtherTherapy.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -30454,7 +32405,11 @@ private MedicinalProductIndication.OtherTherapy parseMedicinalProductIndicationO builder.medication(parseReference("medicationReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30471,6 +32426,7 @@ private MedicinalProductIndication.OtherTherapy parseMedicinalProductIndicationO private MedicinalProductIngredient parseMedicinalProductIngredient(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductIngredient.Builder builder = MedicinalProductIngredient.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, manufacturerElementIndex = 0, specifiedSubstanceElementIndex = 0; while (reader.hasNext()) { @@ -30537,7 +32493,11 @@ private MedicinalProductIngredient parseMedicinalProductIngredient(java.lang.Str builder.substance(parseMedicinalProductIngredientSubstance("substance", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30554,6 +32514,7 @@ private MedicinalProductIngredient parseMedicinalProductIngredient(java.lang.Str private MedicinalProductIngredient.SpecifiedSubstance parseMedicinalProductIngredientSpecifiedSubstance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductIngredient.SpecifiedSubstance.Builder builder = MedicinalProductIngredient.SpecifiedSubstance.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -30592,7 +32553,11 @@ private MedicinalProductIngredient.SpecifiedSubstance parseMedicinalProductIngre builder.strength(parseMedicinalProductIngredientSpecifiedSubstanceStrength("strength", reader, strengthElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30609,6 +32574,7 @@ private MedicinalProductIngredient.SpecifiedSubstance parseMedicinalProductIngre private MedicinalProductIngredient.SpecifiedSubstance.Strength parseMedicinalProductIngredientSpecifiedSubstanceStrength(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductIngredient.SpecifiedSubstance.Strength.Builder builder = MedicinalProductIngredient.SpecifiedSubstance.Strength.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -30659,7 +32625,11 @@ private MedicinalProductIngredient.SpecifiedSubstance.Strength parseMedicinalPro builder.referenceStrength(parseMedicinalProductIngredientSpecifiedSubstanceStrengthReferenceStrength("referenceStrength", reader, referenceStrengthElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30676,6 +32646,7 @@ private MedicinalProductIngredient.SpecifiedSubstance.Strength parseMedicinalPro private MedicinalProductIngredient.SpecifiedSubstance.Strength.ReferenceStrength parseMedicinalProductIngredientSpecifiedSubstanceStrengthReferenceStrength(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductIngredient.SpecifiedSubstance.Strength.ReferenceStrength.Builder builder = MedicinalProductIngredient.SpecifiedSubstance.Strength.ReferenceStrength.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -30718,7 +32689,11 @@ private MedicinalProductIngredient.SpecifiedSubstance.Strength.ReferenceStrength builder.country(parseCodeableConcept("country", reader, countryElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30735,6 +32710,7 @@ private MedicinalProductIngredient.SpecifiedSubstance.Strength.ReferenceStrength private MedicinalProductIngredient.Substance parseMedicinalProductIngredientSubstance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductIngredient.Substance.Builder builder = MedicinalProductIngredient.Substance.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -30765,7 +32741,11 @@ private MedicinalProductIngredient.Substance parseMedicinalProductIngredientSubs builder.strength(parseMedicinalProductIngredientSpecifiedSubstanceStrength("strength", reader, strengthElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30782,6 +32762,7 @@ private MedicinalProductIngredient.Substance parseMedicinalProductIngredientSubs private MedicinalProductInteraction parseMedicinalProductInteraction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductInteraction.Builder builder = MedicinalProductInteraction.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, subjectElementIndex = 0, interactantElementIndex = 0; while (reader.hasNext()) { @@ -30852,7 +32833,11 @@ private MedicinalProductInteraction parseMedicinalProductInteraction(java.lang.S builder.management(parseCodeableConcept("management", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30869,6 +32854,7 @@ private MedicinalProductInteraction parseMedicinalProductInteraction(java.lang.S private MedicinalProductInteraction.Interactant parseMedicinalProductInteractionInteractant(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductInteraction.Interactant.Builder builder = MedicinalProductInteraction.Interactant.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -30899,7 +32885,11 @@ private MedicinalProductInteraction.Interactant parseMedicinalProductInteraction builder.item(parseCodeableConcept("itemCodeableConcept", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -30916,6 +32906,7 @@ private MedicinalProductInteraction.Interactant parseMedicinalProductInteraction private MedicinalProductManufactured parseMedicinalProductManufactured(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductManufactured.Builder builder = MedicinalProductManufactured.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, manufacturerElementIndex = 0, ingredientElementIndex = 0, otherCharacteristicsElementIndex = 0; while (reader.hasNext()) { @@ -30986,7 +32977,11 @@ private MedicinalProductManufactured parseMedicinalProductManufactured(java.lang builder.otherCharacteristics(parseCodeableConcept("otherCharacteristics", reader, otherCharacteristicsElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31003,6 +32998,7 @@ private MedicinalProductManufactured parseMedicinalProductManufactured(java.lang private MedicinalProductPackaged parseMedicinalProductPackaged(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductPackaged.Builder builder = MedicinalProductPackaged.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, subjectElementIndex = 0, marketingStatusElementIndex = 0, manufacturerElementIndex = 0, batchIdentifierElementIndex = 0, packageItemElementIndex = 0; while (reader.hasNext()) { @@ -31081,7 +33077,11 @@ private MedicinalProductPackaged parseMedicinalProductPackaged(java.lang.String builder.packageItem(parseMedicinalProductPackagedPackageItem("packageItem", reader, packageItemElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31098,6 +33098,7 @@ private MedicinalProductPackaged parseMedicinalProductPackaged(java.lang.String private MedicinalProductPackaged.BatchIdentifier parseMedicinalProductPackagedBatchIdentifier(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductPackaged.BatchIdentifier.Builder builder = MedicinalProductPackaged.BatchIdentifier.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -31128,7 +33129,11 @@ private MedicinalProductPackaged.BatchIdentifier parseMedicinalProductPackagedBa builder.immediatePackaging(parseIdentifier("immediatePackaging", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31145,6 +33150,7 @@ private MedicinalProductPackaged.BatchIdentifier parseMedicinalProductPackagedBa private MedicinalProductPackaged.PackageItem parseMedicinalProductPackagedPackageItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductPackaged.PackageItem.Builder builder = MedicinalProductPackaged.PackageItem.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -31215,7 +33221,11 @@ private MedicinalProductPackaged.PackageItem parseMedicinalProductPackagedPackag builder.manufacturer(parseReference("manufacturer", reader, manufacturerElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31232,6 +33242,7 @@ private MedicinalProductPackaged.PackageItem parseMedicinalProductPackagedPackag private MedicinalProductPharmaceutical parseMedicinalProductPharmaceutical(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductPharmaceutical.Builder builder = MedicinalProductPharmaceutical.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, ingredientElementIndex = 0, deviceElementIndex = 0, characteristicsElementIndex = 0, routeOfAdministrationElementIndex = 0; while (reader.hasNext()) { @@ -31302,7 +33313,11 @@ private MedicinalProductPharmaceutical parseMedicinalProductPharmaceutical(java. builder.routeOfAdministration(parseMedicinalProductPharmaceuticalRouteOfAdministration("routeOfAdministration", reader, routeOfAdministrationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31319,6 +33334,7 @@ private MedicinalProductPharmaceutical parseMedicinalProductPharmaceutical(java. private MedicinalProductPharmaceutical.Characteristics parseMedicinalProductPharmaceuticalCharacteristics(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductPharmaceutical.Characteristics.Builder builder = MedicinalProductPharmaceutical.Characteristics.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -31349,7 +33365,11 @@ private MedicinalProductPharmaceutical.Characteristics parseMedicinalProductPhar builder.status(parseCodeableConcept("status", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31366,6 +33386,7 @@ private MedicinalProductPharmaceutical.Characteristics parseMedicinalProductPhar private MedicinalProductPharmaceutical.RouteOfAdministration parseMedicinalProductPharmaceuticalRouteOfAdministration(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductPharmaceutical.RouteOfAdministration.Builder builder = MedicinalProductPharmaceutical.RouteOfAdministration.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -31416,7 +33437,11 @@ private MedicinalProductPharmaceutical.RouteOfAdministration parseMedicinalProdu builder.targetSpecies(parseMedicinalProductPharmaceuticalRouteOfAdministrationTargetSpecies("targetSpecies", reader, targetSpeciesElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31433,6 +33458,7 @@ private MedicinalProductPharmaceutical.RouteOfAdministration parseMedicinalProdu private MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies parseMedicinalProductPharmaceuticalRouteOfAdministrationTargetSpecies(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.Builder builder = MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -31463,7 +33489,11 @@ private MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies parse builder.withdrawalPeriod(parseMedicinalProductPharmaceuticalRouteOfAdministrationTargetSpeciesWithdrawalPeriod("withdrawalPeriod", reader, withdrawalPeriodElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31480,6 +33510,7 @@ private MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies parse private MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.WithdrawalPeriod parseMedicinalProductPharmaceuticalRouteOfAdministrationTargetSpeciesWithdrawalPeriod(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.WithdrawalPeriod.Builder builder = MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.WithdrawalPeriod.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -31514,7 +33545,11 @@ private MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.Withd builder.supportingInformation(parseString("supportingInformation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31531,6 +33566,7 @@ private MedicinalProductPharmaceutical.RouteOfAdministration.TargetSpecies.Withd private MedicinalProductUndesirableEffect parseMedicinalProductUndesirableEffect(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MedicinalProductUndesirableEffect.Builder builder = MedicinalProductUndesirableEffect.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, subjectElementIndex = 0, populationElementIndex = 0; while (reader.hasNext()) { @@ -31593,7 +33629,11 @@ private MedicinalProductUndesirableEffect parseMedicinalProductUndesirableEffect builder.population(parsePopulation("population", reader, populationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31610,6 +33650,7 @@ private MedicinalProductUndesirableEffect parseMedicinalProductUndesirableEffect private MessageDefinition parseMessageDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MessageDefinition.Builder builder = MessageDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, replacesElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, parentElementIndex = 0, focusElementIndex = 0, allowedResponseElementIndex = 0, graphElementIndex = 0; while (reader.hasNext()) { @@ -31752,7 +33793,11 @@ private MessageDefinition parseMessageDefinition(java.lang.String elementName, X builder.graph((Canonical) parseUri(Canonical.builder(), "graph", reader, graphElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31769,6 +33814,7 @@ private MessageDefinition parseMessageDefinition(java.lang.String elementName, X private MessageDefinition.AllowedResponse parseMessageDefinitionAllowedResponse(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MessageDefinition.AllowedResponse.Builder builder = MessageDefinition.AllowedResponse.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -31799,7 +33845,11 @@ private MessageDefinition.AllowedResponse parseMessageDefinitionAllowedResponse( builder.situation((Markdown) parseString(Markdown.builder(), "situation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31816,6 +33866,7 @@ private MessageDefinition.AllowedResponse parseMessageDefinitionAllowedResponse( private MessageDefinition.Focus parseMessageDefinitionFocus(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MessageDefinition.Focus.Builder builder = MessageDefinition.Focus.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -31854,7 +33905,11 @@ private MessageDefinition.Focus parseMessageDefinitionFocus(java.lang.String ele builder.max(parseString("max", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31871,6 +33926,7 @@ private MessageDefinition.Focus parseMessageDefinitionFocus(java.lang.String ele private MessageHeader parseMessageHeader(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MessageHeader.Builder builder = MessageHeader.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, destinationElementIndex = 0, focusElementIndex = 0; while (reader.hasNext()) { @@ -31961,7 +34017,11 @@ private MessageHeader parseMessageHeader(java.lang.String elementName, XMLStream builder.definition((Canonical) parseUri(Canonical.builder(), "definition", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -31978,6 +34038,7 @@ private MessageHeader parseMessageHeader(java.lang.String elementName, XMLStream private MessageHeader.Destination parseMessageHeaderDestination(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MessageHeader.Destination.Builder builder = MessageHeader.Destination.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -32016,7 +34077,11 @@ private MessageHeader.Destination parseMessageHeaderDestination(java.lang.String builder.receiver(parseReference("receiver", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32033,6 +34098,7 @@ private MessageHeader.Destination parseMessageHeaderDestination(java.lang.String private MessageHeader.Response parseMessageHeaderResponse(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MessageHeader.Response.Builder builder = MessageHeader.Response.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -32067,7 +34133,11 @@ private MessageHeader.Response parseMessageHeaderResponse(java.lang.String eleme builder.details(parseReference("details", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32084,6 +34154,7 @@ private MessageHeader.Response parseMessageHeaderResponse(java.lang.String eleme private MessageHeader.Source parseMessageHeaderSource(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MessageHeader.Source.Builder builder = MessageHeader.Source.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -32126,7 +34197,11 @@ private MessageHeader.Source parseMessageHeaderSource(java.lang.String elementNa builder.endpoint((Url) parseUri(Url.builder(), "endpoint", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32143,6 +34218,7 @@ private MessageHeader.Source parseMessageHeaderSource(java.lang.String elementNa private Meta parseMeta(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Meta.Builder builder = Meta.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -32185,7 +34261,11 @@ private Meta parseMeta(java.lang.String elementName, XMLStreamReader reader, int builder.tag(parseCoding("tag", reader, tagElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32202,6 +34282,7 @@ private Meta parseMeta(java.lang.String elementName, XMLStreamReader reader, int private MolecularSequence parseMolecularSequence(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MolecularSequence.Builder builder = MolecularSequence.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, variantElementIndex = 0, qualityElementIndex = 0, repositoryElementIndex = 0, pointerElementIndex = 0, structureVariantElementIndex = 0; while (reader.hasNext()) { @@ -32308,7 +34389,11 @@ private MolecularSequence parseMolecularSequence(java.lang.String elementName, X builder.structureVariant(parseMolecularSequenceStructureVariant("structureVariant", reader, structureVariantElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32325,6 +34410,7 @@ private MolecularSequence parseMolecularSequence(java.lang.String elementName, X private MolecularSequence.Quality parseMolecularSequenceQuality(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MolecularSequence.Quality.Builder builder = MolecularSequence.Quality.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -32407,7 +34493,11 @@ private MolecularSequence.Quality parseMolecularSequenceQuality(java.lang.String builder.roc(parseMolecularSequenceQualityRoc("roc", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32424,6 +34514,7 @@ private MolecularSequence.Quality parseMolecularSequenceQuality(java.lang.String private MolecularSequence.Quality.Roc parseMolecularSequenceQualityRoc(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MolecularSequence.Quality.Roc.Builder builder = MolecularSequence.Quality.Roc.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -32474,7 +34565,11 @@ private MolecularSequence.Quality.Roc parseMolecularSequenceQualityRoc(java.lang builder.fMeasure(parseDecimal("fMeasure", reader, fMeasureElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32491,6 +34586,7 @@ private MolecularSequence.Quality.Roc parseMolecularSequenceQualityRoc(java.lang private MolecularSequence.ReferenceSeq parseMolecularSequenceReferenceSeq(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MolecularSequence.ReferenceSeq.Builder builder = MolecularSequence.ReferenceSeq.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -32549,7 +34645,11 @@ private MolecularSequence.ReferenceSeq parseMolecularSequenceReferenceSeq(java.l builder.windowEnd(parseInteger("windowEnd", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32566,6 +34666,7 @@ private MolecularSequence.ReferenceSeq parseMolecularSequenceReferenceSeq(java.l private MolecularSequence.Repository parseMolecularSequenceRepository(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MolecularSequence.Repository.Builder builder = MolecularSequence.Repository.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -32612,7 +34713,11 @@ private MolecularSequence.Repository parseMolecularSequenceRepository(java.lang. builder.readsetId(parseString("readsetId", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32629,6 +34734,7 @@ private MolecularSequence.Repository parseMolecularSequenceRepository(java.lang. private MolecularSequence.StructureVariant parseMolecularSequenceStructureVariant(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MolecularSequence.StructureVariant.Builder builder = MolecularSequence.StructureVariant.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -32671,7 +34777,11 @@ private MolecularSequence.StructureVariant parseMolecularSequenceStructureVarian builder.inner(parseMolecularSequenceStructureVariantInner("inner", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32688,6 +34798,7 @@ private MolecularSequence.StructureVariant parseMolecularSequenceStructureVarian private MolecularSequence.StructureVariant.Inner parseMolecularSequenceStructureVariantInner(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MolecularSequence.StructureVariant.Inner.Builder builder = MolecularSequence.StructureVariant.Inner.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -32718,7 +34829,11 @@ private MolecularSequence.StructureVariant.Inner parseMolecularSequenceStructure builder.end(parseInteger("end", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32735,6 +34850,7 @@ private MolecularSequence.StructureVariant.Inner parseMolecularSequenceStructure private MolecularSequence.StructureVariant.Outer parseMolecularSequenceStructureVariantOuter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MolecularSequence.StructureVariant.Outer.Builder builder = MolecularSequence.StructureVariant.Outer.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -32765,7 +34881,11 @@ private MolecularSequence.StructureVariant.Outer parseMolecularSequenceStructure builder.end(parseInteger("end", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32782,6 +34902,7 @@ private MolecularSequence.StructureVariant.Outer parseMolecularSequenceStructure private MolecularSequence.Variant parseMolecularSequenceVariant(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); MolecularSequence.Variant.Builder builder = MolecularSequence.Variant.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -32828,7 +34949,11 @@ private MolecularSequence.Variant parseMolecularSequenceVariant(java.lang.String builder.variantPointer(parseReference("variantPointer", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32845,6 +34970,7 @@ private MolecularSequence.Variant parseMolecularSequenceVariant(java.lang.String private Money parseMoney(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Money.Builder builder = Money.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -32871,7 +34997,11 @@ private Money parseMoney(java.lang.String elementName, XMLStreamReader reader, i builder.currency((Code) parseString(Code.builder(), "currency", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32888,6 +35018,7 @@ private Money parseMoney(java.lang.String elementName, XMLStreamReader reader, i private NamingSystem parseNamingSystem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); NamingSystem.Builder builder = NamingSystem.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, uniqueIdElementIndex = 0; while (reader.hasNext()) { @@ -32982,7 +35113,11 @@ private NamingSystem parseNamingSystem(java.lang.String elementName, XMLStreamRe builder.uniqueId(parseNamingSystemUniqueId("uniqueId", reader, uniqueIdElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -32999,6 +35134,7 @@ private NamingSystem parseNamingSystem(java.lang.String elementName, XMLStreamRe private NamingSystem.UniqueId parseNamingSystemUniqueId(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); NamingSystem.UniqueId.Builder builder = NamingSystem.UniqueId.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -33041,7 +35177,11 @@ private NamingSystem.UniqueId parseNamingSystemUniqueId(java.lang.String element builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -33058,6 +35198,7 @@ private NamingSystem.UniqueId parseNamingSystemUniqueId(java.lang.String element private Narrative parseNarrative(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Narrative.Builder builder = Narrative.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -33088,7 +35229,11 @@ private Narrative parseNarrative(java.lang.String elementName, XMLStreamReader r builder.div(parseXhtml("div", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -33105,6 +35250,7 @@ private Narrative parseNarrative(java.lang.String elementName, XMLStreamReader r private NutritionOrder parseNutritionOrder(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); NutritionOrder.Builder builder = NutritionOrder.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, instantiatesCanonicalElementIndex = 0, instantiatesUriElementIndex = 0, instantiatesElementIndex = 0, allergyIntoleranceElementIndex = 0, foodPreferenceModifierElementIndex = 0, excludeFoodModifierElementIndex = 0, supplementElementIndex = 0, noteElementIndex = 0; while (reader.hasNext()) { @@ -33215,7 +35361,11 @@ private NutritionOrder parseNutritionOrder(java.lang.String elementName, XMLStre builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -33232,6 +35382,7 @@ private NutritionOrder parseNutritionOrder(java.lang.String elementName, XMLStre private NutritionOrder.EnteralFormula parseNutritionOrderEnteralFormula(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); NutritionOrder.EnteralFormula.Builder builder = NutritionOrder.EnteralFormula.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -33290,7 +35441,11 @@ private NutritionOrder.EnteralFormula parseNutritionOrderEnteralFormula(java.lan builder.administrationInstruction(parseString("administrationInstruction", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -33307,6 +35462,7 @@ private NutritionOrder.EnteralFormula parseNutritionOrderEnteralFormula(java.lan private NutritionOrder.EnteralFormula.Administration parseNutritionOrderEnteralFormulaAdministration(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); NutritionOrder.EnteralFormula.Administration.Builder builder = NutritionOrder.EnteralFormula.Administration.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -33345,7 +35501,11 @@ private NutritionOrder.EnteralFormula.Administration parseNutritionOrderEnteralF builder.rate(parseRatio("rateRatio", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -33362,6 +35522,7 @@ private NutritionOrder.EnteralFormula.Administration parseNutritionOrderEnteralF private NutritionOrder.OralDiet parseNutritionOrderOralDiet(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); NutritionOrder.OralDiet.Builder builder = NutritionOrder.OralDiet.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -33408,7 +35569,11 @@ private NutritionOrder.OralDiet parseNutritionOrderOralDiet(java.lang.String ele builder.instruction(parseString("instruction", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -33425,6 +35590,7 @@ private NutritionOrder.OralDiet parseNutritionOrderOralDiet(java.lang.String ele private NutritionOrder.OralDiet.Nutrient parseNutritionOrderOralDietNutrient(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); NutritionOrder.OralDiet.Nutrient.Builder builder = NutritionOrder.OralDiet.Nutrient.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -33455,7 +35621,11 @@ private NutritionOrder.OralDiet.Nutrient parseNutritionOrderOralDietNutrient(jav builder.amount((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "amount", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -33472,6 +35642,7 @@ private NutritionOrder.OralDiet.Nutrient parseNutritionOrderOralDietNutrient(jav private NutritionOrder.OralDiet.Texture parseNutritionOrderOralDietTexture(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); NutritionOrder.OralDiet.Texture.Builder builder = NutritionOrder.OralDiet.Texture.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -33502,7 +35673,11 @@ private NutritionOrder.OralDiet.Texture parseNutritionOrderOralDietTexture(java. builder.foodType(parseCodeableConcept("foodType", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -33519,6 +35694,7 @@ private NutritionOrder.OralDiet.Texture parseNutritionOrderOralDietTexture(java. private NutritionOrder.Supplement parseNutritionOrderSupplement(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); NutritionOrder.Supplement.Builder builder = NutritionOrder.Supplement.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -33561,7 +35737,11 @@ private NutritionOrder.Supplement parseNutritionOrderSupplement(java.lang.String builder.instruction(parseString("instruction", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -33578,6 +35758,7 @@ private NutritionOrder.Supplement parseNutritionOrderSupplement(java.lang.String private Observation parseObservation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Observation.Builder builder = Observation.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, basedOnElementIndex = 0, partOfElementIndex = 0, categoryElementIndex = 0, focusElementIndex = 0, performerElementIndex = 0, interpretationElementIndex = 0, noteElementIndex = 0, referenceRangeElementIndex = 0, hasMemberElementIndex = 0, derivedFromElementIndex = 0, componentElementIndex = 0; while (reader.hasNext()) { @@ -33768,7 +35949,11 @@ private Observation parseObservation(java.lang.String elementName, XMLStreamRead builder.component(parseObservationComponent("component", reader, componentElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -33785,6 +35970,7 @@ private Observation parseObservation(java.lang.String elementName, XMLStreamRead private Observation.Component parseObservationComponent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Observation.Component.Builder builder = Observation.Component.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -33867,7 +36053,11 @@ private Observation.Component parseObservationComponent(java.lang.String element builder.referenceRange(parseObservationReferenceRange("referenceRange", reader, referenceRangeElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -33884,6 +36074,7 @@ private Observation.Component parseObservationComponent(java.lang.String element private Observation.ReferenceRange parseObservationReferenceRange(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Observation.ReferenceRange.Builder builder = Observation.ReferenceRange.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -33930,7 +36121,11 @@ private Observation.ReferenceRange parseObservationReferenceRange(java.lang.Stri builder.text(parseString("text", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -33947,6 +36142,7 @@ private Observation.ReferenceRange parseObservationReferenceRange(java.lang.Stri private ObservationDefinition parseObservationDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ObservationDefinition.Builder builder = ObservationDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, categoryElementIndex = 0, identifierElementIndex = 0, permittedDataTypeElementIndex = 0, qualifiedIntervalElementIndex = 0; while (reader.hasNext()) { @@ -34041,7 +36237,11 @@ private ObservationDefinition parseObservationDefinition(java.lang.String elemen builder.criticalCodedValueSet(parseReference("criticalCodedValueSet", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -34058,6 +36258,7 @@ private ObservationDefinition parseObservationDefinition(java.lang.String elemen private ObservationDefinition.QualifiedInterval parseObservationDefinitionQualifiedInterval(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ObservationDefinition.QualifiedInterval.Builder builder = ObservationDefinition.QualifiedInterval.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -34112,7 +36313,11 @@ private ObservationDefinition.QualifiedInterval parseObservationDefinitionQualif builder.condition(parseString("condition", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -34129,6 +36334,7 @@ private ObservationDefinition.QualifiedInterval parseObservationDefinitionQualif private ObservationDefinition.QuantitativeDetails parseObservationDefinitionQuantitativeDetails(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ObservationDefinition.QuantitativeDetails.Builder builder = ObservationDefinition.QuantitativeDetails.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -34167,7 +36373,11 @@ private ObservationDefinition.QuantitativeDetails parseObservationDefinitionQuan builder.decimalPrecision(parseInteger("decimalPrecision", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -34184,6 +36394,7 @@ private ObservationDefinition.QuantitativeDetails parseObservationDefinitionQuan private OperationDefinition parseOperationDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); OperationDefinition.Builder builder = OperationDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, resourceElementIndex = 0, parameterElementIndex = 0, overloadElementIndex = 0; while (reader.hasNext()) { @@ -34330,7 +36541,11 @@ private OperationDefinition parseOperationDefinition(java.lang.String elementNam builder.overload(parseOperationDefinitionOverload("overload", reader, overloadElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -34347,6 +36562,7 @@ private OperationDefinition parseOperationDefinition(java.lang.String elementNam private OperationDefinition.Overload parseOperationDefinitionOverload(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); OperationDefinition.Overload.Builder builder = OperationDefinition.Overload.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -34377,7 +36593,11 @@ private OperationDefinition.Overload parseOperationDefinitionOverload(java.lang. builder.comment(parseString("comment", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -34394,6 +36614,7 @@ private OperationDefinition.Overload parseOperationDefinitionOverload(java.lang. private OperationDefinition.Parameter parseOperationDefinitionParameter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); OperationDefinition.Parameter.Builder builder = OperationDefinition.Parameter.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -34460,7 +36681,11 @@ private OperationDefinition.Parameter parseOperationDefinitionParameter(java.lan builder.part(parseOperationDefinitionParameter("part", reader, partElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -34477,6 +36702,7 @@ private OperationDefinition.Parameter parseOperationDefinitionParameter(java.lan private OperationDefinition.Parameter.Binding parseOperationDefinitionParameterBinding(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); OperationDefinition.Parameter.Binding.Builder builder = OperationDefinition.Parameter.Binding.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -34507,7 +36733,11 @@ private OperationDefinition.Parameter.Binding parseOperationDefinitionParameterB builder.valueSet((Canonical) parseUri(Canonical.builder(), "valueSet", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -34524,6 +36754,7 @@ private OperationDefinition.Parameter.Binding parseOperationDefinitionParameterB private OperationDefinition.Parameter.ReferencedFrom parseOperationDefinitionParameterReferencedFrom(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); OperationDefinition.Parameter.ReferencedFrom.Builder builder = OperationDefinition.Parameter.ReferencedFrom.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -34554,7 +36785,11 @@ private OperationDefinition.Parameter.ReferencedFrom parseOperationDefinitionPar builder.sourceId(parseString("sourceId", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -34571,6 +36806,7 @@ private OperationDefinition.Parameter.ReferencedFrom parseOperationDefinitionPar private OperationOutcome parseOperationOutcome(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); OperationOutcome.Builder builder = OperationOutcome.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, issueElementIndex = 0; while (reader.hasNext()) { @@ -34617,7 +36853,11 @@ private OperationOutcome parseOperationOutcome(java.lang.String elementName, XML builder.issue(parseOperationOutcomeIssue("issue", reader, issueElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -34634,6 +36874,7 @@ private OperationOutcome parseOperationOutcome(java.lang.String elementName, XML private OperationOutcome.Issue parseOperationOutcomeIssue(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); OperationOutcome.Issue.Builder builder = OperationOutcome.Issue.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -34680,7 +36921,11 @@ private OperationOutcome.Issue parseOperationOutcomeIssue(java.lang.String eleme builder.expression(parseString("expression", reader, expressionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -34697,6 +36942,7 @@ private OperationOutcome.Issue parseOperationOutcomeIssue(java.lang.String eleme private Organization parseOrganization(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Organization.Builder builder = Organization.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, typeElementIndex = 0, aliasElementIndex = 0, telecomElementIndex = 0, addressElementIndex = 0, contactElementIndex = 0, endpointElementIndex = 0; while (reader.hasNext()) { @@ -34779,7 +37025,11 @@ private Organization parseOrganization(java.lang.String elementName, XMLStreamRe builder.endpoint(parseReference("endpoint", reader, endpointElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -34796,6 +37046,7 @@ private Organization parseOrganization(java.lang.String elementName, XMLStreamRe private Organization.Contact parseOrganizationContact(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Organization.Contact.Builder builder = Organization.Contact.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -34834,7 +37085,11 @@ private Organization.Contact parseOrganizationContact(java.lang.String elementNa builder.address(parseAddress("address", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -34851,6 +37106,7 @@ private Organization.Contact parseOrganizationContact(java.lang.String elementNa private OrganizationAffiliation parseOrganizationAffiliation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); OrganizationAffiliation.Builder builder = OrganizationAffiliation.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, networkElementIndex = 0, codeElementIndex = 0, specialtyElementIndex = 0, locationElementIndex = 0, healthcareServiceElementIndex = 0, telecomElementIndex = 0, endpointElementIndex = 0; while (reader.hasNext()) { @@ -34941,7 +37197,11 @@ private OrganizationAffiliation parseOrganizationAffiliation(java.lang.String el builder.endpoint(parseReference("endpoint", reader, endpointElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -34958,6 +37218,7 @@ private OrganizationAffiliation parseOrganizationAffiliation(java.lang.String el private ParameterDefinition parseParameterDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ParameterDefinition.Builder builder = ParameterDefinition.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -35004,7 +37265,11 @@ private ParameterDefinition parseParameterDefinition(java.lang.String elementNam builder.profile((Canonical) parseUri(Canonical.builder(), "profile", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -35021,6 +37286,7 @@ private ParameterDefinition parseParameterDefinition(java.lang.String elementNam private Parameters parseParameters(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Parameters.Builder builder = Parameters.builder(); + builder.setValidating(validating); int position = -1; int parameterElementIndex = 0; while (reader.hasNext()) { @@ -35051,7 +37317,11 @@ private Parameters parseParameters(java.lang.String elementName, XMLStreamReader builder.parameter(parseParametersParameter("parameter", reader, parameterElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -35068,6 +37338,7 @@ private Parameters parseParameters(java.lang.String elementName, XMLStreamReader private Parameters.Parameter parseParametersParameter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Parameters.Parameter.Builder builder = Parameters.Parameter.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -35302,7 +37573,11 @@ private Parameters.Parameter parseParametersParameter(java.lang.String elementNa builder.part(parseParametersParameter("part", reader, partElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -35319,6 +37594,7 @@ private Parameters.Parameter parseParametersParameter(java.lang.String elementNa private Patient parsePatient(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Patient.Builder builder = Patient.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, nameElementIndex = 0, telecomElementIndex = 0, addressElementIndex = 0, photoElementIndex = 0, contactElementIndex = 0, communicationElementIndex = 0, generalPractitionerElementIndex = 0, linkElementIndex = 0; while (reader.hasNext()) { @@ -35433,7 +37709,11 @@ private Patient parsePatient(java.lang.String elementName, XMLStreamReader reade builder.link(parsePatientLink("link", reader, linkElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -35450,6 +37730,7 @@ private Patient parsePatient(java.lang.String elementName, XMLStreamReader reade private Patient.Communication parsePatientCommunication(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Patient.Communication.Builder builder = Patient.Communication.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -35480,7 +37761,11 @@ private Patient.Communication parsePatientCommunication(java.lang.String element builder.preferred(parseBoolean("preferred", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -35497,6 +37782,7 @@ private Patient.Communication parsePatientCommunication(java.lang.String element private Patient.Contact parsePatientContact(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Patient.Contact.Builder builder = Patient.Contact.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -35547,7 +37833,11 @@ private Patient.Contact parsePatientContact(java.lang.String elementName, XMLStr builder.period(parsePeriod("period", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -35564,6 +37854,7 @@ private Patient.Contact parsePatientContact(java.lang.String elementName, XMLStr private Patient.Link parsePatientLink(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Patient.Link.Builder builder = Patient.Link.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -35594,7 +37885,11 @@ private Patient.Link parsePatientLink(java.lang.String elementName, XMLStreamRea builder.type((LinkType) parseString(LinkType.builder(), "type", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -35611,6 +37906,7 @@ private Patient.Link parsePatientLink(java.lang.String elementName, XMLStreamRea private PaymentNotice parsePaymentNotice(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PaymentNotice.Builder builder = PaymentNotice.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0; while (reader.hasNext()) { @@ -35701,7 +37997,11 @@ private PaymentNotice parsePaymentNotice(java.lang.String elementName, XMLStream builder.paymentStatus(parseCodeableConcept("paymentStatus", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -35718,6 +38018,7 @@ private PaymentNotice parsePaymentNotice(java.lang.String elementName, XMLStream private PaymentReconciliation parsePaymentReconciliation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PaymentReconciliation.Builder builder = PaymentReconciliation.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, detailElementIndex = 0, processNoteElementIndex = 0; while (reader.hasNext()) { @@ -35820,7 +38121,11 @@ private PaymentReconciliation parsePaymentReconciliation(java.lang.String elemen builder.processNote(parsePaymentReconciliationProcessNote("processNote", reader, processNoteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -35837,6 +38142,7 @@ private PaymentReconciliation parsePaymentReconciliation(java.lang.String elemen private PaymentReconciliation.Detail parsePaymentReconciliationDetail(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PaymentReconciliation.Detail.Builder builder = PaymentReconciliation.Detail.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -35899,7 +38205,11 @@ private PaymentReconciliation.Detail parsePaymentReconciliationDetail(java.lang. builder.amount(parseMoney("amount", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -35916,6 +38226,7 @@ private PaymentReconciliation.Detail parsePaymentReconciliationDetail(java.lang. private PaymentReconciliation.ProcessNote parsePaymentReconciliationProcessNote(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PaymentReconciliation.ProcessNote.Builder builder = PaymentReconciliation.ProcessNote.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -35946,7 +38257,11 @@ private PaymentReconciliation.ProcessNote parsePaymentReconciliationProcessNote( builder.text(parseString("text", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -35963,6 +38278,7 @@ private PaymentReconciliation.ProcessNote parsePaymentReconciliationProcessNote( private Period parsePeriod(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Period.Builder builder = Period.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -35989,7 +38305,11 @@ private Period parsePeriod(java.lang.String elementName, XMLStreamReader reader, builder.end(parseDateTime("end", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -36006,6 +38326,7 @@ private Period parsePeriod(java.lang.String elementName, XMLStreamReader reader, private Person parsePerson(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Person.Builder builder = Person.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, nameElementIndex = 0, telecomElementIndex = 0, addressElementIndex = 0, linkElementIndex = 0; while (reader.hasNext()) { @@ -36088,7 +38409,11 @@ private Person parsePerson(java.lang.String elementName, XMLStreamReader reader, builder.link(parsePersonLink("link", reader, linkElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -36105,6 +38430,7 @@ private Person parsePerson(java.lang.String elementName, XMLStreamReader reader, private Person.Link parsePersonLink(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Person.Link.Builder builder = Person.Link.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -36135,7 +38461,11 @@ private Person.Link parsePersonLink(java.lang.String elementName, XMLStreamReade builder.assurance((IdentityAssuranceLevel) parseString(IdentityAssuranceLevel.builder(), "assurance", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -36152,6 +38482,7 @@ private Person.Link parsePersonLink(java.lang.String elementName, XMLStreamReade private PlanDefinition parsePlanDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PlanDefinition.Builder builder = PlanDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, topicElementIndex = 0, authorElementIndex = 0, editorElementIndex = 0, reviewerElementIndex = 0, endorserElementIndex = 0, relatedArtifactElementIndex = 0, libraryElementIndex = 0, goalElementIndex = 0, actionElementIndex = 0; while (reader.hasNext()) { @@ -36322,7 +38653,11 @@ private PlanDefinition parsePlanDefinition(java.lang.String elementName, XMLStre builder.action(parsePlanDefinitionAction("action", reader, actionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -36339,6 +38674,7 @@ private PlanDefinition parsePlanDefinition(java.lang.String elementName, XMLStre private PlanDefinition.Action parsePlanDefinitionAction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PlanDefinition.Action.Builder builder = PlanDefinition.Action.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -36497,7 +38833,11 @@ private PlanDefinition.Action parsePlanDefinitionAction(java.lang.String element builder.action(parsePlanDefinitionAction("action", reader, actionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -36514,6 +38854,7 @@ private PlanDefinition.Action parsePlanDefinitionAction(java.lang.String element private PlanDefinition.Action.Condition parsePlanDefinitionActionCondition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PlanDefinition.Action.Condition.Builder builder = PlanDefinition.Action.Condition.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -36544,7 +38885,11 @@ private PlanDefinition.Action.Condition parsePlanDefinitionActionCondition(java. builder.expression(parseExpression("expression", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -36561,6 +38906,7 @@ private PlanDefinition.Action.Condition parsePlanDefinitionActionCondition(java. private PlanDefinition.Action.DynamicValue parsePlanDefinitionActionDynamicValue(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PlanDefinition.Action.DynamicValue.Builder builder = PlanDefinition.Action.DynamicValue.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -36591,7 +38937,11 @@ private PlanDefinition.Action.DynamicValue parsePlanDefinitionActionDynamicValue builder.expression(parseExpression("expression", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -36608,6 +38958,7 @@ private PlanDefinition.Action.DynamicValue parsePlanDefinitionActionDynamicValue private PlanDefinition.Action.Participant parsePlanDefinitionActionParticipant(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PlanDefinition.Action.Participant.Builder builder = PlanDefinition.Action.Participant.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -36638,7 +38989,11 @@ private PlanDefinition.Action.Participant parsePlanDefinitionActionParticipant(j builder.role(parseCodeableConcept("role", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -36655,6 +39010,7 @@ private PlanDefinition.Action.Participant parsePlanDefinitionActionParticipant(j private PlanDefinition.Action.RelatedAction parsePlanDefinitionActionRelatedAction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PlanDefinition.Action.RelatedAction.Builder builder = PlanDefinition.Action.RelatedAction.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -36693,7 +39049,11 @@ private PlanDefinition.Action.RelatedAction parsePlanDefinitionActionRelatedActi builder.offset(parseRange("offsetRange", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -36710,6 +39070,7 @@ private PlanDefinition.Action.RelatedAction parsePlanDefinitionActionRelatedActi private PlanDefinition.Goal parsePlanDefinitionGoal(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PlanDefinition.Goal.Builder builder = PlanDefinition.Goal.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -36760,7 +39121,11 @@ private PlanDefinition.Goal parsePlanDefinitionGoal(java.lang.String elementName builder.target(parsePlanDefinitionGoalTarget("target", reader, targetElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -36777,6 +39142,7 @@ private PlanDefinition.Goal parsePlanDefinitionGoal(java.lang.String elementName private PlanDefinition.Goal.Target parsePlanDefinitionGoalTarget(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PlanDefinition.Goal.Target.Builder builder = PlanDefinition.Goal.Target.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -36819,7 +39185,11 @@ private PlanDefinition.Goal.Target parsePlanDefinitionGoalTarget(java.lang.Strin builder.due((Duration) parseQuantity(Duration.builder(), "due", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -36836,6 +39206,7 @@ private PlanDefinition.Goal.Target parsePlanDefinitionGoalTarget(java.lang.Strin private Population parsePopulation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Population.Builder builder = Population.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -36878,7 +39249,11 @@ private Population parsePopulation(java.lang.String elementName, XMLStreamReader builder.physiologicalCondition(parseCodeableConcept("physiologicalCondition", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -36895,6 +39270,7 @@ private Population parsePopulation(java.lang.String elementName, XMLStreamReader private Practitioner parsePractitioner(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Practitioner.Builder builder = Practitioner.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, nameElementIndex = 0, telecomElementIndex = 0, addressElementIndex = 0, photoElementIndex = 0, qualificationElementIndex = 0, communicationElementIndex = 0; while (reader.hasNext()) { @@ -36977,7 +39353,11 @@ private Practitioner parsePractitioner(java.lang.String elementName, XMLStreamRe builder.communication(parseCodeableConcept("communication", reader, communicationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -36994,6 +39374,7 @@ private Practitioner parsePractitioner(java.lang.String elementName, XMLStreamRe private Practitioner.Qualification parsePractitionerQualification(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Practitioner.Qualification.Builder builder = Practitioner.Qualification.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -37032,7 +39413,11 @@ private Practitioner.Qualification parsePractitionerQualification(java.lang.Stri builder.issuer(parseReference("issuer", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -37049,6 +39434,7 @@ private Practitioner.Qualification parsePractitionerQualification(java.lang.Stri private PractitionerRole parsePractitionerRole(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PractitionerRole.Builder builder = PractitionerRole.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, codeElementIndex = 0, specialtyElementIndex = 0, locationElementIndex = 0, healthcareServiceElementIndex = 0, telecomElementIndex = 0, availableTimeElementIndex = 0, notAvailableElementIndex = 0, endpointElementIndex = 0; while (reader.hasNext()) { @@ -37147,7 +39533,11 @@ private PractitionerRole parsePractitionerRole(java.lang.String elementName, XML builder.endpoint(parseReference("endpoint", reader, endpointElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -37164,6 +39554,7 @@ private PractitionerRole parsePractitionerRole(java.lang.String elementName, XML private PractitionerRole.AvailableTime parsePractitionerRoleAvailableTime(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PractitionerRole.AvailableTime.Builder builder = PractitionerRole.AvailableTime.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -37202,7 +39593,11 @@ private PractitionerRole.AvailableTime parsePractitionerRoleAvailableTime(java.l builder.availableEndTime(parseTime("availableEndTime", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -37219,6 +39614,7 @@ private PractitionerRole.AvailableTime parsePractitionerRoleAvailableTime(java.l private PractitionerRole.NotAvailable parsePractitionerRoleNotAvailable(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); PractitionerRole.NotAvailable.Builder builder = PractitionerRole.NotAvailable.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -37249,7 +39645,11 @@ private PractitionerRole.NotAvailable parsePractitionerRoleNotAvailable(java.lan builder.during(parsePeriod("during", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -37266,6 +39666,7 @@ private PractitionerRole.NotAvailable parsePractitionerRoleNotAvailable(java.lan private Procedure parseProcedure(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Procedure.Builder builder = Procedure.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, instantiatesCanonicalElementIndex = 0, instantiatesUriElementIndex = 0, basedOnElementIndex = 0, partOfElementIndex = 0, performerElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, bodySiteElementIndex = 0, reportElementIndex = 0, complicationElementIndex = 0, complicationDetailElementIndex = 0, followUpElementIndex = 0, noteElementIndex = 0, focalDeviceElementIndex = 0, usedReferenceElementIndex = 0, usedCodeElementIndex = 0; while (reader.hasNext()) { @@ -37436,7 +39837,11 @@ private Procedure parseProcedure(java.lang.String elementName, XMLStreamReader r builder.usedCode(parseCodeableConcept("usedCode", reader, usedCodeElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -37453,6 +39858,7 @@ private Procedure parseProcedure(java.lang.String elementName, XMLStreamReader r private Procedure.FocalDevice parseProcedureFocalDevice(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Procedure.FocalDevice.Builder builder = Procedure.FocalDevice.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -37483,7 +39889,11 @@ private Procedure.FocalDevice parseProcedureFocalDevice(java.lang.String element builder.manipulated(parseReference("manipulated", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -37500,6 +39910,7 @@ private Procedure.FocalDevice parseProcedureFocalDevice(java.lang.String element private Procedure.Performer parseProcedurePerformer(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Procedure.Performer.Builder builder = Procedure.Performer.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -37534,7 +39945,11 @@ private Procedure.Performer parseProcedurePerformer(java.lang.String elementName builder.onBehalfOf(parseReference("onBehalfOf", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -37551,6 +39966,7 @@ private Procedure.Performer parseProcedurePerformer(java.lang.String elementName private ProdCharacteristic parseProdCharacteristic(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ProdCharacteristic.Builder builder = ProdCharacteristic.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -37617,7 +40033,11 @@ private ProdCharacteristic parseProdCharacteristic(java.lang.String elementName, builder.scoring(parseCodeableConcept("scoring", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -37634,6 +40054,7 @@ private ProdCharacteristic parseProdCharacteristic(java.lang.String elementName, private ProductShelfLife parseProductShelfLife(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ProductShelfLife.Builder builder = ProductShelfLife.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -37672,7 +40093,11 @@ private ProductShelfLife parseProductShelfLife(java.lang.String elementName, XML builder.specialPrecautionsForStorage(parseCodeableConcept("specialPrecautionsForStorage", reader, specialPrecautionsForStorageElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -37689,6 +40114,7 @@ private ProductShelfLife parseProductShelfLife(java.lang.String elementName, XML private Provenance parseProvenance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Provenance.Builder builder = Provenance.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, targetElementIndex = 0, policyElementIndex = 0, reasonElementIndex = 0, agentElementIndex = 0, entityElementIndex = 0, signatureElementIndex = 0; while (reader.hasNext()) { @@ -37775,7 +40201,11 @@ private Provenance parseProvenance(java.lang.String elementName, XMLStreamReader builder.signature(parseSignature("signature", reader, signatureElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -37792,6 +40222,7 @@ private Provenance parseProvenance(java.lang.String elementName, XMLStreamReader private Provenance.Agent parseProvenanceAgent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Provenance.Agent.Builder builder = Provenance.Agent.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -37830,7 +40261,11 @@ private Provenance.Agent parseProvenanceAgent(java.lang.String elementName, XMLS builder.onBehalfOf(parseReference("onBehalfOf", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -37847,6 +40282,7 @@ private Provenance.Agent parseProvenanceAgent(java.lang.String elementName, XMLS private Provenance.Entity parseProvenanceEntity(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Provenance.Entity.Builder builder = Provenance.Entity.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -37881,7 +40317,11 @@ private Provenance.Entity parseProvenanceEntity(java.lang.String elementName, XM builder.agent(parseProvenanceAgent("agent", reader, agentElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -37897,6 +40337,7 @@ private Provenance.Entity parseProvenanceEntity(java.lang.String elementName, XM private Quantity parseQuantity(Quantity.Builder builder, java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -37935,7 +40376,11 @@ private Quantity parseQuantity(Quantity.Builder builder, java.lang.String elemen builder.code((Code) parseString(Code.builder(), "code", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -37956,6 +40401,7 @@ private Quantity parseQuantity(java.lang.String elementName, XMLStreamReader rea private Questionnaire parseQuestionnaire(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Questionnaire.Builder builder = Questionnaire.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, derivedFromElementIndex = 0, subjectTypeElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, codeElementIndex = 0, itemElementIndex = 0; while (reader.hasNext()) { @@ -38086,7 +40532,11 @@ private Questionnaire parseQuestionnaire(java.lang.String elementName, XMLStream builder.item(parseQuestionnaireItem("item", reader, itemElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -38103,6 +40553,7 @@ private Questionnaire parseQuestionnaire(java.lang.String elementName, XMLStream private Questionnaire.Item parseQuestionnaireItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Questionnaire.Item.Builder builder = Questionnaire.Item.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -38189,7 +40640,11 @@ private Questionnaire.Item parseQuestionnaireItem(java.lang.String elementName, builder.item(parseQuestionnaireItem("item", reader, itemElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -38206,6 +40661,7 @@ private Questionnaire.Item parseQuestionnaireItem(java.lang.String elementName, private Questionnaire.Item.AnswerOption parseQuestionnaireItemAnswerOption(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Questionnaire.Item.AnswerOption.Builder builder = Questionnaire.Item.AnswerOption.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -38256,7 +40712,11 @@ private Questionnaire.Item.AnswerOption parseQuestionnaireItemAnswerOption(java. builder.initialSelected(parseBoolean("initialSelected", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -38273,6 +40733,7 @@ private Questionnaire.Item.AnswerOption parseQuestionnaireItemAnswerOption(java. private Questionnaire.Item.EnableWhen parseQuestionnaireItemEnableWhen(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Questionnaire.Item.EnableWhen.Builder builder = Questionnaire.Item.EnableWhen.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -38343,7 +40804,11 @@ private Questionnaire.Item.EnableWhen parseQuestionnaireItemEnableWhen(java.lang builder.answer(parseReference("answerReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -38360,6 +40825,7 @@ private Questionnaire.Item.EnableWhen parseQuestionnaireItemEnableWhen(java.lang private Questionnaire.Item.Initial parseQuestionnaireItemInitial(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Questionnaire.Item.Initial.Builder builder = Questionnaire.Item.Initial.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -38430,7 +40896,11 @@ private Questionnaire.Item.Initial parseQuestionnaireItemInitial(java.lang.Strin builder.value(parseReference("valueReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -38447,6 +40917,7 @@ private Questionnaire.Item.Initial parseQuestionnaireItemInitial(java.lang.Strin private QuestionnaireResponse parseQuestionnaireResponse(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); QuestionnaireResponse.Builder builder = QuestionnaireResponse.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, basedOnElementIndex = 0, partOfElementIndex = 0, itemElementIndex = 0; while (reader.hasNext()) { @@ -38533,7 +41004,11 @@ private QuestionnaireResponse parseQuestionnaireResponse(java.lang.String elemen builder.item(parseQuestionnaireResponseItem("item", reader, itemElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -38550,6 +41025,7 @@ private QuestionnaireResponse parseQuestionnaireResponse(java.lang.String elemen private QuestionnaireResponse.Item parseQuestionnaireResponseItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); QuestionnaireResponse.Item.Builder builder = QuestionnaireResponse.Item.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -38592,7 +41068,11 @@ private QuestionnaireResponse.Item parseQuestionnaireResponseItem(java.lang.Stri builder.item(parseQuestionnaireResponseItem("item", reader, itemElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -38609,6 +41089,7 @@ private QuestionnaireResponse.Item parseQuestionnaireResponseItem(java.lang.Stri private QuestionnaireResponse.Item.Answer parseQuestionnaireResponseItemAnswer(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); QuestionnaireResponse.Item.Answer.Builder builder = QuestionnaireResponse.Item.Answer.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -38683,7 +41164,11 @@ private QuestionnaireResponse.Item.Answer parseQuestionnaireResponseItemAnswer(j builder.item(parseQuestionnaireResponseItem("item", reader, itemElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -38700,6 +41185,7 @@ private QuestionnaireResponse.Item.Answer parseQuestionnaireResponseItemAnswer(j private Range parseRange(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Range.Builder builder = Range.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -38726,7 +41212,11 @@ private Range parseRange(java.lang.String elementName, XMLStreamReader reader, i builder.high((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "high", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -38743,6 +41233,7 @@ private Range parseRange(java.lang.String elementName, XMLStreamReader reader, i private Ratio parseRatio(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Ratio.Builder builder = Ratio.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -38769,7 +41260,11 @@ private Ratio parseRatio(java.lang.String elementName, XMLStreamReader reader, i builder.denominator(parseQuantity("denominator", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -38786,6 +41281,7 @@ private Ratio parseRatio(java.lang.String elementName, XMLStreamReader reader, i private Reference parseReference(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Reference.Builder builder = Reference.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -38820,7 +41316,11 @@ private Reference parseReference(java.lang.String elementName, XMLStreamReader r builder.display(parseString("display", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -38837,6 +41337,7 @@ private Reference parseReference(java.lang.String elementName, XMLStreamReader r private RelatedArtifact parseRelatedArtifact(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RelatedArtifact.Builder builder = RelatedArtifact.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -38883,7 +41384,11 @@ private RelatedArtifact parseRelatedArtifact(java.lang.String elementName, XMLSt builder.resource((Canonical) parseUri(Canonical.builder(), "resource", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -38900,6 +41405,7 @@ private RelatedArtifact parseRelatedArtifact(java.lang.String elementName, XMLSt private RelatedPerson parseRelatedPerson(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RelatedPerson.Builder builder = RelatedPerson.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, relationshipElementIndex = 0, nameElementIndex = 0, telecomElementIndex = 0, addressElementIndex = 0, photoElementIndex = 0, communicationElementIndex = 0; while (reader.hasNext()) { @@ -38990,7 +41496,11 @@ private RelatedPerson parseRelatedPerson(java.lang.String elementName, XMLStream builder.communication(parseRelatedPersonCommunication("communication", reader, communicationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -39007,6 +41517,7 @@ private RelatedPerson parseRelatedPerson(java.lang.String elementName, XMLStream private RelatedPerson.Communication parseRelatedPersonCommunication(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RelatedPerson.Communication.Builder builder = RelatedPerson.Communication.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -39037,7 +41548,11 @@ private RelatedPerson.Communication parseRelatedPersonCommunication(java.lang.St builder.preferred(parseBoolean("preferred", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -39054,6 +41569,7 @@ private RelatedPerson.Communication parseRelatedPersonCommunication(java.lang.St private RequestGroup parseRequestGroup(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RequestGroup.Builder builder = RequestGroup.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, instantiatesCanonicalElementIndex = 0, instantiatesUriElementIndex = 0, basedOnElementIndex = 0, replacesElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, noteElementIndex = 0, actionElementIndex = 0; while (reader.hasNext()) { @@ -39168,7 +41684,11 @@ private RequestGroup parseRequestGroup(java.lang.String elementName, XMLStreamRe builder.action(parseRequestGroupAction("action", reader, actionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -39185,6 +41705,7 @@ private RequestGroup parseRequestGroup(java.lang.String elementName, XMLStreamRe private RequestGroup.Action parseRequestGroupAction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RequestGroup.Action.Builder builder = RequestGroup.Action.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -39303,7 +41824,11 @@ private RequestGroup.Action parseRequestGroupAction(java.lang.String elementName builder.action(parseRequestGroupAction("action", reader, actionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -39320,6 +41845,7 @@ private RequestGroup.Action parseRequestGroupAction(java.lang.String elementName private RequestGroup.Action.Condition parseRequestGroupActionCondition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RequestGroup.Action.Condition.Builder builder = RequestGroup.Action.Condition.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -39350,7 +41876,11 @@ private RequestGroup.Action.Condition parseRequestGroupActionCondition(java.lang builder.expression(parseExpression("expression", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -39367,6 +41897,7 @@ private RequestGroup.Action.Condition parseRequestGroupActionCondition(java.lang private RequestGroup.Action.RelatedAction parseRequestGroupActionRelatedAction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RequestGroup.Action.RelatedAction.Builder builder = RequestGroup.Action.RelatedAction.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -39405,7 +41936,11 @@ private RequestGroup.Action.RelatedAction parseRequestGroupActionRelatedAction(j builder.offset(parseRange("offsetRange", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -39422,6 +41957,7 @@ private RequestGroup.Action.RelatedAction parseRequestGroupActionRelatedAction(j private ResearchDefinition parseResearchDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ResearchDefinition.Builder builder = ResearchDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, commentElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, topicElementIndex = 0, authorElementIndex = 0, editorElementIndex = 0, reviewerElementIndex = 0, endorserElementIndex = 0, relatedArtifactElementIndex = 0, libraryElementIndex = 0; while (reader.hasNext()) { @@ -39604,7 +42140,11 @@ private ResearchDefinition parseResearchDefinition(java.lang.String elementName, builder.outcome(parseReference("outcome", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -39621,6 +42161,7 @@ private ResearchDefinition parseResearchDefinition(java.lang.String elementName, private ResearchElementDefinition parseResearchElementDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ResearchElementDefinition.Builder builder = ResearchElementDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, commentElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, topicElementIndex = 0, authorElementIndex = 0, editorElementIndex = 0, reviewerElementIndex = 0, endorserElementIndex = 0, relatedArtifactElementIndex = 0, libraryElementIndex = 0, characteristicElementIndex = 0; while (reader.hasNext()) { @@ -39799,7 +42340,11 @@ private ResearchElementDefinition parseResearchElementDefinition(java.lang.Strin builder.characteristic(parseResearchElementDefinitionCharacteristic("characteristic", reader, characteristicElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -39816,6 +42361,7 @@ private ResearchElementDefinition parseResearchElementDefinition(java.lang.Strin private ResearchElementDefinition.Characteristic parseResearchElementDefinitionCharacteristic(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ResearchElementDefinition.Characteristic.Builder builder = ResearchElementDefinition.Characteristic.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -39922,7 +42468,11 @@ private ResearchElementDefinition.Characteristic parseResearchElementDefinitionC builder.participantEffectiveGroupMeasure((GroupMeasure) parseString(GroupMeasure.builder(), "participantEffectiveGroupMeasure", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -39939,6 +42489,7 @@ private ResearchElementDefinition.Characteristic parseResearchElementDefinitionC private ResearchStudy parseResearchStudy(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ResearchStudy.Builder builder = ResearchStudy.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, protocolElementIndex = 0, partOfElementIndex = 0, categoryElementIndex = 0, focusElementIndex = 0, conditionElementIndex = 0, contactElementIndex = 0, relatedArtifactElementIndex = 0, keywordElementIndex = 0, locationElementIndex = 0, enrollmentElementIndex = 0, siteElementIndex = 0, noteElementIndex = 0, armElementIndex = 0, objectiveElementIndex = 0; while (reader.hasNext()) { @@ -40077,7 +42628,11 @@ private ResearchStudy parseResearchStudy(java.lang.String elementName, XMLStream builder.objective(parseResearchStudyObjective("objective", reader, objectiveElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -40094,6 +42649,7 @@ private ResearchStudy parseResearchStudy(java.lang.String elementName, XMLStream private ResearchStudy.Arm parseResearchStudyArm(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ResearchStudy.Arm.Builder builder = ResearchStudy.Arm.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -40128,7 +42684,11 @@ private ResearchStudy.Arm parseResearchStudyArm(java.lang.String elementName, XM builder.description(parseString("description", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -40145,6 +42705,7 @@ private ResearchStudy.Arm parseResearchStudyArm(java.lang.String elementName, XM private ResearchStudy.Objective parseResearchStudyObjective(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ResearchStudy.Objective.Builder builder = ResearchStudy.Objective.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -40175,7 +42736,11 @@ private ResearchStudy.Objective parseResearchStudyObjective(java.lang.String ele builder.type(parseCodeableConcept("type", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -40192,6 +42757,7 @@ private ResearchStudy.Objective parseResearchStudyObjective(java.lang.String ele private ResearchSubject parseResearchSubject(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ResearchSubject.Builder builder = ResearchSubject.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0; while (reader.hasNext()) { @@ -40266,7 +42832,11 @@ private ResearchSubject parseResearchSubject(java.lang.String elementName, XMLSt builder.consent(parseReference("consent", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -40283,6 +42853,7 @@ private ResearchSubject parseResearchSubject(java.lang.String elementName, XMLSt private RiskAssessment parseRiskAssessment(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RiskAssessment.Builder builder = RiskAssessment.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, basisElementIndex = 0, predictionElementIndex = 0, noteElementIndex = 0; while (reader.hasNext()) { @@ -40397,7 +42968,11 @@ private RiskAssessment parseRiskAssessment(java.lang.String elementName, XMLStre builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -40414,6 +42989,7 @@ private RiskAssessment parseRiskAssessment(java.lang.String elementName, XMLStre private RiskAssessment.Prediction parseRiskAssessmentPrediction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RiskAssessment.Prediction.Builder builder = RiskAssessment.Prediction.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -40468,7 +43044,11 @@ private RiskAssessment.Prediction parseRiskAssessmentPrediction(java.lang.String builder.rationale(parseString("rationale", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -40485,6 +43065,7 @@ private RiskAssessment.Prediction parseRiskAssessmentPrediction(java.lang.String private RiskEvidenceSynthesis parseRiskEvidenceSynthesis(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RiskEvidenceSynthesis.Builder builder = RiskEvidenceSynthesis.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, noteElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, topicElementIndex = 0, authorElementIndex = 0, editorElementIndex = 0, reviewerElementIndex = 0, endorserElementIndex = 0, relatedArtifactElementIndex = 0, certaintyElementIndex = 0; while (reader.hasNext()) { @@ -40651,7 +43232,11 @@ private RiskEvidenceSynthesis parseRiskEvidenceSynthesis(java.lang.String elemen builder.certainty(parseRiskEvidenceSynthesisCertainty("certainty", reader, certaintyElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -40668,6 +43253,7 @@ private RiskEvidenceSynthesis parseRiskEvidenceSynthesis(java.lang.String elemen private RiskEvidenceSynthesis.Certainty parseRiskEvidenceSynthesisCertainty(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RiskEvidenceSynthesis.Certainty.Builder builder = RiskEvidenceSynthesis.Certainty.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -40702,7 +43288,11 @@ private RiskEvidenceSynthesis.Certainty parseRiskEvidenceSynthesisCertainty(java builder.certaintySubcomponent(parseRiskEvidenceSynthesisCertaintyCertaintySubcomponent("certaintySubcomponent", reader, certaintySubcomponentElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -40719,6 +43309,7 @@ private RiskEvidenceSynthesis.Certainty parseRiskEvidenceSynthesisCertainty(java private RiskEvidenceSynthesis.Certainty.CertaintySubcomponent parseRiskEvidenceSynthesisCertaintyCertaintySubcomponent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RiskEvidenceSynthesis.Certainty.CertaintySubcomponent.Builder builder = RiskEvidenceSynthesis.Certainty.CertaintySubcomponent.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -40753,7 +43344,11 @@ private RiskEvidenceSynthesis.Certainty.CertaintySubcomponent parseRiskEvidenceS builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -40770,6 +43365,7 @@ private RiskEvidenceSynthesis.Certainty.CertaintySubcomponent parseRiskEvidenceS private RiskEvidenceSynthesis.RiskEstimate parseRiskEvidenceSynthesisRiskEstimate(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RiskEvidenceSynthesis.RiskEstimate.Builder builder = RiskEvidenceSynthesis.RiskEstimate.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -40820,7 +43416,11 @@ private RiskEvidenceSynthesis.RiskEstimate parseRiskEvidenceSynthesisRiskEstimat builder.precisionEstimate(parseRiskEvidenceSynthesisRiskEstimatePrecisionEstimate("precisionEstimate", reader, precisionEstimateElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -40837,6 +43437,7 @@ private RiskEvidenceSynthesis.RiskEstimate parseRiskEvidenceSynthesisRiskEstimat private RiskEvidenceSynthesis.RiskEstimate.PrecisionEstimate parseRiskEvidenceSynthesisRiskEstimatePrecisionEstimate(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RiskEvidenceSynthesis.RiskEstimate.PrecisionEstimate.Builder builder = RiskEvidenceSynthesis.RiskEstimate.PrecisionEstimate.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -40875,7 +43476,11 @@ private RiskEvidenceSynthesis.RiskEstimate.PrecisionEstimate parseRiskEvidenceSy builder.to(parseDecimal("to", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -40892,6 +43497,7 @@ private RiskEvidenceSynthesis.RiskEstimate.PrecisionEstimate parseRiskEvidenceSy private RiskEvidenceSynthesis.SampleSize parseRiskEvidenceSynthesisSampleSize(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); RiskEvidenceSynthesis.SampleSize.Builder builder = RiskEvidenceSynthesis.SampleSize.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -40926,7 +43532,11 @@ private RiskEvidenceSynthesis.SampleSize parseRiskEvidenceSynthesisSampleSize(ja builder.numberOfParticipants(parseInteger("numberOfParticipants", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -40943,6 +43553,7 @@ private RiskEvidenceSynthesis.SampleSize parseRiskEvidenceSynthesisSampleSize(ja private SampledData parseSampledData(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SampledData.Builder builder = SampledData.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -40989,7 +43600,11 @@ private SampledData parseSampledData(java.lang.String elementName, XMLStreamRead builder.data(parseString("data", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -41006,6 +43621,7 @@ private SampledData parseSampledData(java.lang.String elementName, XMLStreamRead private Schedule parseSchedule(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Schedule.Builder builder = Schedule.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, serviceCategoryElementIndex = 0, serviceTypeElementIndex = 0, specialtyElementIndex = 0, actorElementIndex = 0; while (reader.hasNext()) { @@ -41080,7 +43696,11 @@ private Schedule parseSchedule(java.lang.String elementName, XMLStreamReader rea builder.comment(parseString("comment", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -41097,6 +43717,7 @@ private Schedule parseSchedule(java.lang.String elementName, XMLStreamReader rea private SearchParameter parseSearchParameter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SearchParameter.Builder builder = SearchParameter.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, baseElementIndex = 0, targetElementIndex = 0, comparatorElementIndex = 0, modifierElementIndex = 0, chainElementIndex = 0, componentElementIndex = 0; while (reader.hasNext()) { @@ -41243,7 +43864,11 @@ private SearchParameter parseSearchParameter(java.lang.String elementName, XMLSt builder.component(parseSearchParameterComponent("component", reader, componentElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -41260,6 +43885,7 @@ private SearchParameter parseSearchParameter(java.lang.String elementName, XMLSt private SearchParameter.Component parseSearchParameterComponent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SearchParameter.Component.Builder builder = SearchParameter.Component.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -41290,7 +43916,11 @@ private SearchParameter.Component parseSearchParameterComponent(java.lang.String builder.expression(parseString("expression", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -41307,6 +43937,7 @@ private SearchParameter.Component parseSearchParameterComponent(java.lang.String private ServiceRequest parseServiceRequest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ServiceRequest.Builder builder = ServiceRequest.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, instantiatesCanonicalElementIndex = 0, instantiatesUriElementIndex = 0, basedOnElementIndex = 0, replacesElementIndex = 0, categoryElementIndex = 0, orderDetailElementIndex = 0, performerElementIndex = 0, locationCodeElementIndex = 0, locationReferenceElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0, insuranceElementIndex = 0, supportingInfoElementIndex = 0, specimenElementIndex = 0, bodySiteElementIndex = 0, noteElementIndex = 0, relevantHistoryElementIndex = 0; while (reader.hasNext()) { @@ -41501,7 +44132,11 @@ private ServiceRequest parseServiceRequest(java.lang.String elementName, XMLStre builder.relevantHistory(parseReference("relevantHistory", reader, relevantHistoryElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -41518,6 +44153,7 @@ private ServiceRequest parseServiceRequest(java.lang.String elementName, XMLStre private Signature parseSignature(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Signature.Builder builder = Signature.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -41564,7 +44200,11 @@ private Signature parseSignature(java.lang.String elementName, XMLStreamReader r builder.data(parseBase64Binary("data", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -41581,6 +44221,7 @@ private Signature parseSignature(java.lang.String elementName, XMLStreamReader r private Slot parseSlot(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Slot.Builder builder = Slot.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, serviceCategoryElementIndex = 0, serviceTypeElementIndex = 0, specialtyElementIndex = 0; while (reader.hasNext()) { @@ -41667,7 +44308,11 @@ private Slot parseSlot(java.lang.String elementName, XMLStreamReader reader, int builder.comment(parseString("comment", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -41684,6 +44329,7 @@ private Slot parseSlot(java.lang.String elementName, XMLStreamReader reader, int private Specimen parseSpecimen(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Specimen.Builder builder = Specimen.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, parentElementIndex = 0, requestElementIndex = 0, processingElementIndex = 0, containerElementIndex = 0, conditionElementIndex = 0, noteElementIndex = 0; while (reader.hasNext()) { @@ -41778,7 +44424,11 @@ private Specimen parseSpecimen(java.lang.String elementName, XMLStreamReader rea builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -41795,6 +44445,7 @@ private Specimen parseSpecimen(java.lang.String elementName, XMLStreamReader rea private Specimen.Collection parseSpecimenCollection(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Specimen.Collection.Builder builder = Specimen.Collection.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -41853,7 +44504,11 @@ private Specimen.Collection parseSpecimenCollection(java.lang.String elementName builder.fastingStatus((Duration) parseQuantity(Duration.builder(), "fastingStatusDuration", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -41870,6 +44525,7 @@ private Specimen.Collection parseSpecimenCollection(java.lang.String elementName private Specimen.Container parseSpecimenContainer(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Specimen.Container.Builder builder = Specimen.Container.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -41920,7 +44576,11 @@ private Specimen.Container parseSpecimenContainer(java.lang.String elementName, builder.additive(parseReference("additiveReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -41937,6 +44597,7 @@ private Specimen.Container parseSpecimenContainer(java.lang.String elementName, private Specimen.Processing parseSpecimenProcessing(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Specimen.Processing.Builder builder = Specimen.Processing.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -41979,7 +44640,11 @@ private Specimen.Processing parseSpecimenProcessing(java.lang.String elementName builder.time(parsePeriod("timePeriod", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -41996,6 +44661,7 @@ private Specimen.Processing parseSpecimenProcessing(java.lang.String elementName private SpecimenDefinition parseSpecimenDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SpecimenDefinition.Builder builder = SpecimenDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, patientPreparationElementIndex = 0, collectionElementIndex = 0, typeTestedElementIndex = 0; while (reader.hasNext()) { @@ -42062,7 +44728,11 @@ private SpecimenDefinition parseSpecimenDefinition(java.lang.String elementName, builder.typeTested(parseSpecimenDefinitionTypeTested("typeTested", reader, typeTestedElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42079,6 +44749,7 @@ private SpecimenDefinition parseSpecimenDefinition(java.lang.String elementName, private SpecimenDefinition.TypeTested parseSpecimenDefinitionTypeTested(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SpecimenDefinition.TypeTested.Builder builder = SpecimenDefinition.TypeTested.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -42133,7 +44804,11 @@ private SpecimenDefinition.TypeTested parseSpecimenDefinitionTypeTested(java.lan builder.handling(parseSpecimenDefinitionTypeTestedHandling("handling", reader, handlingElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42150,6 +44825,7 @@ private SpecimenDefinition.TypeTested parseSpecimenDefinitionTypeTested(java.lan private SpecimenDefinition.TypeTested.Container parseSpecimenDefinitionTypeTestedContainer(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SpecimenDefinition.TypeTested.Container.Builder builder = SpecimenDefinition.TypeTested.Container.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -42208,7 +44884,11 @@ private SpecimenDefinition.TypeTested.Container parseSpecimenDefinitionTypeTeste builder.preparation(parseString("preparation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42225,6 +44905,7 @@ private SpecimenDefinition.TypeTested.Container parseSpecimenDefinitionTypeTeste private SpecimenDefinition.TypeTested.Container.Additive parseSpecimenDefinitionTypeTestedContainerAdditive(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SpecimenDefinition.TypeTested.Container.Additive.Builder builder = SpecimenDefinition.TypeTested.Container.Additive.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -42255,7 +44936,11 @@ private SpecimenDefinition.TypeTested.Container.Additive parseSpecimenDefinition builder.additive(parseReference("additiveReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42272,6 +44957,7 @@ private SpecimenDefinition.TypeTested.Container.Additive parseSpecimenDefinition private SpecimenDefinition.TypeTested.Handling parseSpecimenDefinitionTypeTestedHandling(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SpecimenDefinition.TypeTested.Handling.Builder builder = SpecimenDefinition.TypeTested.Handling.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -42310,7 +44996,11 @@ private SpecimenDefinition.TypeTested.Handling parseSpecimenDefinitionTypeTested builder.instruction(parseString("instruction", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42326,6 +45016,7 @@ private SpecimenDefinition.TypeTested.Handling parseSpecimenDefinitionTypeTested private String parseString(String.Builder builder, java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -42348,7 +45039,11 @@ private String parseString(String.Builder builder, java.lang.String elementName, builder.extension(parseExtension("extension", reader, extensionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42369,6 +45064,7 @@ private String parseString(java.lang.String elementName, XMLStreamReader reader, private StructureDefinition parseStructureDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureDefinition.Builder builder = StructureDefinition.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, keywordElementIndex = 0, mappingElementIndex = 0, contextElementIndex = 0, contextInvariantElementIndex = 0; while (reader.hasNext()) { @@ -42519,7 +45215,11 @@ private StructureDefinition parseStructureDefinition(java.lang.String elementNam builder.differential(parseStructureDefinitionDifferential("differential", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42536,6 +45236,7 @@ private StructureDefinition parseStructureDefinition(java.lang.String elementNam private StructureDefinition.Context parseStructureDefinitionContext(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureDefinition.Context.Builder builder = StructureDefinition.Context.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -42566,7 +45267,11 @@ private StructureDefinition.Context parseStructureDefinitionContext(java.lang.St builder.expression(parseString("expression", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42583,6 +45288,7 @@ private StructureDefinition.Context parseStructureDefinitionContext(java.lang.St private StructureDefinition.Differential parseStructureDefinitionDifferential(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureDefinition.Differential.Builder builder = StructureDefinition.Differential.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -42609,7 +45315,11 @@ private StructureDefinition.Differential parseStructureDefinitionDifferential(ja builder.element(parseElementDefinition("element", reader, elementElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42626,6 +45336,7 @@ private StructureDefinition.Differential parseStructureDefinitionDifferential(ja private StructureDefinition.Mapping parseStructureDefinitionMapping(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureDefinition.Mapping.Builder builder = StructureDefinition.Mapping.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -42664,7 +45375,11 @@ private StructureDefinition.Mapping parseStructureDefinitionMapping(java.lang.St builder.comment(parseString("comment", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42681,6 +45396,7 @@ private StructureDefinition.Mapping parseStructureDefinitionMapping(java.lang.St private StructureDefinition.Snapshot parseStructureDefinitionSnapshot(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureDefinition.Snapshot.Builder builder = StructureDefinition.Snapshot.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -42707,7 +45423,11 @@ private StructureDefinition.Snapshot parseStructureDefinitionSnapshot(java.lang. builder.element(parseElementDefinition("element", reader, elementElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42724,6 +45444,7 @@ private StructureDefinition.Snapshot parseStructureDefinitionSnapshot(java.lang. private StructureMap parseStructureMap(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureMap.Builder builder = StructureMap.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, structureElementIndex = 0, importElementIndex = 0, groupElementIndex = 0; while (reader.hasNext()) { @@ -42838,7 +45559,11 @@ private StructureMap parseStructureMap(java.lang.String elementName, XMLStreamRe builder.group(parseStructureMapGroup("group", reader, groupElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42855,6 +45580,7 @@ private StructureMap parseStructureMap(java.lang.String elementName, XMLStreamRe private StructureMap.Group parseStructureMapGroup(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureMap.Group.Builder builder = StructureMap.Group.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -42901,7 +45627,11 @@ private StructureMap.Group parseStructureMapGroup(java.lang.String elementName, builder.rule(parseStructureMapGroupRule("rule", reader, ruleElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42918,6 +45648,7 @@ private StructureMap.Group parseStructureMapGroup(java.lang.String elementName, private StructureMap.Group.Input parseStructureMapGroupInput(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureMap.Group.Input.Builder builder = StructureMap.Group.Input.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -42956,7 +45687,11 @@ private StructureMap.Group.Input parseStructureMapGroupInput(java.lang.String el builder.documentation(parseString("documentation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -42973,6 +45708,7 @@ private StructureMap.Group.Input parseStructureMapGroupInput(java.lang.String el private StructureMap.Group.Rule parseStructureMapGroupRule(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureMap.Group.Rule.Builder builder = StructureMap.Group.Rule.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -43019,7 +45755,11 @@ private StructureMap.Group.Rule parseStructureMapGroupRule(java.lang.String elem builder.documentation(parseString("documentation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -43036,6 +45776,7 @@ private StructureMap.Group.Rule parseStructureMapGroupRule(java.lang.String elem private StructureMap.Group.Rule.Dependent parseStructureMapGroupRuleDependent(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureMap.Group.Rule.Dependent.Builder builder = StructureMap.Group.Rule.Dependent.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -43066,7 +45807,11 @@ private StructureMap.Group.Rule.Dependent parseStructureMapGroupRuleDependent(ja builder.variable(parseString("variable", reader, variableElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -43083,6 +45828,7 @@ private StructureMap.Group.Rule.Dependent parseStructureMapGroupRuleDependent(ja private StructureMap.Group.Rule.Source parseStructureMapGroupRuleSource(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureMap.Group.Rule.Source.Builder builder = StructureMap.Group.Rule.Source.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -43345,7 +46091,11 @@ private StructureMap.Group.Rule.Source parseStructureMapGroupRuleSource(java.lan builder.logMessage(parseString("logMessage", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -43362,6 +46112,7 @@ private StructureMap.Group.Rule.Source parseStructureMapGroupRuleSource(java.lan private StructureMap.Group.Rule.Target parseStructureMapGroupRuleTarget(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureMap.Group.Rule.Target.Builder builder = StructureMap.Group.Rule.Target.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -43416,7 +46167,11 @@ private StructureMap.Group.Rule.Target parseStructureMapGroupRuleTarget(java.lan builder.parameter(parseStructureMapGroupRuleTargetParameter("parameter", reader, parameterElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -43433,6 +46188,7 @@ private StructureMap.Group.Rule.Target parseStructureMapGroupRuleTarget(java.lan private StructureMap.Group.Rule.Target.Parameter parseStructureMapGroupRuleTargetParameter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureMap.Group.Rule.Target.Parameter.Builder builder = StructureMap.Group.Rule.Target.Parameter.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -43475,7 +46231,11 @@ private StructureMap.Group.Rule.Target.Parameter parseStructureMapGroupRuleTarge builder.value(parseDecimal("valueDecimal", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -43492,6 +46252,7 @@ private StructureMap.Group.Rule.Target.Parameter parseStructureMapGroupRuleTarge private StructureMap.Structure parseStructureMapStructure(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); StructureMap.Structure.Builder builder = StructureMap.Structure.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -43530,7 +46291,11 @@ private StructureMap.Structure parseStructureMapStructure(java.lang.String eleme builder.documentation(parseString("documentation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -43547,6 +46312,7 @@ private StructureMap.Structure parseStructureMapStructure(java.lang.String eleme private Subscription parseSubscription(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Subscription.Builder builder = Subscription.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, contactElementIndex = 0; while (reader.hasNext()) { @@ -43617,7 +46383,11 @@ private Subscription parseSubscription(java.lang.String elementName, XMLStreamRe builder.channel(parseSubscriptionChannel("channel", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -43634,6 +46404,7 @@ private Subscription parseSubscription(java.lang.String elementName, XMLStreamRe private Subscription.Channel parseSubscriptionChannel(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Subscription.Channel.Builder builder = Subscription.Channel.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -43672,7 +46443,11 @@ private Subscription.Channel parseSubscriptionChannel(java.lang.String elementNa builder.header(parseString("header", reader, headerElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -43689,6 +46464,7 @@ private Subscription.Channel parseSubscriptionChannel(java.lang.String elementNa private Substance parseSubstance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Substance.Builder builder = Substance.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, categoryElementIndex = 0, instanceElementIndex = 0, ingredientElementIndex = 0; while (reader.hasNext()) { @@ -43759,7 +46535,11 @@ private Substance parseSubstance(java.lang.String elementName, XMLStreamReader r builder.ingredient(parseSubstanceIngredient("ingredient", reader, ingredientElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -43776,6 +46556,7 @@ private Substance parseSubstance(java.lang.String elementName, XMLStreamReader r private Substance.Ingredient parseSubstanceIngredient(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Substance.Ingredient.Builder builder = Substance.Ingredient.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -43810,7 +46591,11 @@ private Substance.Ingredient parseSubstanceIngredient(java.lang.String elementNa builder.substance(parseReference("substanceReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -43827,6 +46612,7 @@ private Substance.Ingredient parseSubstanceIngredient(java.lang.String elementNa private Substance.Instance parseSubstanceInstance(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Substance.Instance.Builder builder = Substance.Instance.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -43861,7 +46647,11 @@ private Substance.Instance parseSubstanceInstance(java.lang.String elementName, builder.quantity((SimpleQuantity) parseQuantity(SimpleQuantity.builder(), "quantity", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -43878,6 +46668,7 @@ private Substance.Instance parseSubstanceInstance(java.lang.String elementName, private SubstanceAmount parseSubstanceAmount(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceAmount.Builder builder = SubstanceAmount.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -43924,7 +46715,11 @@ private SubstanceAmount parseSubstanceAmount(java.lang.String elementName, XMLSt builder.referenceRange(parseSubstanceAmountReferenceRange("referenceRange", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -43941,6 +46736,7 @@ private SubstanceAmount parseSubstanceAmount(java.lang.String elementName, XMLSt private SubstanceAmount.ReferenceRange parseSubstanceAmountReferenceRange(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceAmount.ReferenceRange.Builder builder = SubstanceAmount.ReferenceRange.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -43971,7 +46767,11 @@ private SubstanceAmount.ReferenceRange parseSubstanceAmountReferenceRange(java.l builder.highLimit(parseQuantity("highLimit", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -43988,6 +46788,7 @@ private SubstanceAmount.ReferenceRange parseSubstanceAmountReferenceRange(java.l private SubstanceNucleicAcid parseSubstanceNucleicAcid(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceNucleicAcid.Builder builder = SubstanceNucleicAcid.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, subunitElementIndex = 0; while (reader.hasNext()) { @@ -44050,7 +46851,11 @@ private SubstanceNucleicAcid parseSubstanceNucleicAcid(java.lang.String elementN builder.subunit(parseSubstanceNucleicAcidSubunit("subunit", reader, subunitElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44067,6 +46872,7 @@ private SubstanceNucleicAcid parseSubstanceNucleicAcid(java.lang.String elementN private SubstanceNucleicAcid.Subunit parseSubstanceNucleicAcidSubunit(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceNucleicAcid.Subunit.Builder builder = SubstanceNucleicAcid.Subunit.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -44121,7 +46927,11 @@ private SubstanceNucleicAcid.Subunit parseSubstanceNucleicAcidSubunit(java.lang. builder.sugar(parseSubstanceNucleicAcidSubunitSugar("sugar", reader, sugarElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44138,6 +46948,7 @@ private SubstanceNucleicAcid.Subunit parseSubstanceNucleicAcidSubunit(java.lang. private SubstanceNucleicAcid.Subunit.Linkage parseSubstanceNucleicAcidSubunitLinkage(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceNucleicAcid.Subunit.Linkage.Builder builder = SubstanceNucleicAcid.Subunit.Linkage.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -44176,7 +46987,11 @@ private SubstanceNucleicAcid.Subunit.Linkage parseSubstanceNucleicAcidSubunitLin builder.residueSite(parseString("residueSite", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44193,6 +47008,7 @@ private SubstanceNucleicAcid.Subunit.Linkage parseSubstanceNucleicAcidSubunitLin private SubstanceNucleicAcid.Subunit.Sugar parseSubstanceNucleicAcidSubunitSugar(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceNucleicAcid.Subunit.Sugar.Builder builder = SubstanceNucleicAcid.Subunit.Sugar.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -44227,7 +47043,11 @@ private SubstanceNucleicAcid.Subunit.Sugar parseSubstanceNucleicAcidSubunitSugar builder.residueSite(parseString("residueSite", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44244,6 +47064,7 @@ private SubstanceNucleicAcid.Subunit.Sugar parseSubstanceNucleicAcidSubunitSugar private SubstancePolymer parseSubstancePolymer(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstancePolymer.Builder builder = SubstancePolymer.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, copolymerConnectivityElementIndex = 0, modificationElementIndex = 0, monomerSetElementIndex = 0, repeatElementIndex = 0; while (reader.hasNext()) { @@ -44310,7 +47131,11 @@ private SubstancePolymer parseSubstancePolymer(java.lang.String elementName, XML builder.repeat(parseSubstancePolymerRepeat("repeat", reader, repeatElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44327,6 +47152,7 @@ private SubstancePolymer parseSubstancePolymer(java.lang.String elementName, XML private SubstancePolymer.MonomerSet parseSubstancePolymerMonomerSet(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstancePolymer.MonomerSet.Builder builder = SubstancePolymer.MonomerSet.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -44357,7 +47183,11 @@ private SubstancePolymer.MonomerSet parseSubstancePolymerMonomerSet(java.lang.St builder.startingMaterial(parseSubstancePolymerMonomerSetStartingMaterial("startingMaterial", reader, startingMaterialElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44374,6 +47204,7 @@ private SubstancePolymer.MonomerSet parseSubstancePolymerMonomerSet(java.lang.St private SubstancePolymer.MonomerSet.StartingMaterial parseSubstancePolymerMonomerSetStartingMaterial(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstancePolymer.MonomerSet.StartingMaterial.Builder builder = SubstancePolymer.MonomerSet.StartingMaterial.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -44412,7 +47243,11 @@ private SubstancePolymer.MonomerSet.StartingMaterial parseSubstancePolymerMonome builder.amount(parseSubstanceAmount("amount", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44429,6 +47264,7 @@ private SubstancePolymer.MonomerSet.StartingMaterial parseSubstancePolymerMonome private SubstancePolymer.Repeat parseSubstancePolymerRepeat(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstancePolymer.Repeat.Builder builder = SubstancePolymer.Repeat.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -44467,7 +47303,11 @@ private SubstancePolymer.Repeat parseSubstancePolymerRepeat(java.lang.String ele builder.repeatUnit(parseSubstancePolymerRepeatRepeatUnit("repeatUnit", reader, repeatUnitElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44484,6 +47324,7 @@ private SubstancePolymer.Repeat parseSubstancePolymerRepeat(java.lang.String ele private SubstancePolymer.Repeat.RepeatUnit parseSubstancePolymerRepeatRepeatUnit(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstancePolymer.Repeat.RepeatUnit.Builder builder = SubstancePolymer.Repeat.RepeatUnit.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -44526,7 +47367,11 @@ private SubstancePolymer.Repeat.RepeatUnit parseSubstancePolymerRepeatRepeatUnit builder.structuralRepresentation(parseSubstancePolymerRepeatRepeatUnitStructuralRepresentation("structuralRepresentation", reader, structuralRepresentationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44543,6 +47388,7 @@ private SubstancePolymer.Repeat.RepeatUnit parseSubstancePolymerRepeatRepeatUnit private SubstancePolymer.Repeat.RepeatUnit.DegreeOfPolymerisation parseSubstancePolymerRepeatRepeatUnitDegreeOfPolymerisation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstancePolymer.Repeat.RepeatUnit.DegreeOfPolymerisation.Builder builder = SubstancePolymer.Repeat.RepeatUnit.DegreeOfPolymerisation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -44573,7 +47419,11 @@ private SubstancePolymer.Repeat.RepeatUnit.DegreeOfPolymerisation parseSubstance builder.amount(parseSubstanceAmount("amount", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44590,6 +47440,7 @@ private SubstancePolymer.Repeat.RepeatUnit.DegreeOfPolymerisation parseSubstance private SubstancePolymer.Repeat.RepeatUnit.StructuralRepresentation parseSubstancePolymerRepeatRepeatUnitStructuralRepresentation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstancePolymer.Repeat.RepeatUnit.StructuralRepresentation.Builder builder = SubstancePolymer.Repeat.RepeatUnit.StructuralRepresentation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -44624,7 +47475,11 @@ private SubstancePolymer.Repeat.RepeatUnit.StructuralRepresentation parseSubstan builder.attachment(parseAttachment("attachment", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44641,6 +47496,7 @@ private SubstancePolymer.Repeat.RepeatUnit.StructuralRepresentation parseSubstan private SubstanceProtein parseSubstanceProtein(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceProtein.Builder builder = SubstanceProtein.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, disulfideLinkageElementIndex = 0, subunitElementIndex = 0; while (reader.hasNext()) { @@ -44699,7 +47555,11 @@ private SubstanceProtein parseSubstanceProtein(java.lang.String elementName, XML builder.subunit(parseSubstanceProteinSubunit("subunit", reader, subunitElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44716,6 +47576,7 @@ private SubstanceProtein parseSubstanceProtein(java.lang.String elementName, XML private SubstanceProtein.Subunit parseSubstanceProteinSubunit(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceProtein.Subunit.Builder builder = SubstanceProtein.Subunit.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -44770,7 +47631,11 @@ private SubstanceProtein.Subunit parseSubstanceProteinSubunit(java.lang.String e builder.cTerminalModification(parseString("cTerminalModification", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44787,6 +47652,7 @@ private SubstanceProtein.Subunit parseSubstanceProteinSubunit(java.lang.String e private SubstanceReferenceInformation parseSubstanceReferenceInformation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceReferenceInformation.Builder builder = SubstanceReferenceInformation.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, geneElementIndex = 0, geneElementElementIndex = 0, classificationElementIndex = 0, targetElementIndex = 0; while (reader.hasNext()) { @@ -44849,7 +47715,11 @@ private SubstanceReferenceInformation parseSubstanceReferenceInformation(java.la builder.target(parseSubstanceReferenceInformationTarget("target", reader, targetElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44866,6 +47736,7 @@ private SubstanceReferenceInformation parseSubstanceReferenceInformation(java.la private SubstanceReferenceInformation.Classification parseSubstanceReferenceInformationClassification(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceReferenceInformation.Classification.Builder builder = SubstanceReferenceInformation.Classification.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -44904,7 +47775,11 @@ private SubstanceReferenceInformation.Classification parseSubstanceReferenceInfo builder.source(parseReference("source", reader, sourceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44921,6 +47796,7 @@ private SubstanceReferenceInformation.Classification parseSubstanceReferenceInfo private SubstanceReferenceInformation.Gene parseSubstanceReferenceInformationGene(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceReferenceInformation.Gene.Builder builder = SubstanceReferenceInformation.Gene.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -44955,7 +47831,11 @@ private SubstanceReferenceInformation.Gene parseSubstanceReferenceInformationGen builder.source(parseReference("source", reader, sourceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -44972,6 +47852,7 @@ private SubstanceReferenceInformation.Gene parseSubstanceReferenceInformationGen private SubstanceReferenceInformation.GeneElement parseSubstanceReferenceInformationGeneElement(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceReferenceInformation.GeneElement.Builder builder = SubstanceReferenceInformation.GeneElement.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -45006,7 +47887,11 @@ private SubstanceReferenceInformation.GeneElement parseSubstanceReferenceInforma builder.source(parseReference("source", reader, sourceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45023,6 +47908,7 @@ private SubstanceReferenceInformation.GeneElement parseSubstanceReferenceInforma private SubstanceReferenceInformation.Target parseSubstanceReferenceInformationTarget(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceReferenceInformation.Target.Builder builder = SubstanceReferenceInformation.Target.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -45085,7 +47971,11 @@ private SubstanceReferenceInformation.Target parseSubstanceReferenceInformationT builder.source(parseReference("source", reader, sourceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45102,6 +47992,7 @@ private SubstanceReferenceInformation.Target parseSubstanceReferenceInformationT private SubstanceSourceMaterial parseSubstanceSourceMaterial(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSourceMaterial.Builder builder = SubstanceSourceMaterial.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, parentSubstanceIdElementIndex = 0, parentSubstanceNameElementIndex = 0, countryOfOriginElementIndex = 0, geographicalLocationElementIndex = 0, fractionDescriptionElementIndex = 0, partDescriptionElementIndex = 0; while (reader.hasNext()) { @@ -45196,7 +48087,11 @@ private SubstanceSourceMaterial parseSubstanceSourceMaterial(java.lang.String el builder.partDescription(parseSubstanceSourceMaterialPartDescription("partDescription", reader, partDescriptionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45213,6 +48108,7 @@ private SubstanceSourceMaterial parseSubstanceSourceMaterial(java.lang.String el private SubstanceSourceMaterial.FractionDescription parseSubstanceSourceMaterialFractionDescription(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSourceMaterial.FractionDescription.Builder builder = SubstanceSourceMaterial.FractionDescription.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -45243,7 +48139,11 @@ private SubstanceSourceMaterial.FractionDescription parseSubstanceSourceMaterial builder.materialType(parseCodeableConcept("materialType", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45260,6 +48160,7 @@ private SubstanceSourceMaterial.FractionDescription parseSubstanceSourceMaterial private SubstanceSourceMaterial.Organism parseSubstanceSourceMaterialOrganism(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSourceMaterial.Organism.Builder builder = SubstanceSourceMaterial.Organism.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -45314,7 +48215,11 @@ private SubstanceSourceMaterial.Organism parseSubstanceSourceMaterialOrganism(ja builder.organismGeneral(parseSubstanceSourceMaterialOrganismOrganismGeneral("organismGeneral", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45331,6 +48236,7 @@ private SubstanceSourceMaterial.Organism parseSubstanceSourceMaterialOrganism(ja private SubstanceSourceMaterial.Organism.Author parseSubstanceSourceMaterialOrganismAuthor(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSourceMaterial.Organism.Author.Builder builder = SubstanceSourceMaterial.Organism.Author.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -45361,7 +48267,11 @@ private SubstanceSourceMaterial.Organism.Author parseSubstanceSourceMaterialOrga builder.authorDescription(parseString("authorDescription", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45378,6 +48288,7 @@ private SubstanceSourceMaterial.Organism.Author parseSubstanceSourceMaterialOrga private SubstanceSourceMaterial.Organism.Hybrid parseSubstanceSourceMaterialOrganismHybrid(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSourceMaterial.Organism.Hybrid.Builder builder = SubstanceSourceMaterial.Organism.Hybrid.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -45420,7 +48331,11 @@ private SubstanceSourceMaterial.Organism.Hybrid parseSubstanceSourceMaterialOrga builder.hybridType(parseCodeableConcept("hybridType", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45437,6 +48352,7 @@ private SubstanceSourceMaterial.Organism.Hybrid parseSubstanceSourceMaterialOrga private SubstanceSourceMaterial.Organism.OrganismGeneral parseSubstanceSourceMaterialOrganismOrganismGeneral(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSourceMaterial.Organism.OrganismGeneral.Builder builder = SubstanceSourceMaterial.Organism.OrganismGeneral.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -45475,7 +48391,11 @@ private SubstanceSourceMaterial.Organism.OrganismGeneral parseSubstanceSourceMat builder.order(parseCodeableConcept("order", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45492,6 +48412,7 @@ private SubstanceSourceMaterial.Organism.OrganismGeneral parseSubstanceSourceMat private SubstanceSourceMaterial.PartDescription parseSubstanceSourceMaterialPartDescription(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSourceMaterial.PartDescription.Builder builder = SubstanceSourceMaterial.PartDescription.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -45522,7 +48443,11 @@ private SubstanceSourceMaterial.PartDescription parseSubstanceSourceMaterialPart builder.partLocation(parseCodeableConcept("partLocation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45539,6 +48464,7 @@ private SubstanceSourceMaterial.PartDescription parseSubstanceSourceMaterialPart private SubstanceSpecification parseSubstanceSpecification(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSpecification.Builder builder = SubstanceSpecification.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, sourceElementIndex = 0, moietyElementIndex = 0, propertyElementIndex = 0, codeElementIndex = 0, nameElementIndex = 0, molecularWeightElementIndex = 0, relationshipElementIndex = 0; while (reader.hasNext()) { @@ -45657,7 +48583,11 @@ private SubstanceSpecification parseSubstanceSpecification(java.lang.String elem builder.sourceMaterial(parseReference("sourceMaterial", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45674,6 +48604,7 @@ private SubstanceSpecification parseSubstanceSpecification(java.lang.String elem private SubstanceSpecification.Code parseSubstanceSpecificationCode(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSpecification.Code.Builder builder = SubstanceSpecification.Code.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -45716,7 +48647,11 @@ private SubstanceSpecification.Code parseSubstanceSpecificationCode(java.lang.St builder.source(parseReference("source", reader, sourceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45733,6 +48668,7 @@ private SubstanceSpecification.Code parseSubstanceSpecificationCode(java.lang.St private SubstanceSpecification.Moiety parseSubstanceSpecificationMoiety(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSpecification.Moiety.Builder builder = SubstanceSpecification.Moiety.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -45787,7 +48723,11 @@ private SubstanceSpecification.Moiety parseSubstanceSpecificationMoiety(java.lan builder.amount(parseString("amountString", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45804,6 +48744,7 @@ private SubstanceSpecification.Moiety parseSubstanceSpecificationMoiety(java.lan private SubstanceSpecification.Name parseSubstanceSpecificationName(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSpecification.Name.Builder builder = SubstanceSpecification.Name.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -45870,7 +48811,11 @@ private SubstanceSpecification.Name parseSubstanceSpecificationName(java.lang.St builder.source(parseReference("source", reader, sourceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45887,6 +48832,7 @@ private SubstanceSpecification.Name parseSubstanceSpecificationName(java.lang.St private SubstanceSpecification.Name.Official parseSubstanceSpecificationNameOfficial(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSpecification.Name.Official.Builder builder = SubstanceSpecification.Name.Official.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -45921,7 +48867,11 @@ private SubstanceSpecification.Name.Official parseSubstanceSpecificationNameOffi builder.date(parseDateTime("date", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -45938,6 +48888,7 @@ private SubstanceSpecification.Name.Official parseSubstanceSpecificationNameOffi private SubstanceSpecification.Property parseSubstanceSpecificationProperty(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSpecification.Property.Builder builder = SubstanceSpecification.Property.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -45988,7 +48939,11 @@ private SubstanceSpecification.Property parseSubstanceSpecificationProperty(java builder.amount(parseString("amountString", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -46005,6 +48960,7 @@ private SubstanceSpecification.Property parseSubstanceSpecificationProperty(java private SubstanceSpecification.Relationship parseSubstanceSpecificationRelationship(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSpecification.Relationship.Builder builder = SubstanceSpecification.Relationship.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -46071,7 +49027,11 @@ private SubstanceSpecification.Relationship parseSubstanceSpecificationRelations builder.source(parseReference("source", reader, sourceElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -46088,6 +49048,7 @@ private SubstanceSpecification.Relationship parseSubstanceSpecificationRelations private SubstanceSpecification.Structure parseSubstanceSpecificationStructure(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSpecification.Structure.Builder builder = SubstanceSpecification.Structure.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -46142,7 +49103,11 @@ private SubstanceSpecification.Structure parseSubstanceSpecificationStructure(ja builder.representation(parseSubstanceSpecificationStructureRepresentation("representation", reader, representationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -46159,6 +49124,7 @@ private SubstanceSpecification.Structure parseSubstanceSpecificationStructure(ja private SubstanceSpecification.Structure.Isotope parseSubstanceSpecificationStructureIsotope(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSpecification.Structure.Isotope.Builder builder = SubstanceSpecification.Structure.Isotope.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -46201,7 +49167,11 @@ private SubstanceSpecification.Structure.Isotope parseSubstanceSpecificationStru builder.molecularWeight(parseSubstanceSpecificationStructureIsotopeMolecularWeight("molecularWeight", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -46218,6 +49188,7 @@ private SubstanceSpecification.Structure.Isotope parseSubstanceSpecificationStru private SubstanceSpecification.Structure.Isotope.MolecularWeight parseSubstanceSpecificationStructureIsotopeMolecularWeight(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSpecification.Structure.Isotope.MolecularWeight.Builder builder = SubstanceSpecification.Structure.Isotope.MolecularWeight.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -46252,7 +49223,11 @@ private SubstanceSpecification.Structure.Isotope.MolecularWeight parseSubstanceS builder.amount(parseQuantity("amount", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -46269,6 +49244,7 @@ private SubstanceSpecification.Structure.Isotope.MolecularWeight parseSubstanceS private SubstanceSpecification.Structure.Representation parseSubstanceSpecificationStructureRepresentation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SubstanceSpecification.Structure.Representation.Builder builder = SubstanceSpecification.Structure.Representation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -46303,7 +49279,11 @@ private SubstanceSpecification.Structure.Representation parseSubstanceSpecificat builder.attachment(parseAttachment("attachment", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -46320,6 +49300,7 @@ private SubstanceSpecification.Structure.Representation parseSubstanceSpecificat private SupplyDelivery parseSupplyDelivery(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SupplyDelivery.Builder builder = SupplyDelivery.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, basedOnElementIndex = 0, partOfElementIndex = 0, receiverElementIndex = 0; while (reader.hasNext()) { @@ -46414,7 +49395,11 @@ private SupplyDelivery parseSupplyDelivery(java.lang.String elementName, XMLStre builder.receiver(parseReference("receiver", reader, receiverElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -46431,6 +49416,7 @@ private SupplyDelivery parseSupplyDelivery(java.lang.String elementName, XMLStre private SupplyDelivery.SuppliedItem parseSupplyDeliverySuppliedItem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SupplyDelivery.SuppliedItem.Builder builder = SupplyDelivery.SuppliedItem.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -46465,7 +49451,11 @@ private SupplyDelivery.SuppliedItem parseSupplyDeliverySuppliedItem(java.lang.St builder.item(parseReference("itemReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -46482,6 +49472,7 @@ private SupplyDelivery.SuppliedItem parseSupplyDeliverySuppliedItem(java.lang.St private SupplyRequest parseSupplyRequest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SupplyRequest.Builder builder = SupplyRequest.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, parameterElementIndex = 0, supplierElementIndex = 0, reasonCodeElementIndex = 0, reasonReferenceElementIndex = 0; while (reader.hasNext()) { @@ -46596,7 +49587,11 @@ private SupplyRequest parseSupplyRequest(java.lang.String elementName, XMLStream builder.deliverTo(parseReference("deliverTo", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -46613,6 +49608,7 @@ private SupplyRequest parseSupplyRequest(java.lang.String elementName, XMLStream private SupplyRequest.Parameter parseSupplyRequestParameter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); SupplyRequest.Parameter.Builder builder = SupplyRequest.Parameter.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -46655,7 +49651,11 @@ private SupplyRequest.Parameter parseSupplyRequestParameter(java.lang.String ele builder.value(parseBoolean("valueBoolean", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -46672,6 +49672,7 @@ private SupplyRequest.Parameter parseSupplyRequestParameter(java.lang.String ele private Task parseTask(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Task.Builder builder = Task.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, basedOnElementIndex = 0, partOfElementIndex = 0, performerTypeElementIndex = 0, insuranceElementIndex = 0, noteElementIndex = 0, relevantHistoryElementIndex = 0, inputElementIndex = 0, outputElementIndex = 0; while (reader.hasNext()) { @@ -46838,7 +49839,11 @@ private Task parseTask(java.lang.String elementName, XMLStreamReader reader, int builder.output(parseTaskOutput("output", reader, outputElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -46855,6 +49860,7 @@ private Task parseTask(java.lang.String elementName, XMLStreamReader reader, int private Task.Input parseTaskInput(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Task.Input.Builder builder = Task.Input.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -47081,7 +50087,11 @@ private Task.Input parseTaskInput(java.lang.String elementName, XMLStreamReader builder.value(parseMeta("valueMeta", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -47098,6 +50108,7 @@ private Task.Input parseTaskInput(java.lang.String elementName, XMLStreamReader private Task.Output parseTaskOutput(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Task.Output.Builder builder = Task.Output.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -47324,7 +50335,11 @@ private Task.Output parseTaskOutput(java.lang.String elementName, XMLStreamReade builder.value(parseMeta("valueMeta", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -47341,6 +50356,7 @@ private Task.Output parseTaskOutput(java.lang.String elementName, XMLStreamReade private Task.Restriction parseTaskRestriction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Task.Restriction.Builder builder = Task.Restriction.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -47375,7 +50391,11 @@ private Task.Restriction parseTaskRestriction(java.lang.String elementName, XMLS builder.recipient(parseReference("recipient", reader, recipientElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -47392,6 +50412,7 @@ private Task.Restriction parseTaskRestriction(java.lang.String elementName, XMLS private TerminologyCapabilities parseTerminologyCapabilities(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TerminologyCapabilities.Builder builder = TerminologyCapabilities.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, codeSystemElementIndex = 0; while (reader.hasNext()) { @@ -47530,7 +50551,11 @@ private TerminologyCapabilities parseTerminologyCapabilities(java.lang.String el builder.closure(parseTerminologyCapabilitiesClosure("closure", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -47547,6 +50572,7 @@ private TerminologyCapabilities parseTerminologyCapabilities(java.lang.String el private TerminologyCapabilities.Closure parseTerminologyCapabilitiesClosure(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TerminologyCapabilities.Closure.Builder builder = TerminologyCapabilities.Closure.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -47573,7 +50599,11 @@ private TerminologyCapabilities.Closure parseTerminologyCapabilitiesClosure(java builder.translation(parseBoolean("translation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -47590,6 +50620,7 @@ private TerminologyCapabilities.Closure parseTerminologyCapabilitiesClosure(java private TerminologyCapabilities.CodeSystem parseTerminologyCapabilitiesCodeSystem(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TerminologyCapabilities.CodeSystem.Builder builder = TerminologyCapabilities.CodeSystem.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -47624,7 +50655,11 @@ private TerminologyCapabilities.CodeSystem parseTerminologyCapabilitiesCodeSyste builder.subsumption(parseBoolean("subsumption", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -47641,6 +50676,7 @@ private TerminologyCapabilities.CodeSystem parseTerminologyCapabilitiesCodeSyste private TerminologyCapabilities.CodeSystem.Version parseTerminologyCapabilitiesCodeSystemVersion(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TerminologyCapabilities.CodeSystem.Version.Builder builder = TerminologyCapabilities.CodeSystem.Version.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -47687,7 +50723,11 @@ private TerminologyCapabilities.CodeSystem.Version parseTerminologyCapabilitiesC builder.property((Code) parseString(Code.builder(), "property", reader, propertyElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -47704,6 +50744,7 @@ private TerminologyCapabilities.CodeSystem.Version parseTerminologyCapabilitiesC private TerminologyCapabilities.CodeSystem.Version.Filter parseTerminologyCapabilitiesCodeSystemVersionFilter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TerminologyCapabilities.CodeSystem.Version.Filter.Builder builder = TerminologyCapabilities.CodeSystem.Version.Filter.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -47734,7 +50775,11 @@ private TerminologyCapabilities.CodeSystem.Version.Filter parseTerminologyCapabi builder.op((Code) parseString(Code.builder(), "op", reader, opElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -47751,6 +50796,7 @@ private TerminologyCapabilities.CodeSystem.Version.Filter parseTerminologyCapabi private TerminologyCapabilities.Expansion parseTerminologyCapabilitiesExpansion(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TerminologyCapabilities.Expansion.Builder builder = TerminologyCapabilities.Expansion.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -47793,7 +50839,11 @@ private TerminologyCapabilities.Expansion parseTerminologyCapabilitiesExpansion( builder.textFilter((Markdown) parseString(Markdown.builder(), "textFilter", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -47810,6 +50860,7 @@ private TerminologyCapabilities.Expansion parseTerminologyCapabilitiesExpansion( private TerminologyCapabilities.Expansion.Parameter parseTerminologyCapabilitiesExpansionParameter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TerminologyCapabilities.Expansion.Parameter.Builder builder = TerminologyCapabilities.Expansion.Parameter.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -47840,7 +50891,11 @@ private TerminologyCapabilities.Expansion.Parameter parseTerminologyCapabilities builder.documentation(parseString("documentation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -47857,6 +50912,7 @@ private TerminologyCapabilities.Expansion.Parameter parseTerminologyCapabilities private TerminologyCapabilities.Implementation parseTerminologyCapabilitiesImplementation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TerminologyCapabilities.Implementation.Builder builder = TerminologyCapabilities.Implementation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -47887,7 +50943,11 @@ private TerminologyCapabilities.Implementation parseTerminologyCapabilitiesImple builder.url((Url) parseUri(Url.builder(), "url", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -47904,6 +50964,7 @@ private TerminologyCapabilities.Implementation parseTerminologyCapabilitiesImple private TerminologyCapabilities.Software parseTerminologyCapabilitiesSoftware(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TerminologyCapabilities.Software.Builder builder = TerminologyCapabilities.Software.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -47934,7 +50995,11 @@ private TerminologyCapabilities.Software parseTerminologyCapabilitiesSoftware(ja builder.version(parseString("version", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -47951,6 +51016,7 @@ private TerminologyCapabilities.Software parseTerminologyCapabilitiesSoftware(ja private TerminologyCapabilities.Translation parseTerminologyCapabilitiesTranslation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TerminologyCapabilities.Translation.Builder builder = TerminologyCapabilities.Translation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -47977,7 +51043,11 @@ private TerminologyCapabilities.Translation parseTerminologyCapabilitiesTranslat builder.needsMap(parseBoolean("needsMap", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -47994,6 +51064,7 @@ private TerminologyCapabilities.Translation parseTerminologyCapabilitiesTranslat private TerminologyCapabilities.ValidateCode parseTerminologyCapabilitiesValidateCode(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TerminologyCapabilities.ValidateCode.Builder builder = TerminologyCapabilities.ValidateCode.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48020,7 +51091,11 @@ private TerminologyCapabilities.ValidateCode parseTerminologyCapabilitiesValidat builder.translations(parseBoolean("translations", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48037,6 +51112,7 @@ private TerminologyCapabilities.ValidateCode parseTerminologyCapabilitiesValidat private TestReport parseTestReport(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestReport.Builder builder = TestReport.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, participantElementIndex = 0, testElementIndex = 0; while (reader.hasNext()) { @@ -48127,7 +51203,11 @@ private TestReport parseTestReport(java.lang.String elementName, XMLStreamReader builder.teardown(parseTestReportTeardown("teardown", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48144,6 +51224,7 @@ private TestReport parseTestReport(java.lang.String elementName, XMLStreamReader private TestReport.Participant parseTestReportParticipant(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestReport.Participant.Builder builder = TestReport.Participant.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48178,7 +51259,11 @@ private TestReport.Participant parseTestReportParticipant(java.lang.String eleme builder.display(parseString("display", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48195,6 +51280,7 @@ private TestReport.Participant parseTestReportParticipant(java.lang.String eleme private TestReport.Setup parseTestReportSetup(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestReport.Setup.Builder builder = TestReport.Setup.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48221,7 +51307,11 @@ private TestReport.Setup parseTestReportSetup(java.lang.String elementName, XMLS builder.action(parseTestReportSetupAction("action", reader, actionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48238,6 +51328,7 @@ private TestReport.Setup parseTestReportSetup(java.lang.String elementName, XMLS private TestReport.Setup.Action parseTestReportSetupAction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestReport.Setup.Action.Builder builder = TestReport.Setup.Action.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48268,7 +51359,11 @@ private TestReport.Setup.Action parseTestReportSetupAction(java.lang.String elem builder._assert(parseTestReportSetupActionAssert("assert", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48285,6 +51380,7 @@ private TestReport.Setup.Action parseTestReportSetupAction(java.lang.String elem private TestReport.Setup.Action.Assert parseTestReportSetupActionAssert(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestReport.Setup.Action.Assert.Builder builder = TestReport.Setup.Action.Assert.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48319,7 +51415,11 @@ private TestReport.Setup.Action.Assert parseTestReportSetupActionAssert(java.lan builder.detail(parseString("detail", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48336,6 +51436,7 @@ private TestReport.Setup.Action.Assert parseTestReportSetupActionAssert(java.lan private TestReport.Setup.Action.Operation parseTestReportSetupActionOperation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestReport.Setup.Action.Operation.Builder builder = TestReport.Setup.Action.Operation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48370,7 +51471,11 @@ private TestReport.Setup.Action.Operation parseTestReportSetupActionOperation(ja builder.detail(parseUri("detail", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48387,6 +51492,7 @@ private TestReport.Setup.Action.Operation parseTestReportSetupActionOperation(ja private TestReport.Teardown parseTestReportTeardown(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestReport.Teardown.Builder builder = TestReport.Teardown.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48413,7 +51519,11 @@ private TestReport.Teardown parseTestReportTeardown(java.lang.String elementName builder.action(parseTestReportTeardownAction("action", reader, actionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48430,6 +51540,7 @@ private TestReport.Teardown parseTestReportTeardown(java.lang.String elementName private TestReport.Teardown.Action parseTestReportTeardownAction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestReport.Teardown.Action.Builder builder = TestReport.Teardown.Action.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48456,7 +51567,11 @@ private TestReport.Teardown.Action parseTestReportTeardownAction(java.lang.Strin builder.operation(parseTestReportSetupActionOperation("operation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48473,6 +51588,7 @@ private TestReport.Teardown.Action parseTestReportTeardownAction(java.lang.Strin private TestReport.Test parseTestReportTest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestReport.Test.Builder builder = TestReport.Test.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48507,7 +51623,11 @@ private TestReport.Test parseTestReportTest(java.lang.String elementName, XMLStr builder.action(parseTestReportTestAction("action", reader, actionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48524,6 +51644,7 @@ private TestReport.Test parseTestReportTest(java.lang.String elementName, XMLStr private TestReport.Test.Action parseTestReportTestAction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestReport.Test.Action.Builder builder = TestReport.Test.Action.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48554,7 +51675,11 @@ private TestReport.Test.Action parseTestReportTestAction(java.lang.String elemen builder._assert(parseTestReportSetupActionAssert("assert", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48571,6 +51696,7 @@ private TestReport.Test.Action parseTestReportTestAction(java.lang.String elemen private TestScript parseTestScript(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Builder builder = TestScript.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0, originElementIndex = 0, destinationElementIndex = 0, fixtureElementIndex = 0, profileElementIndex = 0, variableElementIndex = 0, testElementIndex = 0; while (reader.hasNext()) { @@ -48709,7 +51835,11 @@ private TestScript parseTestScript(java.lang.String elementName, XMLStreamReader builder.teardown(parseTestScriptTeardown("teardown", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48726,6 +51856,7 @@ private TestScript parseTestScript(java.lang.String elementName, XMLStreamReader private TestScript.Destination parseTestScriptDestination(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Destination.Builder builder = TestScript.Destination.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48756,7 +51887,11 @@ private TestScript.Destination parseTestScriptDestination(java.lang.String eleme builder.profile(parseCoding("profile", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48773,6 +51908,7 @@ private TestScript.Destination parseTestScriptDestination(java.lang.String eleme private TestScript.Fixture parseTestScriptFixture(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Fixture.Builder builder = TestScript.Fixture.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48807,7 +51943,11 @@ private TestScript.Fixture parseTestScriptFixture(java.lang.String elementName, builder.resource(parseReference("resource", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48824,6 +51964,7 @@ private TestScript.Fixture parseTestScriptFixture(java.lang.String elementName, private TestScript.Metadata parseTestScriptMetadata(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Metadata.Builder builder = TestScript.Metadata.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48854,7 +51995,11 @@ private TestScript.Metadata parseTestScriptMetadata(java.lang.String elementName builder.capability(parseTestScriptMetadataCapability("capability", reader, capabilityElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48871,6 +52016,7 @@ private TestScript.Metadata parseTestScriptMetadata(java.lang.String elementName private TestScript.Metadata.Capability parseTestScriptMetadataCapability(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Metadata.Capability.Builder builder = TestScript.Metadata.Capability.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48921,7 +52067,11 @@ private TestScript.Metadata.Capability parseTestScriptMetadataCapability(java.la builder.capabilities((Canonical) parseUri(Canonical.builder(), "capabilities", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48938,6 +52088,7 @@ private TestScript.Metadata.Capability parseTestScriptMetadataCapability(java.la private TestScript.Metadata.Link parseTestScriptMetadataLink(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Metadata.Link.Builder builder = TestScript.Metadata.Link.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -48968,7 +52119,11 @@ private TestScript.Metadata.Link parseTestScriptMetadataLink(java.lang.String el builder.description(parseString("description", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -48985,6 +52140,7 @@ private TestScript.Metadata.Link parseTestScriptMetadataLink(java.lang.String el private TestScript.Origin parseTestScriptOrigin(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Origin.Builder builder = TestScript.Origin.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49015,7 +52171,11 @@ private TestScript.Origin parseTestScriptOrigin(java.lang.String elementName, XM builder.profile(parseCoding("profile", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49032,6 +52192,7 @@ private TestScript.Origin parseTestScriptOrigin(java.lang.String elementName, XM private TestScript.Setup parseTestScriptSetup(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Setup.Builder builder = TestScript.Setup.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49058,7 +52219,11 @@ private TestScript.Setup parseTestScriptSetup(java.lang.String elementName, XMLS builder.action(parseTestScriptSetupAction("action", reader, actionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49075,6 +52240,7 @@ private TestScript.Setup parseTestScriptSetup(java.lang.String elementName, XMLS private TestScript.Setup.Action parseTestScriptSetupAction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Setup.Action.Builder builder = TestScript.Setup.Action.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49105,7 +52271,11 @@ private TestScript.Setup.Action parseTestScriptSetupAction(java.lang.String elem builder._assert(parseTestScriptSetupActionAssert("assert", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49122,6 +52292,7 @@ private TestScript.Setup.Action parseTestScriptSetupAction(java.lang.String elem private TestScript.Setup.Action.Assert parseTestScriptSetupActionAssert(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Setup.Action.Assert.Builder builder = TestScript.Setup.Action.Assert.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49232,7 +52403,11 @@ private TestScript.Setup.Action.Assert parseTestScriptSetupActionAssert(java.lan builder.warningOnly(parseBoolean("warningOnly", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49249,6 +52424,7 @@ private TestScript.Setup.Action.Assert parseTestScriptSetupActionAssert(java.lan private TestScript.Setup.Action.Operation parseTestScriptSetupActionOperation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Setup.Action.Operation.Builder builder = TestScript.Setup.Action.Operation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49339,7 +52515,11 @@ private TestScript.Setup.Action.Operation parseTestScriptSetupActionOperation(ja builder.url(parseString("url", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49356,6 +52536,7 @@ private TestScript.Setup.Action.Operation parseTestScriptSetupActionOperation(ja private TestScript.Setup.Action.Operation.RequestHeader parseTestScriptSetupActionOperationRequestHeader(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Setup.Action.Operation.RequestHeader.Builder builder = TestScript.Setup.Action.Operation.RequestHeader.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49386,7 +52567,11 @@ private TestScript.Setup.Action.Operation.RequestHeader parseTestScriptSetupActi builder.value(parseString("value", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49403,6 +52588,7 @@ private TestScript.Setup.Action.Operation.RequestHeader parseTestScriptSetupActi private TestScript.Teardown parseTestScriptTeardown(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Teardown.Builder builder = TestScript.Teardown.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49429,7 +52615,11 @@ private TestScript.Teardown parseTestScriptTeardown(java.lang.String elementName builder.action(parseTestScriptTeardownAction("action", reader, actionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49446,6 +52636,7 @@ private TestScript.Teardown parseTestScriptTeardown(java.lang.String elementName private TestScript.Teardown.Action parseTestScriptTeardownAction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Teardown.Action.Builder builder = TestScript.Teardown.Action.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49472,7 +52663,11 @@ private TestScript.Teardown.Action parseTestScriptTeardownAction(java.lang.Strin builder.operation(parseTestScriptSetupActionOperation("operation", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49489,6 +52684,7 @@ private TestScript.Teardown.Action parseTestScriptTeardownAction(java.lang.Strin private TestScript.Test parseTestScriptTest(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Test.Builder builder = TestScript.Test.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49523,7 +52719,11 @@ private TestScript.Test parseTestScriptTest(java.lang.String elementName, XMLStr builder.action(parseTestScriptTestAction("action", reader, actionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49540,6 +52740,7 @@ private TestScript.Test parseTestScriptTest(java.lang.String elementName, XMLStr private TestScript.Test.Action parseTestScriptTestAction(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Test.Action.Builder builder = TestScript.Test.Action.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49570,7 +52771,11 @@ private TestScript.Test.Action parseTestScriptTestAction(java.lang.String elemen builder._assert(parseTestScriptSetupActionAssert("assert", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49587,6 +52792,7 @@ private TestScript.Test.Action parseTestScriptTestAction(java.lang.String elemen private TestScript.Variable parseTestScriptVariable(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TestScript.Variable.Builder builder = TestScript.Variable.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49641,7 +52847,11 @@ private TestScript.Variable parseTestScriptVariable(java.lang.String elementName builder.sourceId((Id) parseString(Id.builder(), "sourceId", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49658,6 +52868,7 @@ private TestScript.Variable parseTestScriptVariable(java.lang.String elementName private Time parseTime(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Time.Builder builder = Time.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49680,7 +52891,11 @@ private Time parseTime(java.lang.String elementName, XMLStreamReader reader, int builder.extension(parseExtension("extension", reader, extensionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49697,6 +52912,7 @@ private Time parseTime(java.lang.String elementName, XMLStreamReader reader, int private Timing parseTiming(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Timing.Builder builder = Timing.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49731,7 +52947,11 @@ private Timing parseTiming(java.lang.String elementName, XMLStreamReader reader, builder.code(parseCodeableConcept("code", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49748,6 +52968,7 @@ private Timing parseTiming(java.lang.String elementName, XMLStreamReader reader, private Timing.Repeat parseTimingRepeat(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Timing.Repeat.Builder builder = Timing.Repeat.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49838,7 +53059,11 @@ private Timing.Repeat parseTimingRepeat(java.lang.String elementName, XMLStreamR builder.offset((UnsignedInt) parseInteger(UnsignedInt.builder(), "offset", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49855,6 +53080,7 @@ private Timing.Repeat parseTimingRepeat(java.lang.String elementName, XMLStreamR private TriggerDefinition parseTriggerDefinition(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); TriggerDefinition.Builder builder = TriggerDefinition.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49905,7 +53131,11 @@ private TriggerDefinition parseTriggerDefinition(java.lang.String elementName, X builder.condition(parseExpression("condition", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49921,6 +53151,7 @@ private TriggerDefinition parseTriggerDefinition(java.lang.String elementName, X private Uri parseUri(Uri.Builder builder, java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -49943,7 +53174,11 @@ private Uri parseUri(Uri.Builder builder, java.lang.String elementName, XMLStrea builder.extension(parseExtension("extension", reader, extensionElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -49964,6 +53199,7 @@ private Uri parseUri(java.lang.String elementName, XMLStreamReader reader, int e private UsageContext parseUsageContext(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); UsageContext.Builder builder = UsageContext.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -50002,7 +53238,11 @@ private UsageContext parseUsageContext(java.lang.String elementName, XMLStreamRe builder.value(parseReference("valueReference", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50019,6 +53259,7 @@ private UsageContext parseUsageContext(java.lang.String elementName, XMLStreamRe private ValueSet parseValueSet(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ValueSet.Builder builder = ValueSet.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, contactElementIndex = 0, useContextElementIndex = 0, jurisdictionElementIndex = 0; while (reader.hasNext()) { @@ -50133,7 +53374,11 @@ private ValueSet parseValueSet(java.lang.String elementName, XMLStreamReader rea builder.expansion(parseValueSetExpansion("expansion", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50150,6 +53395,7 @@ private ValueSet parseValueSet(java.lang.String elementName, XMLStreamReader rea private ValueSet.Compose parseValueSetCompose(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ValueSet.Compose.Builder builder = ValueSet.Compose.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -50188,7 +53434,11 @@ private ValueSet.Compose parseValueSetCompose(java.lang.String elementName, XMLS builder.exclude(parseValueSetComposeInclude("exclude", reader, excludeElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50205,6 +53455,7 @@ private ValueSet.Compose parseValueSetCompose(java.lang.String elementName, XMLS private ValueSet.Compose.Include parseValueSetComposeInclude(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ValueSet.Compose.Include.Builder builder = ValueSet.Compose.Include.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -50247,7 +53498,11 @@ private ValueSet.Compose.Include parseValueSetComposeInclude(java.lang.String el builder.valueSet((Canonical) parseUri(Canonical.builder(), "valueSet", reader, valueSetElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50264,6 +53519,7 @@ private ValueSet.Compose.Include parseValueSetComposeInclude(java.lang.String el private ValueSet.Compose.Include.Concept parseValueSetComposeIncludeConcept(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ValueSet.Compose.Include.Concept.Builder builder = ValueSet.Compose.Include.Concept.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -50298,7 +53554,11 @@ private ValueSet.Compose.Include.Concept parseValueSetComposeIncludeConcept(java builder.designation(parseValueSetComposeIncludeConceptDesignation("designation", reader, designationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50315,6 +53575,7 @@ private ValueSet.Compose.Include.Concept parseValueSetComposeIncludeConcept(java private ValueSet.Compose.Include.Concept.Designation parseValueSetComposeIncludeConceptDesignation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ValueSet.Compose.Include.Concept.Designation.Builder builder = ValueSet.Compose.Include.Concept.Designation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -50349,7 +53610,11 @@ private ValueSet.Compose.Include.Concept.Designation parseValueSetComposeInclude builder.value(parseString("value", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50366,6 +53631,7 @@ private ValueSet.Compose.Include.Concept.Designation parseValueSetComposeInclude private ValueSet.Compose.Include.Filter parseValueSetComposeIncludeFilter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ValueSet.Compose.Include.Filter.Builder builder = ValueSet.Compose.Include.Filter.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -50400,7 +53666,11 @@ private ValueSet.Compose.Include.Filter parseValueSetComposeIncludeFilter(java.l builder.value(parseString("value", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50417,6 +53687,7 @@ private ValueSet.Compose.Include.Filter parseValueSetComposeIncludeFilter(java.l private ValueSet.Expansion parseValueSetExpansion(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ValueSet.Expansion.Builder builder = ValueSet.Expansion.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -50463,7 +53734,11 @@ private ValueSet.Expansion parseValueSetExpansion(java.lang.String elementName, builder.contains(parseValueSetExpansionContains("contains", reader, containsElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50480,6 +53755,7 @@ private ValueSet.Expansion parseValueSetExpansion(java.lang.String elementName, private ValueSet.Expansion.Contains parseValueSetExpansionContains(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ValueSet.Expansion.Contains.Builder builder = ValueSet.Expansion.Contains.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -50534,7 +53810,11 @@ private ValueSet.Expansion.Contains parseValueSetExpansionContains(java.lang.Str builder.contains(parseValueSetExpansionContains("contains", reader, containsElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50551,6 +53831,7 @@ private ValueSet.Expansion.Contains parseValueSetExpansionContains(java.lang.Str private ValueSet.Expansion.Parameter parseValueSetExpansionParameter(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); ValueSet.Expansion.Parameter.Builder builder = ValueSet.Expansion.Parameter.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -50605,7 +53886,11 @@ private ValueSet.Expansion.Parameter parseValueSetExpansionParameter(java.lang.S builder.value(parseDateTime("valueDateTime", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50622,6 +53907,7 @@ private ValueSet.Expansion.Parameter parseValueSetExpansionParameter(java.lang.S private VerificationResult parseVerificationResult(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); VerificationResult.Builder builder = VerificationResult.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, targetElementIndex = 0, targetLocationElementIndex = 0, validationProcessElementIndex = 0, primarySourceElementIndex = 0, validatorElementIndex = 0; while (reader.hasNext()) { @@ -50720,7 +54006,11 @@ private VerificationResult parseVerificationResult(java.lang.String elementName, builder.validator(parseVerificationResultValidator("validator", reader, validatorElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50737,6 +54027,7 @@ private VerificationResult parseVerificationResult(java.lang.String elementName, private VerificationResult.Attestation parseVerificationResultAttestation(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); VerificationResult.Attestation.Builder builder = VerificationResult.Attestation.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -50791,7 +54082,11 @@ private VerificationResult.Attestation parseVerificationResultAttestation(java.l builder.sourceSignature(parseSignature("sourceSignature", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50808,6 +54103,7 @@ private VerificationResult.Attestation parseVerificationResultAttestation(java.l private VerificationResult.PrimarySource parseVerificationResultPrimarySource(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); VerificationResult.PrimarySource.Builder builder = VerificationResult.PrimarySource.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -50858,7 +54154,11 @@ private VerificationResult.PrimarySource parseVerificationResultPrimarySource(ja builder.pushTypeAvailable(parseCodeableConcept("pushTypeAvailable", reader, pushTypeAvailableElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50875,6 +54175,7 @@ private VerificationResult.PrimarySource parseVerificationResultPrimarySource(ja private VerificationResult.Validator parseVerificationResultValidator(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); VerificationResult.Validator.Builder builder = VerificationResult.Validator.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -50909,7 +54210,11 @@ private VerificationResult.Validator parseVerificationResultValidator(java.lang. builder.attestationSignature(parseSignature("attestationSignature", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -50926,6 +54231,7 @@ private VerificationResult.Validator parseVerificationResultValidator(java.lang. private VisionPrescription parseVisionPrescription(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); VisionPrescription.Builder builder = VisionPrescription.builder(); + builder.setValidating(validating); int position = -1; int containedElementIndex = 0, extensionElementIndex = 0, modifierExtensionElementIndex = 0, identifierElementIndex = 0, lensSpecificationElementIndex = 0; while (reader.hasNext()) { @@ -51000,7 +54306,11 @@ private VisionPrescription parseVisionPrescription(java.lang.String elementName, builder.lensSpecification(parseVisionPrescriptionLensSpecification("lensSpecification", reader, lensSpecificationElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -51017,6 +54327,7 @@ private VisionPrescription parseVisionPrescription(java.lang.String elementName, private VisionPrescription.LensSpecification parseVisionPrescriptionLensSpecification(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); VisionPrescription.LensSpecification.Builder builder = VisionPrescription.LensSpecification.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -51095,7 +54406,11 @@ private VisionPrescription.LensSpecification parseVisionPrescriptionLensSpecific builder.note(parseAnnotation("note", reader, noteElementIndex++)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -51112,6 +54427,7 @@ private VisionPrescription.LensSpecification parseVisionPrescriptionLensSpecific private VisionPrescription.LensSpecification.Prism parseVisionPrescriptionLensSpecificationPrism(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); VisionPrescription.LensSpecification.Prism.Builder builder = VisionPrescription.LensSpecification.Prism.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); @@ -51142,7 +54458,11 @@ private VisionPrescription.LensSpecification.Prism parseVisionPrescriptionLensSp builder.base((VisionBase) parseString(VisionBase.builder(), "base", reader, -1)); break; default: - throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + if (!ignoringUnrecognizedElements) { + throw new IllegalArgumentException("Unrecognized element: '" + localName + "'"); + } + reader.nextTag(); + break; } break; case XMLStreamReader.END_ELEMENT: @@ -51159,6 +54479,7 @@ private VisionPrescription.LensSpecification.Prism parseVisionPrescriptionLensSp private Xhtml parseXhtml(java.lang.String elementName, XMLStreamReader reader, int elementIndex) throws XMLStreamException { stackPush(elementName, elementIndex); Xhtml.Builder builder = Xhtml.builder(); + builder.setValidating(validating); java.lang.String id = reader.getAttributeValue(null, "id"); if (id != null) { builder.id(id); diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/patch/FHIRJsonPatch.java b/fhir-model/src/main/java/com/ibm/fhir/model/patch/FHIRJsonPatch.java index 3ee1ea87d7e..10b03e10522 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/patch/FHIRJsonPatch.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/patch/FHIRJsonPatch.java @@ -1,5 +1,5 @@ /* - * (C) Copyright IBM Corp. 2019 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ @@ -8,11 +8,11 @@ import java.util.Objects; -import javax.json.JsonArray; -import javax.json.JsonException; -import javax.json.JsonObject; -import javax.json.JsonPatch; -import javax.json.spi.JsonProvider; +import jakarta.json.JsonArray; +import jakarta.json.JsonException; +import jakarta.json.JsonObject; +import jakarta.json.JsonPatch; +import jakarta.json.spi.JsonProvider; import com.ibm.fhir.model.format.Format; import com.ibm.fhir.model.generator.exception.FHIRGeneratorException; diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/patch/FHIRPatch.java b/fhir-model/src/main/java/com/ibm/fhir/model/patch/FHIRPatch.java index c9683da440d..a683183d318 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/patch/FHIRPatch.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/patch/FHIRPatch.java @@ -1,13 +1,13 @@ /* - * (C) Copyright IBM Corp. 2019 + * (C) Copyright IBM Corp. 2019, 2021 * * SPDX-License-Identifier: Apache-2.0 */ package com.ibm.fhir.model.patch; -import javax.json.JsonArray; -import javax.json.JsonPatch; +import jakarta.json.JsonArray; +import jakarta.json.JsonPatch; import com.ibm.fhir.model.patch.exception.FHIRPatchException; import com.ibm.fhir.model.resource.Resource; diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Account.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Account.java index 832fc223929..3f401518c88 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Account.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Account.java @@ -89,20 +89,17 @@ public class Account extends DomainResource { private Account(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; type = builder.type; name = builder.name; - subject = Collections.unmodifiableList(ValidationSupport.checkList(builder.subject, "subject", Reference.class)); + subject = Collections.unmodifiableList(builder.subject); servicePeriod = builder.servicePeriod; - coverage = Collections.unmodifiableList(ValidationSupport.checkList(builder.coverage, "coverage", Coverage.class)); + coverage = Collections.unmodifiableList(builder.coverage); owner = builder.owner; description = builder.description; - guarantor = Collections.unmodifiableList(ValidationSupport.checkList(builder.guarantor, "guarantor", Guarantor.class)); + guarantor = Collections.unmodifiableList(builder.guarantor); partOf = builder.partOf; - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Device", "Practitioner", "PractitionerRole", "Location", "HealthcareService", "Organization"); - ValidationSupport.checkReferenceType(owner, "owner", "Organization"); - ValidationSupport.checkReferenceType(partOf, "partOf", "Account"); } /** @@ -839,7 +836,23 @@ public Builder partOf(Reference partOf) { */ @Override public Account build() { - return new Account(this); + Account account = new Account(this); + if (validating) { + validate(account); + } + return account; + } + + protected void validate(Account account) { + super.validate(account); + ValidationSupport.checkList(account.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(account.status, "status"); + ValidationSupport.checkList(account.subject, "subject", Reference.class); + ValidationSupport.checkList(account.coverage, "coverage", Coverage.class); + ValidationSupport.checkList(account.guarantor, "guarantor", Guarantor.class); + ValidationSupport.checkReferenceType(account.subject, "subject", "Patient", "Device", "Practitioner", "PractitionerRole", "Location", "HealthcareService", "Organization"); + ValidationSupport.checkReferenceType(account.owner, "owner", "Organization"); + ValidationSupport.checkReferenceType(account.partOf, "partOf", "Account"); } protected Builder from(Account account) { @@ -873,10 +886,8 @@ public static class Coverage extends BackboneElement { private Coverage(Builder builder) { super(builder); - coverage = ValidationSupport.requireNonNull(builder.coverage, "coverage"); + coverage = builder.coverage; priority = builder.priority; - ValidationSupport.checkReferenceType(coverage, "coverage", "Coverage"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1130,7 +1141,18 @@ public Builder priority(PositiveInt priority) { */ @Override public Coverage build() { - return new Coverage(this); + Coverage coverage = new Coverage(this); + if (validating) { + validate(coverage); + } + return coverage; + } + + protected void validate(Coverage coverage) { + super.validate(coverage); + ValidationSupport.requireNonNull(coverage.coverage, "coverage"); + ValidationSupport.checkReferenceType(coverage.coverage, "coverage", "Coverage"); + ValidationSupport.requireValueOrChildren(coverage); } protected Builder from(Coverage coverage) { @@ -1154,11 +1176,9 @@ public static class Guarantor extends BackboneElement { private Guarantor(Builder builder) { super(builder); - party = ValidationSupport.requireNonNull(builder.party, "party"); + party = builder.party; onHold = builder.onHold; period = builder.period; - ValidationSupport.checkReferenceType(party, "party", "Patient", "RelatedPerson", "Organization"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1437,7 +1457,18 @@ public Builder period(Period period) { */ @Override public Guarantor build() { - return new Guarantor(this); + Guarantor guarantor = new Guarantor(this); + if (validating) { + validate(guarantor); + } + return guarantor; + } + + protected void validate(Guarantor guarantor) { + super.validate(guarantor); + ValidationSupport.requireNonNull(guarantor.party, "party"); + ValidationSupport.checkReferenceType(guarantor.party, "party", "Patient", "RelatedPerson", "Organization"); + ValidationSupport.requireValueOrChildren(guarantor); } protected Builder from(Guarantor guarantor) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ActivityDefinition.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ActivityDefinition.java index 61bc9b06216..9573e0d945f 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ActivityDefinition.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ActivityDefinition.java @@ -230,57 +230,51 @@ public class ActivityDefinition extends DomainResource { private ActivityDefinition(Builder builder) { super(builder); url = builder.url; - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); version = builder.version; name = builder.name; title = builder.title; subtitle = builder.subtitle; - status = ValidationSupport.requireNonNull(builder.status, "status"); + status = builder.status; experimental = builder.experimental; - subject = ValidationSupport.choiceElement(builder.subject, "subject", CodeableConcept.class, Reference.class); + subject = builder.subject; date = builder.date; publisher = builder.publisher; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactDetail.class)); + contact = Collections.unmodifiableList(builder.contact); description = builder.description; - useContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.useContext, "useContext", UsageContext.class)); - jurisdiction = Collections.unmodifiableList(ValidationSupport.checkList(builder.jurisdiction, "jurisdiction", CodeableConcept.class)); + useContext = Collections.unmodifiableList(builder.useContext); + jurisdiction = Collections.unmodifiableList(builder.jurisdiction); purpose = builder.purpose; usage = builder.usage; copyright = builder.copyright; approvalDate = builder.approvalDate; lastReviewDate = builder.lastReviewDate; effectivePeriod = builder.effectivePeriod; - topic = Collections.unmodifiableList(ValidationSupport.checkList(builder.topic, "topic", CodeableConcept.class)); - author = Collections.unmodifiableList(ValidationSupport.checkList(builder.author, "author", ContactDetail.class)); - editor = Collections.unmodifiableList(ValidationSupport.checkList(builder.editor, "editor", ContactDetail.class)); - reviewer = Collections.unmodifiableList(ValidationSupport.checkList(builder.reviewer, "reviewer", ContactDetail.class)); - endorser = Collections.unmodifiableList(ValidationSupport.checkList(builder.endorser, "endorser", ContactDetail.class)); - relatedArtifact = Collections.unmodifiableList(ValidationSupport.checkList(builder.relatedArtifact, "relatedArtifact", RelatedArtifact.class)); - library = Collections.unmodifiableList(ValidationSupport.checkList(builder.library, "library", Canonical.class)); + topic = Collections.unmodifiableList(builder.topic); + author = Collections.unmodifiableList(builder.author); + editor = Collections.unmodifiableList(builder.editor); + reviewer = Collections.unmodifiableList(builder.reviewer); + endorser = Collections.unmodifiableList(builder.endorser); + relatedArtifact = Collections.unmodifiableList(builder.relatedArtifact); + library = Collections.unmodifiableList(builder.library); kind = builder.kind; profile = builder.profile; code = builder.code; intent = builder.intent; priority = builder.priority; doNotPerform = builder.doNotPerform; - timing = ValidationSupport.choiceElement(builder.timing, "timing", Timing.class, DateTime.class, Age.class, Period.class, Range.class, Duration.class); + timing = builder.timing; location = builder.location; - participant = Collections.unmodifiableList(ValidationSupport.checkList(builder.participant, "participant", Participant.class)); - product = ValidationSupport.choiceElement(builder.product, "product", Reference.class, CodeableConcept.class); + participant = Collections.unmodifiableList(builder.participant); + product = builder.product; quantity = builder.quantity; - dosage = Collections.unmodifiableList(ValidationSupport.checkList(builder.dosage, "dosage", Dosage.class)); - bodySite = Collections.unmodifiableList(ValidationSupport.checkList(builder.bodySite, "bodySite", CodeableConcept.class)); - specimenRequirement = Collections.unmodifiableList(ValidationSupport.checkList(builder.specimenRequirement, "specimenRequirement", Reference.class)); - observationRequirement = Collections.unmodifiableList(ValidationSupport.checkList(builder.observationRequirement, "observationRequirement", Reference.class)); - observationResultRequirement = Collections.unmodifiableList(ValidationSupport.checkList(builder.observationResultRequirement, "observationResultRequirement", Reference.class)); + dosage = Collections.unmodifiableList(builder.dosage); + bodySite = Collections.unmodifiableList(builder.bodySite); + specimenRequirement = Collections.unmodifiableList(builder.specimenRequirement); + observationRequirement = Collections.unmodifiableList(builder.observationRequirement); + observationResultRequirement = Collections.unmodifiableList(builder.observationResultRequirement); transform = builder.transform; - dynamicValue = Collections.unmodifiableList(ValidationSupport.checkList(builder.dynamicValue, "dynamicValue", DynamicValue.class)); - ValidationSupport.checkReferenceType(subject, "subject", "Group"); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.checkReferenceType(product, "product", "Medication", "Substance"); - ValidationSupport.checkReferenceType(specimenRequirement, "specimenRequirement", "SpecimenDefinition"); - ValidationSupport.checkReferenceType(observationRequirement, "observationRequirement", "ObservationDefinition"); - ValidationSupport.checkReferenceType(observationResultRequirement, "observationResultRequirement", "ObservationDefinition"); + dynamicValue = Collections.unmodifiableList(builder.dynamicValue); } /** @@ -2399,7 +2393,43 @@ public Builder dynamicValue(Collection dynamicValue) { */ @Override public ActivityDefinition build() { - return new ActivityDefinition(this); + ActivityDefinition activityDefinition = new ActivityDefinition(this); + if (validating) { + validate(activityDefinition); + } + return activityDefinition; + } + + protected void validate(ActivityDefinition activityDefinition) { + super.validate(activityDefinition); + ValidationSupport.checkList(activityDefinition.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(activityDefinition.status, "status"); + ValidationSupport.choiceElement(activityDefinition.subject, "subject", CodeableConcept.class, Reference.class); + ValidationSupport.checkList(activityDefinition.contact, "contact", ContactDetail.class); + ValidationSupport.checkList(activityDefinition.useContext, "useContext", UsageContext.class); + ValidationSupport.checkList(activityDefinition.jurisdiction, "jurisdiction", CodeableConcept.class); + ValidationSupport.checkList(activityDefinition.topic, "topic", CodeableConcept.class); + ValidationSupport.checkList(activityDefinition.author, "author", ContactDetail.class); + ValidationSupport.checkList(activityDefinition.editor, "editor", ContactDetail.class); + ValidationSupport.checkList(activityDefinition.reviewer, "reviewer", ContactDetail.class); + ValidationSupport.checkList(activityDefinition.endorser, "endorser", ContactDetail.class); + ValidationSupport.checkList(activityDefinition.relatedArtifact, "relatedArtifact", RelatedArtifact.class); + ValidationSupport.checkList(activityDefinition.library, "library", Canonical.class); + ValidationSupport.choiceElement(activityDefinition.timing, "timing", Timing.class, DateTime.class, Age.class, Period.class, Range.class, Duration.class); + ValidationSupport.checkList(activityDefinition.participant, "participant", Participant.class); + ValidationSupport.choiceElement(activityDefinition.product, "product", Reference.class, CodeableConcept.class); + ValidationSupport.checkList(activityDefinition.dosage, "dosage", Dosage.class); + ValidationSupport.checkList(activityDefinition.bodySite, "bodySite", CodeableConcept.class); + ValidationSupport.checkList(activityDefinition.specimenRequirement, "specimenRequirement", Reference.class); + ValidationSupport.checkList(activityDefinition.observationRequirement, "observationRequirement", Reference.class); + ValidationSupport.checkList(activityDefinition.observationResultRequirement, "observationResultRequirement", Reference.class); + ValidationSupport.checkList(activityDefinition.dynamicValue, "dynamicValue", DynamicValue.class); + ValidationSupport.checkReferenceType(activityDefinition.subject, "subject", "Group"); + ValidationSupport.checkReferenceType(activityDefinition.location, "location", "Location"); + ValidationSupport.checkReferenceType(activityDefinition.product, "product", "Medication", "Substance"); + ValidationSupport.checkReferenceType(activityDefinition.specimenRequirement, "specimenRequirement", "SpecimenDefinition"); + ValidationSupport.checkReferenceType(activityDefinition.observationRequirement, "observationRequirement", "ObservationDefinition"); + ValidationSupport.checkReferenceType(activityDefinition.observationResultRequirement, "observationResultRequirement", "ObservationDefinition"); } protected Builder from(ActivityDefinition activityDefinition) { @@ -2476,9 +2506,8 @@ public static class Participant extends BackboneElement { private Participant(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); + type = builder.type; role = builder.role; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2721,7 +2750,17 @@ public Builder role(CodeableConcept role) { */ @Override public Participant build() { - return new Participant(this); + Participant participant = new Participant(this); + if (validating) { + validate(participant); + } + return participant; + } + + protected void validate(Participant participant) { + super.validate(participant); + ValidationSupport.requireNonNull(participant.type, "type"); + ValidationSupport.requireValueOrChildren(participant); } protected Builder from(Participant participant) { @@ -2746,9 +2785,8 @@ public static class DynamicValue extends BackboneElement { private DynamicValue(Builder builder) { super(builder); - path = ValidationSupport.requireNonNull(builder.path, "path"); - expression = ValidationSupport.requireNonNull(builder.expression, "expression"); - ValidationSupport.requireValueOrChildren(this); + path = builder.path; + expression = builder.expression; } /** @@ -3002,7 +3040,18 @@ public Builder expression(Expression expression) { */ @Override public DynamicValue build() { - return new DynamicValue(this); + DynamicValue dynamicValue = new DynamicValue(this); + if (validating) { + validate(dynamicValue); + } + return dynamicValue; + } + + protected void validate(DynamicValue dynamicValue) { + super.validate(dynamicValue); + ValidationSupport.requireNonNull(dynamicValue.path, "path"); + ValidationSupport.requireNonNull(dynamicValue.expression, "expression"); + ValidationSupport.requireValueOrChildren(dynamicValue); } protected Builder from(DynamicValue dynamicValue) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/AdverseEvent.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/AdverseEvent.java index 91b66c7f5de..0cd3a429cb8 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/AdverseEvent.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/AdverseEvent.java @@ -149,36 +149,25 @@ public class AdverseEvent extends DomainResource { private AdverseEvent(Builder builder) { super(builder); identifier = builder.identifier; - actuality = ValidationSupport.requireNonNull(builder.actuality, "actuality"); - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", CodeableConcept.class)); + actuality = builder.actuality; + category = Collections.unmodifiableList(builder.category); event = builder.event; - subject = ValidationSupport.requireNonNull(builder.subject, "subject"); + subject = builder.subject; encounter = builder.encounter; date = builder.date; detected = builder.detected; recordedDate = builder.recordedDate; - resultingCondition = Collections.unmodifiableList(ValidationSupport.checkList(builder.resultingCondition, "resultingCondition", Reference.class)); + resultingCondition = Collections.unmodifiableList(builder.resultingCondition); location = builder.location; seriousness = builder.seriousness; severity = builder.severity; outcome = builder.outcome; recorder = builder.recorder; - contributor = Collections.unmodifiableList(ValidationSupport.checkList(builder.contributor, "contributor", Reference.class)); - suspectEntity = Collections.unmodifiableList(ValidationSupport.checkList(builder.suspectEntity, "suspectEntity", SuspectEntity.class)); - subjectMedicalHistory = Collections.unmodifiableList(ValidationSupport.checkList(builder.subjectMedicalHistory, "subjectMedicalHistory", Reference.class)); - referenceDocument = Collections.unmodifiableList(ValidationSupport.checkList(builder.referenceDocument, "referenceDocument", Reference.class)); - study = Collections.unmodifiableList(ValidationSupport.checkList(builder.study, "study", Reference.class)); - ValidationSupport.checkValueSetBinding(severity, "severity", "http://hl7.org/fhir/ValueSet/adverse-event-severity", "http://terminology.hl7.org/CodeSystem/adverse-event-severity", "mild", "moderate", "severe"); - ValidationSupport.checkValueSetBinding(outcome, "outcome", "http://hl7.org/fhir/ValueSet/adverse-event-outcome", "http://terminology.hl7.org/CodeSystem/adverse-event-outcome", "resolved", "recovering", "ongoing", "resolvedWithSequelae", "fatal", "unknown"); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group", "Practitioner", "RelatedPerson"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(resultingCondition, "resultingCondition", "Condition"); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.checkReferenceType(recorder, "recorder", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson"); - ValidationSupport.checkReferenceType(contributor, "contributor", "Practitioner", "PractitionerRole", "Device"); - ValidationSupport.checkReferenceType(subjectMedicalHistory, "subjectMedicalHistory", "Condition", "Observation", "AllergyIntolerance", "FamilyMemberHistory", "Immunization", "Procedure", "Media", "DocumentReference"); - ValidationSupport.checkReferenceType(referenceDocument, "referenceDocument", "DocumentReference"); - ValidationSupport.checkReferenceType(study, "study", "ResearchStudy"); + contributor = Collections.unmodifiableList(builder.contributor); + suspectEntity = Collections.unmodifiableList(builder.suspectEntity); + subjectMedicalHistory = Collections.unmodifiableList(builder.subjectMedicalHistory); + referenceDocument = Collections.unmodifiableList(builder.referenceDocument); + study = Collections.unmodifiableList(builder.study); } /** @@ -1312,7 +1301,35 @@ public Builder study(Collection study) { */ @Override public AdverseEvent build() { - return new AdverseEvent(this); + AdverseEvent adverseEvent = new AdverseEvent(this); + if (validating) { + validate(adverseEvent); + } + return adverseEvent; + } + + protected void validate(AdverseEvent adverseEvent) { + super.validate(adverseEvent); + ValidationSupport.requireNonNull(adverseEvent.actuality, "actuality"); + ValidationSupport.checkList(adverseEvent.category, "category", CodeableConcept.class); + ValidationSupport.requireNonNull(adverseEvent.subject, "subject"); + ValidationSupport.checkList(adverseEvent.resultingCondition, "resultingCondition", Reference.class); + ValidationSupport.checkList(adverseEvent.contributor, "contributor", Reference.class); + ValidationSupport.checkList(adverseEvent.suspectEntity, "suspectEntity", SuspectEntity.class); + ValidationSupport.checkList(adverseEvent.subjectMedicalHistory, "subjectMedicalHistory", Reference.class); + ValidationSupport.checkList(adverseEvent.referenceDocument, "referenceDocument", Reference.class); + ValidationSupport.checkList(adverseEvent.study, "study", Reference.class); + ValidationSupport.checkValueSetBinding(adverseEvent.severity, "severity", "http://hl7.org/fhir/ValueSet/adverse-event-severity", "http://terminology.hl7.org/CodeSystem/adverse-event-severity", "mild", "moderate", "severe"); + ValidationSupport.checkValueSetBinding(adverseEvent.outcome, "outcome", "http://hl7.org/fhir/ValueSet/adverse-event-outcome", "http://terminology.hl7.org/CodeSystem/adverse-event-outcome", "resolved", "recovering", "ongoing", "resolvedWithSequelae", "fatal", "unknown"); + ValidationSupport.checkReferenceType(adverseEvent.subject, "subject", "Patient", "Group", "Practitioner", "RelatedPerson"); + ValidationSupport.checkReferenceType(adverseEvent.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(adverseEvent.resultingCondition, "resultingCondition", "Condition"); + ValidationSupport.checkReferenceType(adverseEvent.location, "location", "Location"); + ValidationSupport.checkReferenceType(adverseEvent.recorder, "recorder", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson"); + ValidationSupport.checkReferenceType(adverseEvent.contributor, "contributor", "Practitioner", "PractitionerRole", "Device"); + ValidationSupport.checkReferenceType(adverseEvent.subjectMedicalHistory, "subjectMedicalHistory", "Condition", "Observation", "AllergyIntolerance", "FamilyMemberHistory", "Immunization", "Procedure", "Media", "DocumentReference"); + ValidationSupport.checkReferenceType(adverseEvent.referenceDocument, "referenceDocument", "DocumentReference"); + ValidationSupport.checkReferenceType(adverseEvent.study, "study", "ResearchStudy"); } protected Builder from(AdverseEvent adverseEvent) { @@ -1354,10 +1371,8 @@ public static class SuspectEntity extends BackboneElement { private SuspectEntity(Builder builder) { super(builder); - instance = ValidationSupport.requireNonNull(builder.instance, "instance"); - causality = Collections.unmodifiableList(ValidationSupport.checkList(builder.causality, "causality", Causality.class)); - ValidationSupport.checkReferenceType(instance, "instance", "Immunization", "Procedure", "Substance", "Medication", "MedicationAdministration", "MedicationStatement", "Device"); - ValidationSupport.requireValueOrChildren(this); + instance = builder.instance; + causality = Collections.unmodifiableList(builder.causality); } /** @@ -1633,7 +1648,19 @@ public Builder causality(Collection causality) { */ @Override public SuspectEntity build() { - return new SuspectEntity(this); + SuspectEntity suspectEntity = new SuspectEntity(this); + if (validating) { + validate(suspectEntity); + } + return suspectEntity; + } + + protected void validate(SuspectEntity suspectEntity) { + super.validate(suspectEntity); + ValidationSupport.requireNonNull(suspectEntity.instance, "instance"); + ValidationSupport.checkList(suspectEntity.causality, "causality", Causality.class); + ValidationSupport.checkReferenceType(suspectEntity.instance, "instance", "Immunization", "Procedure", "Substance", "Medication", "MedicationAdministration", "MedicationStatement", "Device"); + ValidationSupport.requireValueOrChildren(suspectEntity); } protected Builder from(SuspectEntity suspectEntity) { @@ -1676,8 +1703,6 @@ private Causality(Builder builder) { productRelatedness = builder.productRelatedness; author = builder.author; method = builder.method; - ValidationSupport.checkReferenceType(author, "author", "Practitioner", "PractitionerRole"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1977,7 +2002,17 @@ public Builder method(CodeableConcept method) { */ @Override public Causality build() { - return new Causality(this); + Causality causality = new Causality(this); + if (validating) { + validate(causality); + } + return causality; + } + + protected void validate(Causality causality) { + super.validate(causality); + ValidationSupport.checkReferenceType(causality.author, "author", "Practitioner", "PractitionerRole"); + ValidationSupport.requireValueOrChildren(causality); } protected Builder from(Causality causality) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/AllergyIntolerance.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/AllergyIntolerance.java index 04f371831d1..600cec1b05e 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/AllergyIntolerance.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/AllergyIntolerance.java @@ -142,28 +142,22 @@ public class AllergyIntolerance extends DomainResource { private AllergyIntolerance(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); clinicalStatus = builder.clinicalStatus; verificationStatus = builder.verificationStatus; type = builder.type; - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", AllergyIntoleranceCategory.class)); + category = Collections.unmodifiableList(builder.category); criticality = builder.criticality; code = builder.code; - patient = ValidationSupport.requireNonNull(builder.patient, "patient"); + patient = builder.patient; encounter = builder.encounter; - onset = ValidationSupport.choiceElement(builder.onset, "onset", DateTime.class, Age.class, Period.class, Range.class, String.class); + onset = builder.onset; recordedDate = builder.recordedDate; recorder = builder.recorder; asserter = builder.asserter; lastOccurrence = builder.lastOccurrence; - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - reaction = Collections.unmodifiableList(ValidationSupport.checkList(builder.reaction, "reaction", Reaction.class)); - ValidationSupport.checkValueSetBinding(clinicalStatus, "clinicalStatus", "http://hl7.org/fhir/ValueSet/allergyintolerance-clinical", "http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical", "active", "inactive", "resolved"); - ValidationSupport.checkValueSetBinding(verificationStatus, "verificationStatus", "http://hl7.org/fhir/ValueSet/allergyintolerance-verification", "http://terminology.hl7.org/CodeSystem/allergyintolerance-verification", "unconfirmed", "confirmed", "refuted", "entered-in-error"); - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(recorder, "recorder", "Practitioner", "PractitionerRole", "Patient", "RelatedPerson"); - ValidationSupport.checkReferenceType(asserter, "asserter", "Patient", "RelatedPerson", "Practitioner", "PractitionerRole"); + note = Collections.unmodifiableList(builder.note); + reaction = Collections.unmodifiableList(builder.reaction); } /** @@ -1062,7 +1056,27 @@ public Builder reaction(Collection reaction) { */ @Override public AllergyIntolerance build() { - return new AllergyIntolerance(this); + AllergyIntolerance allergyIntolerance = new AllergyIntolerance(this); + if (validating) { + validate(allergyIntolerance); + } + return allergyIntolerance; + } + + protected void validate(AllergyIntolerance allergyIntolerance) { + super.validate(allergyIntolerance); + ValidationSupport.checkList(allergyIntolerance.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(allergyIntolerance.category, "category", AllergyIntoleranceCategory.class); + ValidationSupport.requireNonNull(allergyIntolerance.patient, "patient"); + ValidationSupport.choiceElement(allergyIntolerance.onset, "onset", DateTime.class, Age.class, Period.class, Range.class, String.class); + ValidationSupport.checkList(allergyIntolerance.note, "note", Annotation.class); + ValidationSupport.checkList(allergyIntolerance.reaction, "reaction", Reaction.class); + ValidationSupport.checkValueSetBinding(allergyIntolerance.clinicalStatus, "clinicalStatus", "http://hl7.org/fhir/ValueSet/allergyintolerance-clinical", "http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical", "active", "inactive", "resolved"); + ValidationSupport.checkValueSetBinding(allergyIntolerance.verificationStatus, "verificationStatus", "http://hl7.org/fhir/ValueSet/allergyintolerance-verification", "http://terminology.hl7.org/CodeSystem/allergyintolerance-verification", "unconfirmed", "confirmed", "refuted", "entered-in-error"); + ValidationSupport.checkReferenceType(allergyIntolerance.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(allergyIntolerance.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(allergyIntolerance.recorder, "recorder", "Practitioner", "PractitionerRole", "Patient", "RelatedPerson"); + ValidationSupport.checkReferenceType(allergyIntolerance.asserter, "asserter", "Patient", "RelatedPerson", "Practitioner", "PractitionerRole"); } protected Builder from(AllergyIntolerance allergyIntolerance) { @@ -1127,13 +1141,12 @@ public static class Reaction extends BackboneElement { private Reaction(Builder builder) { super(builder); substance = builder.substance; - manifestation = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.manifestation, "manifestation", CodeableConcept.class)); + manifestation = Collections.unmodifiableList(builder.manifestation); description = builder.description; onset = builder.onset; severity = builder.severity; exposureRoute = builder.exposureRoute; - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - ValidationSupport.requireValueOrChildren(this); + note = Collections.unmodifiableList(builder.note); } /** @@ -1577,7 +1590,18 @@ public Builder note(Collection note) { */ @Override public Reaction build() { - return new Reaction(this); + Reaction reaction = new Reaction(this); + if (validating) { + validate(reaction); + } + return reaction; + } + + protected void validate(Reaction reaction) { + super.validate(reaction); + ValidationSupport.checkNonEmptyList(reaction.manifestation, "manifestation", CodeableConcept.class); + ValidationSupport.checkList(reaction.note, "note", Annotation.class); + ValidationSupport.requireValueOrChildren(reaction); } protected Builder from(Reaction reaction) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Appointment.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Appointment.java index 19c78cc29a1..003580fad65 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Appointment.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Appointment.java @@ -192,31 +192,28 @@ public class Appointment extends DomainResource { private Appointment(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; cancelationReason = builder.cancelationReason; - serviceCategory = Collections.unmodifiableList(ValidationSupport.checkList(builder.serviceCategory, "serviceCategory", CodeableConcept.class)); - serviceType = Collections.unmodifiableList(ValidationSupport.checkList(builder.serviceType, "serviceType", CodeableConcept.class)); - specialty = Collections.unmodifiableList(ValidationSupport.checkList(builder.specialty, "specialty", CodeableConcept.class)); + serviceCategory = Collections.unmodifiableList(builder.serviceCategory); + serviceType = Collections.unmodifiableList(builder.serviceType); + specialty = Collections.unmodifiableList(builder.specialty); appointmentType = builder.appointmentType; - reasonCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonCode, "reasonCode", CodeableConcept.class)); - reasonReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonReference, "reasonReference", Reference.class)); + reasonCode = Collections.unmodifiableList(builder.reasonCode); + reasonReference = Collections.unmodifiableList(builder.reasonReference); priority = builder.priority; description = builder.description; - supportingInformation = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportingInformation, "supportingInformation", Reference.class)); + supportingInformation = Collections.unmodifiableList(builder.supportingInformation); start = builder.start; end = builder.end; minutesDuration = builder.minutesDuration; - slot = Collections.unmodifiableList(ValidationSupport.checkList(builder.slot, "slot", Reference.class)); + slot = Collections.unmodifiableList(builder.slot); created = builder.created; comment = builder.comment; patientInstruction = builder.patientInstruction; - basedOn = Collections.unmodifiableList(ValidationSupport.checkList(builder.basedOn, "basedOn", Reference.class)); - participant = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.participant, "participant", Participant.class)); - requestedPeriod = Collections.unmodifiableList(ValidationSupport.checkList(builder.requestedPeriod, "requestedPeriod", Period.class)); - ValidationSupport.checkReferenceType(reasonReference, "reasonReference", "Condition", "Procedure", "Observation", "ImmunizationRecommendation"); - ValidationSupport.checkReferenceType(slot, "slot", "Slot"); - ValidationSupport.checkReferenceType(basedOn, "basedOn", "ServiceRequest"); + basedOn = Collections.unmodifiableList(builder.basedOn); + participant = Collections.unmodifiableList(builder.participant); + requestedPeriod = Collections.unmodifiableList(builder.requestedPeriod); } /** @@ -1454,7 +1451,30 @@ public Builder requestedPeriod(Collection requestedPeriod) { */ @Override public Appointment build() { - return new Appointment(this); + Appointment appointment = new Appointment(this); + if (validating) { + validate(appointment); + } + return appointment; + } + + protected void validate(Appointment appointment) { + super.validate(appointment); + ValidationSupport.checkList(appointment.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(appointment.status, "status"); + ValidationSupport.checkList(appointment.serviceCategory, "serviceCategory", CodeableConcept.class); + ValidationSupport.checkList(appointment.serviceType, "serviceType", CodeableConcept.class); + ValidationSupport.checkList(appointment.specialty, "specialty", CodeableConcept.class); + ValidationSupport.checkList(appointment.reasonCode, "reasonCode", CodeableConcept.class); + ValidationSupport.checkList(appointment.reasonReference, "reasonReference", Reference.class); + ValidationSupport.checkList(appointment.supportingInformation, "supportingInformation", Reference.class); + ValidationSupport.checkList(appointment.slot, "slot", Reference.class); + ValidationSupport.checkList(appointment.basedOn, "basedOn", Reference.class); + ValidationSupport.checkNonEmptyList(appointment.participant, "participant", Participant.class); + ValidationSupport.checkList(appointment.requestedPeriod, "requestedPeriod", Period.class); + ValidationSupport.checkReferenceType(appointment.reasonReference, "reasonReference", "Condition", "Procedure", "Observation", "ImmunizationRecommendation"); + ValidationSupport.checkReferenceType(appointment.slot, "slot", "Slot"); + ValidationSupport.checkReferenceType(appointment.basedOn, "basedOn", "ServiceRequest"); } protected Builder from(Appointment appointment) { @@ -1521,13 +1541,11 @@ public static class Participant extends BackboneElement { private Participant(Builder builder) { super(builder); - type = Collections.unmodifiableList(ValidationSupport.checkList(builder.type, "type", CodeableConcept.class)); + type = Collections.unmodifiableList(builder.type); actor = builder.actor; required = builder.required; - status = ValidationSupport.requireNonNull(builder.status, "status"); + status = builder.status; period = builder.period; - ValidationSupport.checkReferenceType(actor, "actor", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "Device", "HealthcareService", "Location"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1890,7 +1908,19 @@ public Builder period(Period period) { */ @Override public Participant build() { - return new Participant(this); + Participant participant = new Participant(this); + if (validating) { + validate(participant); + } + return participant; + } + + protected void validate(Participant participant) { + super.validate(participant); + ValidationSupport.checkList(participant.type, "type", CodeableConcept.class); + ValidationSupport.requireNonNull(participant.status, "status"); + ValidationSupport.checkReferenceType(participant.actor, "actor", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "Device", "HealthcareService", "Location"); + ValidationSupport.requireValueOrChildren(participant); } protected Builder from(Participant participant) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/AppointmentResponse.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/AppointmentResponse.java index cd9b9bbfa7a..3929013bf00 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/AppointmentResponse.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/AppointmentResponse.java @@ -94,16 +94,14 @@ public class AppointmentResponse extends DomainResource { private AppointmentResponse(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - appointment = ValidationSupport.requireNonNull(builder.appointment, "appointment"); + identifier = Collections.unmodifiableList(builder.identifier); + appointment = builder.appointment; start = builder.start; end = builder.end; - participantType = Collections.unmodifiableList(ValidationSupport.checkList(builder.participantType, "participantType", CodeableConcept.class)); + participantType = Collections.unmodifiableList(builder.participantType); actor = builder.actor; - participantStatus = ValidationSupport.requireNonNull(builder.participantStatus, "participantStatus"); + participantStatus = builder.participantStatus; comment = builder.comment; - ValidationSupport.checkReferenceType(appointment, "appointment", "Appointment"); - ValidationSupport.checkReferenceType(actor, "actor", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "Device", "HealthcareService", "Location"); } /** @@ -698,7 +696,21 @@ public Builder comment(String comment) { */ @Override public AppointmentResponse build() { - return new AppointmentResponse(this); + AppointmentResponse appointmentResponse = new AppointmentResponse(this); + if (validating) { + validate(appointmentResponse); + } + return appointmentResponse; + } + + protected void validate(AppointmentResponse appointmentResponse) { + super.validate(appointmentResponse); + ValidationSupport.checkList(appointmentResponse.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(appointmentResponse.appointment, "appointment"); + ValidationSupport.checkList(appointmentResponse.participantType, "participantType", CodeableConcept.class); + ValidationSupport.requireNonNull(appointmentResponse.participantStatus, "participantStatus"); + ValidationSupport.checkReferenceType(appointmentResponse.appointment, "appointment", "Appointment"); + ValidationSupport.checkReferenceType(appointmentResponse.actor, "actor", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "Device", "HealthcareService", "Location"); } protected Builder from(AppointmentResponse appointmentResponse) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/AuditEvent.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/AuditEvent.java index efd3da35961..a8301b50c6a 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/AuditEvent.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/AuditEvent.java @@ -206,17 +206,17 @@ public class AuditEvent extends DomainResource { private AuditEvent(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); - subtype = Collections.unmodifiableList(ValidationSupport.checkList(builder.subtype, "subtype", Coding.class)); + type = builder.type; + subtype = Collections.unmodifiableList(builder.subtype); action = builder.action; period = builder.period; - recorded = ValidationSupport.requireNonNull(builder.recorded, "recorded"); + recorded = builder.recorded; outcome = builder.outcome; outcomeDesc = builder.outcomeDesc; - purposeOfEvent = Collections.unmodifiableList(ValidationSupport.checkList(builder.purposeOfEvent, "purposeOfEvent", CodeableConcept.class)); - agent = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.agent, "agent", Agent.class)); - source = ValidationSupport.requireNonNull(builder.source, "source"); - entity = Collections.unmodifiableList(ValidationSupport.checkList(builder.entity, "entity", Entity.class)); + purposeOfEvent = Collections.unmodifiableList(builder.purposeOfEvent); + agent = Collections.unmodifiableList(builder.agent); + source = builder.source; + entity = Collections.unmodifiableList(builder.entity); } /** @@ -923,7 +923,22 @@ public Builder entity(Collection entity) { */ @Override public AuditEvent build() { - return new AuditEvent(this); + AuditEvent auditEvent = new AuditEvent(this); + if (validating) { + validate(auditEvent); + } + return auditEvent; + } + + protected void validate(AuditEvent auditEvent) { + super.validate(auditEvent); + ValidationSupport.requireNonNull(auditEvent.type, "type"); + ValidationSupport.checkList(auditEvent.subtype, "subtype", Coding.class); + ValidationSupport.requireNonNull(auditEvent.recorded, "recorded"); + ValidationSupport.checkList(auditEvent.purposeOfEvent, "purposeOfEvent", CodeableConcept.class); + ValidationSupport.checkNonEmptyList(auditEvent.agent, "agent", Agent.class); + ValidationSupport.requireNonNull(auditEvent.source, "source"); + ValidationSupport.checkList(auditEvent.entity, "entity", Entity.class); } protected Builder from(AuditEvent auditEvent) { @@ -991,19 +1006,16 @@ public static class Agent extends BackboneElement { private Agent(Builder builder) { super(builder); type = builder.type; - role = Collections.unmodifiableList(ValidationSupport.checkList(builder.role, "role", CodeableConcept.class)); + role = Collections.unmodifiableList(builder.role); who = builder.who; altId = builder.altId; name = builder.name; - requestor = ValidationSupport.requireNonNull(builder.requestor, "requestor"); + requestor = builder.requestor; location = builder.location; - policy = Collections.unmodifiableList(ValidationSupport.checkList(builder.policy, "policy", Uri.class)); + policy = Collections.unmodifiableList(builder.policy); media = builder.media; network = builder.network; - purposeOfUse = Collections.unmodifiableList(ValidationSupport.checkList(builder.purposeOfUse, "purposeOfUse", CodeableConcept.class)); - ValidationSupport.checkReferenceType(who, "who", "PractitionerRole", "Practitioner", "Organization", "Device", "Patient", "RelatedPerson"); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.requireValueOrChildren(this); + purposeOfUse = Collections.unmodifiableList(builder.purposeOfUse); } /** @@ -1593,7 +1605,22 @@ public Builder purposeOfUse(Collection purposeOfUse) { */ @Override public Agent build() { - return new Agent(this); + Agent agent = new Agent(this); + if (validating) { + validate(agent); + } + return agent; + } + + protected void validate(Agent agent) { + super.validate(agent); + ValidationSupport.checkList(agent.role, "role", CodeableConcept.class); + ValidationSupport.requireNonNull(agent.requestor, "requestor"); + ValidationSupport.checkList(agent.policy, "policy", Uri.class); + ValidationSupport.checkList(agent.purposeOfUse, "purposeOfUse", CodeableConcept.class); + ValidationSupport.checkReferenceType(agent.who, "who", "PractitionerRole", "Practitioner", "Organization", "Device", "Patient", "RelatedPerson"); + ValidationSupport.checkReferenceType(agent.location, "location", "Location"); + ValidationSupport.requireValueOrChildren(agent); } protected Builder from(Agent agent) { @@ -1630,7 +1657,6 @@ private Network(Builder builder) { super(builder); address = builder.address; type = builder.type; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1866,7 +1892,16 @@ public Builder type(AuditEventAgentNetworkType type) { */ @Override public Network build() { - return new Network(this); + Network network = new Network(this); + if (validating) { + validate(network); + } + return network; + } + + protected void validate(Network network) { + super.validate(network); + ValidationSupport.requireValueOrChildren(network); } protected Builder from(Network network) { @@ -1899,10 +1934,8 @@ public static class Source extends BackboneElement { private Source(Builder builder) { super(builder); site = builder.site; - observer = ValidationSupport.requireNonNull(builder.observer, "observer"); - type = Collections.unmodifiableList(ValidationSupport.checkList(builder.type, "type", Coding.class)); - ValidationSupport.checkReferenceType(observer, "observer", "PractitionerRole", "Practitioner", "Organization", "Device", "Patient", "RelatedPerson"); - ValidationSupport.requireValueOrChildren(this); + observer = builder.observer; + type = Collections.unmodifiableList(builder.type); } /** @@ -2206,7 +2239,19 @@ public Builder type(Collection type) { */ @Override public Source build() { - return new Source(this); + Source source = new Source(this); + if (validating) { + validate(source); + } + return source; + } + + protected void validate(Source source) { + super.validate(source); + ValidationSupport.requireNonNull(source.observer, "observer"); + ValidationSupport.checkList(source.type, "type", Coding.class); + ValidationSupport.checkReferenceType(source.observer, "observer", "PractitionerRole", "Practitioner", "Organization", "Device", "Patient", "RelatedPerson"); + ValidationSupport.requireValueOrChildren(source); } protected Builder from(Source source) { @@ -2266,12 +2311,11 @@ private Entity(Builder builder) { type = builder.type; role = builder.role; lifecycle = builder.lifecycle; - securityLabel = Collections.unmodifiableList(ValidationSupport.checkList(builder.securityLabel, "securityLabel", Coding.class)); + securityLabel = Collections.unmodifiableList(builder.securityLabel); name = builder.name; description = builder.description; query = builder.query; - detail = Collections.unmodifiableList(ValidationSupport.checkList(builder.detail, "detail", Detail.class)); - ValidationSupport.requireValueOrChildren(this); + detail = Collections.unmodifiableList(builder.detail); } /** @@ -2750,7 +2794,18 @@ public Builder detail(Collection detail) { */ @Override public Entity build() { - return new Entity(this); + Entity entity = new Entity(this); + if (validating) { + validate(entity); + } + return entity; + } + + protected void validate(Entity entity) { + super.validate(entity); + ValidationSupport.checkList(entity.securityLabel, "securityLabel", Coding.class); + ValidationSupport.checkList(entity.detail, "detail", Detail.class); + ValidationSupport.requireValueOrChildren(entity); } protected Builder from(Entity entity) { @@ -2780,9 +2835,8 @@ public static class Detail extends BackboneElement { private Detail(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); - value = ValidationSupport.requireChoiceElement(builder.value, "value", String.class, Base64Binary.class); - ValidationSupport.requireValueOrChildren(this); + type = builder.type; + value = builder.value; } /** @@ -3034,7 +3088,18 @@ public Builder value(Element value) { */ @Override public Detail build() { - return new Detail(this); + Detail detail = new Detail(this); + if (validating) { + validate(detail); + } + return detail; + } + + protected void validate(Detail detail) { + super.validate(detail); + ValidationSupport.requireNonNull(detail.type, "type"); + ValidationSupport.requireChoiceElement(detail.value, "value", String.class, Base64Binary.class); + ValidationSupport.requireValueOrChildren(detail); } protected Builder from(Detail detail) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Basic.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Basic.java index 28d69844354..015496c5d09 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Basic.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Basic.java @@ -66,12 +66,11 @@ public class Basic extends DomainResource { private Basic(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - code = ValidationSupport.requireNonNull(builder.code, "code"); + identifier = Collections.unmodifiableList(builder.identifier); + code = builder.code; subject = builder.subject; created = builder.created; author = builder.author; - ValidationSupport.checkReferenceType(author, "author", "Practitioner", "PractitionerRole", "Patient", "RelatedPerson", "Organization"); } /** @@ -540,7 +539,18 @@ public Builder author(Reference author) { */ @Override public Basic build() { - return new Basic(this); + Basic basic = new Basic(this); + if (validating) { + validate(basic); + } + return basic; + } + + protected void validate(Basic basic) { + super.validate(basic); + ValidationSupport.checkList(basic.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(basic.code, "code"); + ValidationSupport.checkReferenceType(basic.author, "author", "Practitioner", "PractitionerRole", "Patient", "RelatedPerson", "Organization"); } protected Builder from(Basic basic) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Binary.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Binary.java index 58729184ed8..2f9c83c1c68 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Binary.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Binary.java @@ -51,7 +51,7 @@ public class Binary extends Resource { private Binary(Builder builder) { super(builder); - contentType = ValidationSupport.requireNonNull(builder.contentType, "contentType"); + contentType = builder.contentType; securityContext = builder.securityContext; data = builder.data; } @@ -296,7 +296,16 @@ public Builder data(Base64Binary data) { */ @Override public Binary build() { - return new Binary(this); + Binary binary = new Binary(this); + if (validating) { + validate(binary); + } + return binary; + } + + protected void validate(Binary binary) { + super.validate(binary); + ValidationSupport.requireNonNull(binary.contentType, "contentType"); } protected Builder from(Binary binary) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/BiologicallyDerivedProduct.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/BiologicallyDerivedProduct.java index 25d82ebe21c..4413de00c43 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/BiologicallyDerivedProduct.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/BiologicallyDerivedProduct.java @@ -87,19 +87,17 @@ public class BiologicallyDerivedProduct extends DomainResource { private BiologicallyDerivedProduct(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); productCategory = builder.productCategory; productCode = builder.productCode; status = builder.status; - request = Collections.unmodifiableList(ValidationSupport.checkList(builder.request, "request", Reference.class)); + request = Collections.unmodifiableList(builder.request); quantity = builder.quantity; - parent = Collections.unmodifiableList(ValidationSupport.checkList(builder.parent, "parent", Reference.class)); + parent = Collections.unmodifiableList(builder.parent); collection = builder.collection; - processing = Collections.unmodifiableList(ValidationSupport.checkList(builder.processing, "processing", Processing.class)); + processing = Collections.unmodifiableList(builder.processing); manipulation = builder.manipulation; - storage = Collections.unmodifiableList(ValidationSupport.checkList(builder.storage, "storage", Storage.class)); - ValidationSupport.checkReferenceType(request, "request", "ServiceRequest"); - ValidationSupport.checkReferenceType(parent, "parent", "BiologicallyDerivedProduct"); + storage = Collections.unmodifiableList(builder.storage); } /** @@ -837,7 +835,22 @@ public Builder storage(java.util.Collection storage) { */ @Override public BiologicallyDerivedProduct build() { - return new BiologicallyDerivedProduct(this); + BiologicallyDerivedProduct biologicallyDerivedProduct = new BiologicallyDerivedProduct(this); + if (validating) { + validate(biologicallyDerivedProduct); + } + return biologicallyDerivedProduct; + } + + protected void validate(BiologicallyDerivedProduct biologicallyDerivedProduct) { + super.validate(biologicallyDerivedProduct); + ValidationSupport.checkList(biologicallyDerivedProduct.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(biologicallyDerivedProduct.request, "request", Reference.class); + ValidationSupport.checkList(biologicallyDerivedProduct.parent, "parent", Reference.class); + ValidationSupport.checkList(biologicallyDerivedProduct.processing, "processing", Processing.class); + ValidationSupport.checkList(biologicallyDerivedProduct.storage, "storage", Storage.class); + ValidationSupport.checkReferenceType(biologicallyDerivedProduct.request, "request", "ServiceRequest"); + ValidationSupport.checkReferenceType(biologicallyDerivedProduct.parent, "parent", "BiologicallyDerivedProduct"); } protected Builder from(BiologicallyDerivedProduct biologicallyDerivedProduct) { @@ -872,10 +885,7 @@ private Collection(Builder builder) { super(builder); collector = builder.collector; source = builder.source; - collected = ValidationSupport.choiceElement(builder.collected, "collected", DateTime.class, Period.class); - ValidationSupport.checkReferenceType(collector, "collector", "Practitioner", "PractitionerRole"); - ValidationSupport.checkReferenceType(source, "source", "Patient", "Organization"); - ValidationSupport.requireValueOrChildren(this); + collected = builder.collected; } /** @@ -1160,7 +1170,19 @@ public Builder collected(Element collected) { */ @Override public Collection build() { - return new Collection(this); + Collection collection = new Collection(this); + if (validating) { + validate(collection); + } + return collection; + } + + protected void validate(Collection collection) { + super.validate(collection); + ValidationSupport.choiceElement(collection.collected, "collected", DateTime.class, Period.class); + ValidationSupport.checkReferenceType(collection.collector, "collector", "Practitioner", "PractitionerRole"); + ValidationSupport.checkReferenceType(collection.source, "source", "Patient", "Organization"); + ValidationSupport.requireValueOrChildren(collection); } protected Builder from(Collection collection) { @@ -1196,9 +1218,7 @@ private Processing(Builder builder) { description = builder.description; procedure = builder.procedure; additive = builder.additive; - time = ValidationSupport.choiceElement(builder.time, "time", DateTime.class, Period.class); - ValidationSupport.checkReferenceType(additive, "additive", "Substance"); - ValidationSupport.requireValueOrChildren(this); + time = builder.time; } /** @@ -1503,7 +1523,18 @@ public Builder time(Element time) { */ @Override public Processing build() { - return new Processing(this); + Processing processing = new Processing(this); + if (validating) { + validate(processing); + } + return processing; + } + + protected void validate(Processing processing) { + super.validate(processing); + ValidationSupport.choiceElement(processing.time, "time", DateTime.class, Period.class); + ValidationSupport.checkReferenceType(processing.additive, "additive", "Substance"); + ValidationSupport.requireValueOrChildren(processing); } protected Builder from(Processing processing) { @@ -1529,8 +1560,7 @@ public static class Manipulation extends BackboneElement { private Manipulation(Builder builder) { super(builder); description = builder.description; - time = ValidationSupport.choiceElement(builder.time, "time", DateTime.class, Period.class); - ValidationSupport.requireValueOrChildren(this); + time = builder.time; } /** @@ -1772,7 +1802,17 @@ public Builder time(Element time) { */ @Override public Manipulation build() { - return new Manipulation(this); + Manipulation manipulation = new Manipulation(this); + if (validating) { + validate(manipulation); + } + return manipulation; + } + + protected void validate(Manipulation manipulation) { + super.validate(manipulation); + ValidationSupport.choiceElement(manipulation.time, "time", DateTime.class, Period.class); + ValidationSupport.requireValueOrChildren(manipulation); } protected Builder from(Manipulation manipulation) { @@ -1805,7 +1845,6 @@ private Storage(Builder builder) { temperature = builder.temperature; scale = builder.scale; duration = builder.duration; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2099,7 +2138,16 @@ public Builder duration(Period duration) { */ @Override public Storage build() { - return new Storage(this); + Storage storage = new Storage(this); + if (validating) { + validate(storage); + } + return storage; + } + + protected void validate(Storage storage) { + super.validate(storage); + ValidationSupport.requireValueOrChildren(storage); } protected Builder from(Storage storage) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/BodyStructure.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/BodyStructure.java index 4dc2014d39f..35ddc88e8c6 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/BodyStructure.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/BodyStructure.java @@ -84,15 +84,14 @@ public class BodyStructure extends DomainResource { private BodyStructure(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); active = builder.active; morphology = builder.morphology; location = builder.location; - locationQualifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.locationQualifier, "locationQualifier", CodeableConcept.class)); + locationQualifier = Collections.unmodifiableList(builder.locationQualifier); description = builder.description; - image = Collections.unmodifiableList(ValidationSupport.checkList(builder.image, "image", Attachment.class)); - patient = ValidationSupport.requireNonNull(builder.patient, "patient"); - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); + image = Collections.unmodifiableList(builder.image); + patient = builder.patient; } /** @@ -689,7 +688,20 @@ public Builder patient(Reference patient) { */ @Override public BodyStructure build() { - return new BodyStructure(this); + BodyStructure bodyStructure = new BodyStructure(this); + if (validating) { + validate(bodyStructure); + } + return bodyStructure; + } + + protected void validate(BodyStructure bodyStructure) { + super.validate(bodyStructure); + ValidationSupport.checkList(bodyStructure.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(bodyStructure.locationQualifier, "locationQualifier", CodeableConcept.class); + ValidationSupport.checkList(bodyStructure.image, "image", Attachment.class); + ValidationSupport.requireNonNull(bodyStructure.patient, "patient"); + ValidationSupport.checkReferenceType(bodyStructure.patient, "patient", "Patient"); } protected Builder from(BodyStructure bodyStructure) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Bundle.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Bundle.java index 43e7cce5be2..00df2c465f0 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Bundle.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Bundle.java @@ -151,11 +151,11 @@ public class Bundle extends Resource { private Bundle(Builder builder) { super(builder); identifier = builder.identifier; - type = ValidationSupport.requireNonNull(builder.type, "type"); + type = builder.type; timestamp = builder.timestamp; total = builder.total; - link = Collections.unmodifiableList(ValidationSupport.checkList(builder.link, "link", Link.class)); - entry = Collections.unmodifiableList(ValidationSupport.checkList(builder.entry, "entry", Entry.class)); + link = Collections.unmodifiableList(builder.link); + entry = Collections.unmodifiableList(builder.entry); signature = builder.signature; } @@ -552,7 +552,18 @@ public Builder signature(Signature signature) { */ @Override public Bundle build() { - return new Bundle(this); + Bundle bundle = new Bundle(this); + if (validating) { + validate(bundle); + } + return bundle; + } + + protected void validate(Bundle bundle) { + super.validate(bundle); + ValidationSupport.requireNonNull(bundle.type, "type"); + ValidationSupport.checkList(bundle.link, "link", Link.class); + ValidationSupport.checkList(bundle.entry, "entry", Entry.class); } protected Builder from(Bundle bundle) { @@ -581,9 +592,8 @@ public static class Link extends BackboneElement { private Link(Builder builder) { super(builder); - relation = ValidationSupport.requireNonNull(builder.relation, "relation"); - url = ValidationSupport.requireNonNull(builder.url, "url"); - ValidationSupport.requireValueOrChildren(this); + relation = builder.relation; + url = builder.url; } /** @@ -833,7 +843,18 @@ public Builder url(Uri url) { */ @Override public Link build() { - return new Link(this); + Link link = new Link(this); + if (validating) { + validate(link); + } + return link; + } + + protected void validate(Link link) { + super.validate(link); + ValidationSupport.requireNonNull(link.relation, "relation"); + ValidationSupport.requireNonNull(link.url, "url"); + ValidationSupport.requireValueOrChildren(link); } protected Builder from(Link link) { @@ -865,13 +886,12 @@ public static class Entry extends BackboneElement { private Entry(Builder builder) { super(builder); - link = Collections.unmodifiableList(ValidationSupport.checkList(builder.link, "link", Bundle.Link.class)); + link = Collections.unmodifiableList(builder.link); fullUrl = builder.fullUrl; resource = builder.resource; search = builder.search; request = builder.request; response = builder.response; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1257,7 +1277,17 @@ public Builder response(Response response) { */ @Override public Entry build() { - return new Entry(this); + Entry entry = new Entry(this); + if (validating) { + validate(entry); + } + return entry; + } + + protected void validate(Entry entry) { + super.validate(entry); + ValidationSupport.checkList(entry.link, "link", Bundle.Link.class); + ValidationSupport.requireValueOrChildren(entry); } protected Builder from(Entry entry) { @@ -1291,7 +1321,6 @@ private Search(Builder builder) { super(builder); mode = builder.mode; score = builder.score; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1529,7 +1558,16 @@ public Builder score(Decimal score) { */ @Override public Search build() { - return new Search(this); + Search search = new Search(this); + if (validating) { + validate(search); + } + return search; + } + + protected void validate(Search search) { + super.validate(search); + ValidationSupport.requireValueOrChildren(search); } protected Builder from(Search search) { @@ -1569,13 +1607,12 @@ public static class Request extends BackboneElement { private Request(Builder builder) { super(builder); - method = ValidationSupport.requireNonNull(builder.method, "method"); - url = ValidationSupport.requireNonNull(builder.url, "url"); + method = builder.method; + url = builder.url; ifNoneMatch = builder.ifNoneMatch; ifModifiedSince = builder.ifModifiedSince; ifMatch = builder.ifMatch; ifNoneExist = builder.ifNoneExist; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1949,7 +1986,18 @@ public Builder ifNoneExist(String ifNoneExist) { */ @Override public Request build() { - return new Request(this); + Request request = new Request(this); + if (validating) { + validate(request); + } + return request; + } + + protected void validate(Request request) { + super.validate(request); + ValidationSupport.requireNonNull(request.method, "method"); + ValidationSupport.requireNonNull(request.url, "url"); + ValidationSupport.requireValueOrChildren(request); } protected Builder from(Request request) { @@ -1984,12 +2032,11 @@ public static class Response extends BackboneElement { private Response(Builder builder) { super(builder); - status = ValidationSupport.requireNonNull(builder.status, "status"); + status = builder.status; location = builder.location; etag = builder.etag; lastModified = builder.lastModified; outcome = builder.outcome; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2323,7 +2370,17 @@ public Builder outcome(Resource outcome) { */ @Override public Response build() { - return new Response(this); + Response response = new Response(this); + if (validating) { + validate(response); + } + return response; + } + + protected void validate(Response response) { + super.validate(response); + ValidationSupport.requireNonNull(response.status, "status"); + ValidationSupport.requireValueOrChildren(response); } protected Builder from(Response response) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CapabilityStatement.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CapabilityStatement.java index f2e483450bc..06d96b80e33 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CapabilityStatement.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CapabilityStatement.java @@ -261,28 +261,28 @@ private CapabilityStatement(Builder builder) { version = builder.version; name = builder.name; title = builder.title; - status = ValidationSupport.requireNonNull(builder.status, "status"); + status = builder.status; experimental = builder.experimental; - date = ValidationSupport.requireNonNull(builder.date, "date"); + date = builder.date; publisher = builder.publisher; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactDetail.class)); + contact = Collections.unmodifiableList(builder.contact); description = builder.description; - useContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.useContext, "useContext", UsageContext.class)); - jurisdiction = Collections.unmodifiableList(ValidationSupport.checkList(builder.jurisdiction, "jurisdiction", CodeableConcept.class)); + useContext = Collections.unmodifiableList(builder.useContext); + jurisdiction = Collections.unmodifiableList(builder.jurisdiction); purpose = builder.purpose; copyright = builder.copyright; - kind = ValidationSupport.requireNonNull(builder.kind, "kind"); - instantiates = Collections.unmodifiableList(ValidationSupport.checkList(builder.instantiates, "instantiates", Canonical.class)); - imports = Collections.unmodifiableList(ValidationSupport.checkList(builder.imports, "imports", Canonical.class)); + kind = builder.kind; + instantiates = Collections.unmodifiableList(builder.instantiates); + imports = Collections.unmodifiableList(builder.imports); software = builder.software; implementation = builder.implementation; - fhirVersion = ValidationSupport.requireNonNull(builder.fhirVersion, "fhirVersion"); - format = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.format, "format", Code.class)); - patchFormat = Collections.unmodifiableList(ValidationSupport.checkList(builder.patchFormat, "patchFormat", Code.class)); - implementationGuide = Collections.unmodifiableList(ValidationSupport.checkList(builder.implementationGuide, "implementationGuide", Canonical.class)); - rest = Collections.unmodifiableList(ValidationSupport.checkList(builder.rest, "rest", Rest.class)); - messaging = Collections.unmodifiableList(ValidationSupport.checkList(builder.messaging, "messaging", Messaging.class)); - document = Collections.unmodifiableList(ValidationSupport.checkList(builder.document, "document", Document.class)); + fhirVersion = builder.fhirVersion; + format = Collections.unmodifiableList(builder.format); + patchFormat = Collections.unmodifiableList(builder.patchFormat); + implementationGuide = Collections.unmodifiableList(builder.implementationGuide); + rest = Collections.unmodifiableList(builder.rest); + messaging = Collections.unmodifiableList(builder.messaging); + document = Collections.unmodifiableList(builder.document); } /** @@ -1619,7 +1619,30 @@ public Builder document(Collection document) { */ @Override public CapabilityStatement build() { - return new CapabilityStatement(this); + CapabilityStatement capabilityStatement = new CapabilityStatement(this); + if (validating) { + validate(capabilityStatement); + } + return capabilityStatement; + } + + protected void validate(CapabilityStatement capabilityStatement) { + super.validate(capabilityStatement); + ValidationSupport.requireNonNull(capabilityStatement.status, "status"); + ValidationSupport.requireNonNull(capabilityStatement.date, "date"); + ValidationSupport.checkList(capabilityStatement.contact, "contact", ContactDetail.class); + ValidationSupport.checkList(capabilityStatement.useContext, "useContext", UsageContext.class); + ValidationSupport.checkList(capabilityStatement.jurisdiction, "jurisdiction", CodeableConcept.class); + ValidationSupport.requireNonNull(capabilityStatement.kind, "kind"); + ValidationSupport.checkList(capabilityStatement.instantiates, "instantiates", Canonical.class); + ValidationSupport.checkList(capabilityStatement.imports, "imports", Canonical.class); + ValidationSupport.requireNonNull(capabilityStatement.fhirVersion, "fhirVersion"); + ValidationSupport.checkNonEmptyList(capabilityStatement.format, "format", Code.class); + ValidationSupport.checkList(capabilityStatement.patchFormat, "patchFormat", Code.class); + ValidationSupport.checkList(capabilityStatement.implementationGuide, "implementationGuide", Canonical.class); + ValidationSupport.checkList(capabilityStatement.rest, "rest", Rest.class); + ValidationSupport.checkList(capabilityStatement.messaging, "messaging", Messaging.class); + ValidationSupport.checkList(capabilityStatement.document, "document", Document.class); } protected Builder from(CapabilityStatement capabilityStatement) { @@ -1669,10 +1692,9 @@ public static class Software extends BackboneElement { private Software(Builder builder) { super(builder); - name = ValidationSupport.requireNonNull(builder.name, "name"); + name = builder.name; version = builder.version; releaseDate = builder.releaseDate; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1944,7 +1966,17 @@ public Builder releaseDate(DateTime releaseDate) { */ @Override public Software build() { - return new Software(this); + Software software = new Software(this); + if (validating) { + validate(software); + } + return software; + } + + protected void validate(Software software) { + super.validate(software); + ValidationSupport.requireNonNull(software.name, "name"); + ValidationSupport.requireValueOrChildren(software); } protected Builder from(Software software) { @@ -1973,11 +2005,9 @@ public static class Implementation extends BackboneElement { private Implementation(Builder builder) { super(builder); - description = ValidationSupport.requireNonNull(builder.description, "description"); + description = builder.description; url = builder.url; custodian = builder.custodian; - ValidationSupport.checkReferenceType(custodian, "custodian", "Organization"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -2258,7 +2288,18 @@ public Builder custodian(Reference custodian) { */ @Override public Implementation build() { - return new Implementation(this); + Implementation implementation = new Implementation(this); + if (validating) { + validate(implementation); + } + return implementation; + } + + protected void validate(Implementation implementation) { + super.validate(implementation); + ValidationSupport.requireNonNull(implementation.description, "description"); + ValidationSupport.checkReferenceType(implementation.custodian, "custodian", "Organization"); + ValidationSupport.requireValueOrChildren(implementation); } protected Builder from(Implementation implementation) { @@ -2297,15 +2338,14 @@ public static class Rest extends BackboneElement { private Rest(Builder builder) { super(builder); - mode = ValidationSupport.requireNonNull(builder.mode, "mode"); + mode = builder.mode; documentation = builder.documentation; security = builder.security; - resource = Collections.unmodifiableList(ValidationSupport.checkList(builder.resource, "resource", Resource.class)); - interaction = Collections.unmodifiableList(ValidationSupport.checkList(builder.interaction, "interaction", Interaction.class)); - searchParam = Collections.unmodifiableList(ValidationSupport.checkList(builder.searchParam, "searchParam", CapabilityStatement.Rest.Resource.SearchParam.class)); - operation = Collections.unmodifiableList(ValidationSupport.checkList(builder.operation, "operation", CapabilityStatement.Rest.Resource.Operation.class)); - compartment = Collections.unmodifiableList(ValidationSupport.checkList(builder.compartment, "compartment", Canonical.class)); - ValidationSupport.requireValueOrChildren(this); + resource = Collections.unmodifiableList(builder.resource); + interaction = Collections.unmodifiableList(builder.interaction); + searchParam = Collections.unmodifiableList(builder.searchParam); + operation = Collections.unmodifiableList(builder.operation); + compartment = Collections.unmodifiableList(builder.compartment); } /** @@ -2828,7 +2868,22 @@ public Builder compartment(Collection compartment) { */ @Override public Rest build() { - return new Rest(this); + Rest rest = new Rest(this); + if (validating) { + validate(rest); + } + return rest; + } + + protected void validate(Rest rest) { + super.validate(rest); + ValidationSupport.requireNonNull(rest.mode, "mode"); + ValidationSupport.checkList(rest.resource, "resource", Resource.class); + ValidationSupport.checkList(rest.interaction, "interaction", Interaction.class); + ValidationSupport.checkList(rest.searchParam, "searchParam", CapabilityStatement.Rest.Resource.SearchParam.class); + ValidationSupport.checkList(rest.operation, "operation", CapabilityStatement.Rest.Resource.Operation.class); + ValidationSupport.checkList(rest.compartment, "compartment", Canonical.class); + ValidationSupport.requireValueOrChildren(rest); } protected Builder from(Rest rest) { @@ -2864,9 +2919,8 @@ public static class Security extends BackboneElement { private Security(Builder builder) { super(builder); cors = builder.cors; - service = Collections.unmodifiableList(ValidationSupport.checkList(builder.service, "service", CodeableConcept.class)); + service = Collections.unmodifiableList(builder.service); description = builder.description; - ValidationSupport.requireValueOrChildren(this); } /** @@ -3151,7 +3205,17 @@ public Builder description(Markdown description) { */ @Override public Security build() { - return new Security(this); + Security security = new Security(this); + if (validating) { + validate(security); + } + return security; + } + + protected void validate(Security security) { + super.validate(security); + ValidationSupport.checkList(security.service, "service", CodeableConcept.class); + ValidationSupport.requireValueOrChildren(security); } protected Builder from(Security security) { @@ -3223,11 +3287,11 @@ public static class Resource extends BackboneElement { private Resource(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); + type = builder.type; profile = builder.profile; - supportedProfile = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportedProfile, "supportedProfile", Canonical.class)); + supportedProfile = Collections.unmodifiableList(builder.supportedProfile); documentation = builder.documentation; - interaction = Collections.unmodifiableList(ValidationSupport.checkList(builder.interaction, "interaction", Interaction.class)); + interaction = Collections.unmodifiableList(builder.interaction); versioning = builder.versioning; readHistory = builder.readHistory; updateCreate = builder.updateCreate; @@ -3235,12 +3299,11 @@ private Resource(Builder builder) { conditionalRead = builder.conditionalRead; conditionalUpdate = builder.conditionalUpdate; conditionalDelete = builder.conditionalDelete; - referencePolicy = Collections.unmodifiableList(ValidationSupport.checkList(builder.referencePolicy, "referencePolicy", ReferenceHandlingPolicy.class)); - searchInclude = Collections.unmodifiableList(ValidationSupport.checkList(builder.searchInclude, "searchInclude", String.class)); - searchRevInclude = Collections.unmodifiableList(ValidationSupport.checkList(builder.searchRevInclude, "searchRevInclude", String.class)); - searchParam = Collections.unmodifiableList(ValidationSupport.checkList(builder.searchParam, "searchParam", SearchParam.class)); - operation = Collections.unmodifiableList(ValidationSupport.checkList(builder.operation, "operation", Operation.class)); - ValidationSupport.requireValueOrChildren(this); + referencePolicy = Collections.unmodifiableList(builder.referencePolicy); + searchInclude = Collections.unmodifiableList(builder.searchInclude); + searchRevInclude = Collections.unmodifiableList(builder.searchRevInclude); + searchParam = Collections.unmodifiableList(builder.searchParam); + operation = Collections.unmodifiableList(builder.operation); } /** @@ -4090,7 +4153,24 @@ public Builder operation(Collection operation) { */ @Override public Resource build() { - return new Resource(this); + Resource resource = new Resource(this); + if (validating) { + validate(resource); + } + return resource; + } + + protected void validate(Resource resource) { + super.validate(resource); + ValidationSupport.requireNonNull(resource.type, "type"); + ValidationSupport.checkList(resource.supportedProfile, "supportedProfile", Canonical.class); + ValidationSupport.checkList(resource.interaction, "interaction", Interaction.class); + ValidationSupport.checkList(resource.referencePolicy, "referencePolicy", ReferenceHandlingPolicy.class); + ValidationSupport.checkList(resource.searchInclude, "searchInclude", String.class); + ValidationSupport.checkList(resource.searchRevInclude, "searchRevInclude", String.class); + ValidationSupport.checkList(resource.searchParam, "searchParam", SearchParam.class); + ValidationSupport.checkList(resource.operation, "operation", Operation.class); + ValidationSupport.requireValueOrChildren(resource); } protected Builder from(Resource resource) { @@ -4132,9 +4212,8 @@ public static class Interaction extends BackboneElement { private Interaction(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); + code = builder.code; documentation = builder.documentation; - ValidationSupport.requireValueOrChildren(this); } /** @@ -4379,7 +4458,17 @@ public Builder documentation(Markdown documentation) { */ @Override public Interaction build() { - return new Interaction(this); + Interaction interaction = new Interaction(this); + if (validating) { + validate(interaction); + } + return interaction; + } + + protected void validate(Interaction interaction) { + super.validate(interaction); + ValidationSupport.requireNonNull(interaction.code, "code"); + ValidationSupport.requireValueOrChildren(interaction); } protected Builder from(Interaction interaction) { @@ -4411,11 +4500,10 @@ public static class SearchParam extends BackboneElement { private SearchParam(Builder builder) { super(builder); - name = ValidationSupport.requireNonNull(builder.name, "name"); + name = builder.name; definition = builder.definition; - type = ValidationSupport.requireNonNull(builder.type, "type"); + type = builder.type; documentation = builder.documentation; - ValidationSupport.requireValueOrChildren(this); } /** @@ -4727,7 +4815,18 @@ public Builder documentation(Markdown documentation) { */ @Override public SearchParam build() { - return new SearchParam(this); + SearchParam searchParam = new SearchParam(this); + if (validating) { + validate(searchParam); + } + return searchParam; + } + + protected void validate(SearchParam searchParam) { + super.validate(searchParam); + ValidationSupport.requireNonNull(searchParam.name, "name"); + ValidationSupport.requireNonNull(searchParam.type, "type"); + ValidationSupport.requireValueOrChildren(searchParam); } protected Builder from(SearchParam searchParam) { @@ -4756,10 +4855,9 @@ public static class Operation extends BackboneElement { private Operation(Builder builder) { super(builder); - name = ValidationSupport.requireNonNull(builder.name, "name"); - definition = ValidationSupport.requireNonNull(builder.definition, "definition"); + name = builder.name; + definition = builder.definition; documentation = builder.documentation; - ValidationSupport.requireValueOrChildren(this); } /** @@ -5046,7 +5144,18 @@ public Builder documentation(Markdown documentation) { */ @Override public Operation build() { - return new Operation(this); + Operation operation = new Operation(this); + if (validating) { + validate(operation); + } + return operation; + } + + protected void validate(Operation operation) { + super.validate(operation); + ValidationSupport.requireNonNull(operation.name, "name"); + ValidationSupport.requireNonNull(operation.definition, "definition"); + ValidationSupport.requireValueOrChildren(operation); } protected Builder from(Operation operation) { @@ -5076,9 +5185,8 @@ public static class Interaction extends BackboneElement { private Interaction(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); + code = builder.code; documentation = builder.documentation; - ValidationSupport.requireValueOrChildren(this); } /** @@ -5323,7 +5431,17 @@ public Builder documentation(Markdown documentation) { */ @Override public Interaction build() { - return new Interaction(this); + Interaction interaction = new Interaction(this); + if (validating) { + validate(interaction); + } + return interaction; + } + + protected void validate(Interaction interaction) { + super.validate(interaction); + ValidationSupport.requireNonNull(interaction.code, "code"); + ValidationSupport.requireValueOrChildren(interaction); } protected Builder from(Interaction interaction) { @@ -5348,11 +5466,10 @@ public static class Messaging extends BackboneElement { private Messaging(Builder builder) { super(builder); - endpoint = Collections.unmodifiableList(ValidationSupport.checkList(builder.endpoint, "endpoint", Endpoint.class)); + endpoint = Collections.unmodifiableList(builder.endpoint); reliableCache = builder.reliableCache; documentation = builder.documentation; - supportedMessage = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportedMessage, "supportedMessage", SupportedMessage.class)); - ValidationSupport.requireValueOrChildren(this); + supportedMessage = Collections.unmodifiableList(builder.supportedMessage); } /** @@ -5690,7 +5807,18 @@ public Builder supportedMessage(Collection supportedMessage) { */ @Override public Messaging build() { - return new Messaging(this); + Messaging messaging = new Messaging(this); + if (validating) { + validate(messaging); + } + return messaging; + } + + protected void validate(Messaging messaging) { + super.validate(messaging); + ValidationSupport.checkList(messaging.endpoint, "endpoint", Endpoint.class); + ValidationSupport.checkList(messaging.supportedMessage, "supportedMessage", SupportedMessage.class); + ValidationSupport.requireValueOrChildren(messaging); } protected Builder from(Messaging messaging) { @@ -5720,9 +5848,8 @@ public static class Endpoint extends BackboneElement { private Endpoint(Builder builder) { super(builder); - protocol = ValidationSupport.requireNonNull(builder.protocol, "protocol"); - address = ValidationSupport.requireNonNull(builder.address, "address"); - ValidationSupport.requireValueOrChildren(this); + protocol = builder.protocol; + address = builder.address; } /** @@ -5970,7 +6097,18 @@ public Builder address(Url address) { */ @Override public Endpoint build() { - return new Endpoint(this); + Endpoint endpoint = new Endpoint(this); + if (validating) { + validate(endpoint); + } + return endpoint; + } + + protected void validate(Endpoint endpoint) { + super.validate(endpoint); + ValidationSupport.requireNonNull(endpoint.protocol, "protocol"); + ValidationSupport.requireNonNull(endpoint.address, "address"); + ValidationSupport.requireValueOrChildren(endpoint); } protected Builder from(Endpoint endpoint) { @@ -6001,9 +6139,8 @@ public static class SupportedMessage extends BackboneElement { private SupportedMessage(Builder builder) { super(builder); - mode = ValidationSupport.requireNonNull(builder.mode, "mode"); - definition = ValidationSupport.requireNonNull(builder.definition, "definition"); - ValidationSupport.requireValueOrChildren(this); + mode = builder.mode; + definition = builder.definition; } /** @@ -6249,7 +6386,18 @@ public Builder definition(Canonical definition) { */ @Override public SupportedMessage build() { - return new SupportedMessage(this); + SupportedMessage supportedMessage = new SupportedMessage(this); + if (validating) { + validate(supportedMessage); + } + return supportedMessage; + } + + protected void validate(SupportedMessage supportedMessage) { + super.validate(supportedMessage); + ValidationSupport.requireNonNull(supportedMessage.mode, "mode"); + ValidationSupport.requireNonNull(supportedMessage.definition, "definition"); + ValidationSupport.requireValueOrChildren(supportedMessage); } protected Builder from(SupportedMessage supportedMessage) { @@ -6282,10 +6430,9 @@ public static class Document extends BackboneElement { private Document(Builder builder) { super(builder); - mode = ValidationSupport.requireNonNull(builder.mode, "mode"); + mode = builder.mode; documentation = builder.documentation; - profile = ValidationSupport.requireNonNull(builder.profile, "profile"); - ValidationSupport.requireValueOrChildren(this); + profile = builder.profile; } /** @@ -6562,7 +6709,18 @@ public Builder profile(Canonical profile) { */ @Override public Document build() { - return new Document(this); + Document document = new Document(this); + if (validating) { + validate(document); + } + return document; + } + + protected void validate(Document document) { + super.validate(document); + ValidationSupport.requireNonNull(document.mode, "mode"); + ValidationSupport.requireNonNull(document.profile, "profile"); + ValidationSupport.requireValueOrChildren(document); } protected Builder from(Document document) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CarePlan.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CarePlan.java index dc3ed73284f..b491bcc4a2e 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CarePlan.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CarePlan.java @@ -141,39 +141,29 @@ public class CarePlan extends DomainResource { private CarePlan(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - instantiatesCanonical = Collections.unmodifiableList(ValidationSupport.checkList(builder.instantiatesCanonical, "instantiatesCanonical", Canonical.class)); - instantiatesUri = Collections.unmodifiableList(ValidationSupport.checkList(builder.instantiatesUri, "instantiatesUri", Uri.class)); - basedOn = Collections.unmodifiableList(ValidationSupport.checkList(builder.basedOn, "basedOn", Reference.class)); - replaces = Collections.unmodifiableList(ValidationSupport.checkList(builder.replaces, "replaces", Reference.class)); - partOf = Collections.unmodifiableList(ValidationSupport.checkList(builder.partOf, "partOf", Reference.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - intent = ValidationSupport.requireNonNull(builder.intent, "intent"); - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", CodeableConcept.class)); + identifier = Collections.unmodifiableList(builder.identifier); + instantiatesCanonical = Collections.unmodifiableList(builder.instantiatesCanonical); + instantiatesUri = Collections.unmodifiableList(builder.instantiatesUri); + basedOn = Collections.unmodifiableList(builder.basedOn); + replaces = Collections.unmodifiableList(builder.replaces); + partOf = Collections.unmodifiableList(builder.partOf); + status = builder.status; + intent = builder.intent; + category = Collections.unmodifiableList(builder.category); title = builder.title; description = builder.description; - subject = ValidationSupport.requireNonNull(builder.subject, "subject"); + subject = builder.subject; encounter = builder.encounter; period = builder.period; created = builder.created; author = builder.author; - contributor = Collections.unmodifiableList(ValidationSupport.checkList(builder.contributor, "contributor", Reference.class)); - careTeam = Collections.unmodifiableList(ValidationSupport.checkList(builder.careTeam, "careTeam", Reference.class)); - addresses = Collections.unmodifiableList(ValidationSupport.checkList(builder.addresses, "addresses", Reference.class)); - supportingInfo = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportingInfo, "supportingInfo", Reference.class)); - goal = Collections.unmodifiableList(ValidationSupport.checkList(builder.goal, "goal", Reference.class)); - activity = Collections.unmodifiableList(ValidationSupport.checkList(builder.activity, "activity", Activity.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - ValidationSupport.checkReferenceType(basedOn, "basedOn", "CarePlan"); - ValidationSupport.checkReferenceType(replaces, "replaces", "CarePlan"); - ValidationSupport.checkReferenceType(partOf, "partOf", "CarePlan"); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(author, "author", "Patient", "Practitioner", "PractitionerRole", "Device", "RelatedPerson", "Organization", "CareTeam"); - ValidationSupport.checkReferenceType(contributor, "contributor", "Patient", "Practitioner", "PractitionerRole", "Device", "RelatedPerson", "Organization", "CareTeam"); - ValidationSupport.checkReferenceType(careTeam, "careTeam", "CareTeam"); - ValidationSupport.checkReferenceType(addresses, "addresses", "Condition"); - ValidationSupport.checkReferenceType(goal, "goal", "Goal"); + contributor = Collections.unmodifiableList(builder.contributor); + careTeam = Collections.unmodifiableList(builder.careTeam); + addresses = Collections.unmodifiableList(builder.addresses); + supportingInfo = Collections.unmodifiableList(builder.supportingInfo); + goal = Collections.unmodifiableList(builder.goal); + activity = Collections.unmodifiableList(builder.activity); + note = Collections.unmodifiableList(builder.note); } /** @@ -1545,7 +1535,42 @@ public Builder note(Collection note) { */ @Override public CarePlan build() { - return new CarePlan(this); + CarePlan carePlan = new CarePlan(this); + if (validating) { + validate(carePlan); + } + return carePlan; + } + + protected void validate(CarePlan carePlan) { + super.validate(carePlan); + ValidationSupport.checkList(carePlan.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(carePlan.instantiatesCanonical, "instantiatesCanonical", Canonical.class); + ValidationSupport.checkList(carePlan.instantiatesUri, "instantiatesUri", Uri.class); + ValidationSupport.checkList(carePlan.basedOn, "basedOn", Reference.class); + ValidationSupport.checkList(carePlan.replaces, "replaces", Reference.class); + ValidationSupport.checkList(carePlan.partOf, "partOf", Reference.class); + ValidationSupport.requireNonNull(carePlan.status, "status"); + ValidationSupport.requireNonNull(carePlan.intent, "intent"); + ValidationSupport.checkList(carePlan.category, "category", CodeableConcept.class); + ValidationSupport.requireNonNull(carePlan.subject, "subject"); + ValidationSupport.checkList(carePlan.contributor, "contributor", Reference.class); + ValidationSupport.checkList(carePlan.careTeam, "careTeam", Reference.class); + ValidationSupport.checkList(carePlan.addresses, "addresses", Reference.class); + ValidationSupport.checkList(carePlan.supportingInfo, "supportingInfo", Reference.class); + ValidationSupport.checkList(carePlan.goal, "goal", Reference.class); + ValidationSupport.checkList(carePlan.activity, "activity", Activity.class); + ValidationSupport.checkList(carePlan.note, "note", Annotation.class); + ValidationSupport.checkReferenceType(carePlan.basedOn, "basedOn", "CarePlan"); + ValidationSupport.checkReferenceType(carePlan.replaces, "replaces", "CarePlan"); + ValidationSupport.checkReferenceType(carePlan.partOf, "partOf", "CarePlan"); + ValidationSupport.checkReferenceType(carePlan.subject, "subject", "Patient", "Group"); + ValidationSupport.checkReferenceType(carePlan.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(carePlan.author, "author", "Patient", "Practitioner", "PractitionerRole", "Device", "RelatedPerson", "Organization", "CareTeam"); + ValidationSupport.checkReferenceType(carePlan.contributor, "contributor", "Patient", "Practitioner", "PractitionerRole", "Device", "RelatedPerson", "Organization", "CareTeam"); + ValidationSupport.checkReferenceType(carePlan.careTeam, "careTeam", "CareTeam"); + ValidationSupport.checkReferenceType(carePlan.addresses, "addresses", "Condition"); + ValidationSupport.checkReferenceType(carePlan.goal, "goal", "Goal"); } protected Builder from(CarePlan carePlan) { @@ -1597,13 +1622,11 @@ public static class Activity extends BackboneElement { private Activity(Builder builder) { super(builder); - outcomeCodeableConcept = Collections.unmodifiableList(ValidationSupport.checkList(builder.outcomeCodeableConcept, "outcomeCodeableConcept", CodeableConcept.class)); - outcomeReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.outcomeReference, "outcomeReference", Reference.class)); - progress = Collections.unmodifiableList(ValidationSupport.checkList(builder.progress, "progress", Annotation.class)); + outcomeCodeableConcept = Collections.unmodifiableList(builder.outcomeCodeableConcept); + outcomeReference = Collections.unmodifiableList(builder.outcomeReference); + progress = Collections.unmodifiableList(builder.progress); reference = builder.reference; detail = builder.detail; - ValidationSupport.checkReferenceType(reference, "reference", "Appointment", "CommunicationRequest", "DeviceRequest", "MedicationRequest", "NutritionOrder", "Task", "ServiceRequest", "VisionPrescription", "RequestGroup"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -2010,7 +2033,20 @@ public Builder detail(Detail detail) { */ @Override public Activity build() { - return new Activity(this); + Activity activity = new Activity(this); + if (validating) { + validate(activity); + } + return activity; + } + + protected void validate(Activity activity) { + super.validate(activity); + ValidationSupport.checkList(activity.outcomeCodeableConcept, "outcomeCodeableConcept", CodeableConcept.class); + ValidationSupport.checkList(activity.outcomeReference, "outcomeReference", Reference.class); + ValidationSupport.checkList(activity.progress, "progress", Annotation.class); + ValidationSupport.checkReferenceType(activity.reference, "reference", "Appointment", "CommunicationRequest", "DeviceRequest", "MedicationRequest", "NutritionOrder", "Task", "ServiceRequest", "VisionPrescription", "RequestGroup"); + ValidationSupport.requireValueOrChildren(activity); } protected Builder from(Activity activity) { @@ -2088,28 +2124,22 @@ public static class Detail extends BackboneElement { private Detail(Builder builder) { super(builder); kind = builder.kind; - instantiatesCanonical = Collections.unmodifiableList(ValidationSupport.checkList(builder.instantiatesCanonical, "instantiatesCanonical", Canonical.class)); - instantiatesUri = Collections.unmodifiableList(ValidationSupport.checkList(builder.instantiatesUri, "instantiatesUri", Uri.class)); + instantiatesCanonical = Collections.unmodifiableList(builder.instantiatesCanonical); + instantiatesUri = Collections.unmodifiableList(builder.instantiatesUri); code = builder.code; - reasonCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonCode, "reasonCode", CodeableConcept.class)); - reasonReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonReference, "reasonReference", Reference.class)); - goal = Collections.unmodifiableList(ValidationSupport.checkList(builder.goal, "goal", Reference.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + reasonCode = Collections.unmodifiableList(builder.reasonCode); + reasonReference = Collections.unmodifiableList(builder.reasonReference); + goal = Collections.unmodifiableList(builder.goal); + status = builder.status; statusReason = builder.statusReason; doNotPerform = builder.doNotPerform; - scheduled = ValidationSupport.choiceElement(builder.scheduled, "scheduled", Timing.class, Period.class, String.class); + scheduled = builder.scheduled; location = builder.location; - performer = Collections.unmodifiableList(ValidationSupport.checkList(builder.performer, "performer", Reference.class)); - product = ValidationSupport.choiceElement(builder.product, "product", CodeableConcept.class, Reference.class); + performer = Collections.unmodifiableList(builder.performer); + product = builder.product; dailyAmount = builder.dailyAmount; quantity = builder.quantity; description = builder.description; - ValidationSupport.checkReferenceType(reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference"); - ValidationSupport.checkReferenceType(goal, "goal", "Goal"); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.checkReferenceType(performer, "performer", "Practitioner", "PractitionerRole", "Organization", "RelatedPerson", "Patient", "CareTeam", "HealthcareService", "Device"); - ValidationSupport.checkReferenceType(product, "product", "Medication", "Substance"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -3004,7 +3034,30 @@ public Builder description(String description) { */ @Override public Detail build() { - return new Detail(this); + Detail detail = new Detail(this); + if (validating) { + validate(detail); + } + return detail; + } + + protected void validate(Detail detail) { + super.validate(detail); + ValidationSupport.checkList(detail.instantiatesCanonical, "instantiatesCanonical", Canonical.class); + ValidationSupport.checkList(detail.instantiatesUri, "instantiatesUri", Uri.class); + ValidationSupport.checkList(detail.reasonCode, "reasonCode", CodeableConcept.class); + ValidationSupport.checkList(detail.reasonReference, "reasonReference", Reference.class); + ValidationSupport.checkList(detail.goal, "goal", Reference.class); + ValidationSupport.requireNonNull(detail.status, "status"); + ValidationSupport.choiceElement(detail.scheduled, "scheduled", Timing.class, Period.class, String.class); + ValidationSupport.checkList(detail.performer, "performer", Reference.class); + ValidationSupport.choiceElement(detail.product, "product", CodeableConcept.class, Reference.class); + ValidationSupport.checkReferenceType(detail.reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference"); + ValidationSupport.checkReferenceType(detail.goal, "goal", "Goal"); + ValidationSupport.checkReferenceType(detail.location, "location", "Location"); + ValidationSupport.checkReferenceType(detail.performer, "performer", "Practitioner", "PractitionerRole", "Organization", "RelatedPerson", "Patient", "CareTeam", "HealthcareService", "Device"); + ValidationSupport.checkReferenceType(detail.product, "product", "Medication", "Substance"); + ValidationSupport.requireValueOrChildren(detail); } protected Builder from(Detail detail) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CareTeam.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CareTeam.java index 16d339f9a14..9e09c20387c 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CareTeam.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CareTeam.java @@ -103,23 +103,19 @@ public class CareTeam extends DomainResource { private CareTeam(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); status = builder.status; - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", CodeableConcept.class)); + category = Collections.unmodifiableList(builder.category); name = builder.name; subject = builder.subject; encounter = builder.encounter; period = builder.period; - participant = Collections.unmodifiableList(ValidationSupport.checkList(builder.participant, "participant", Participant.class)); - reasonCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonCode, "reasonCode", CodeableConcept.class)); - reasonReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonReference, "reasonReference", Reference.class)); - managingOrganization = Collections.unmodifiableList(ValidationSupport.checkList(builder.managingOrganization, "managingOrganization", Reference.class)); - telecom = Collections.unmodifiableList(ValidationSupport.checkList(builder.telecom, "telecom", ContactPoint.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(reasonReference, "reasonReference", "Condition"); - ValidationSupport.checkReferenceType(managingOrganization, "managingOrganization", "Organization"); + participant = Collections.unmodifiableList(builder.participant); + reasonCode = Collections.unmodifiableList(builder.reasonCode); + reasonReference = Collections.unmodifiableList(builder.reasonReference); + managingOrganization = Collections.unmodifiableList(builder.managingOrganization); + telecom = Collections.unmodifiableList(builder.telecom); + note = Collections.unmodifiableList(builder.note); } /** @@ -981,7 +977,27 @@ public Builder note(Collection note) { */ @Override public CareTeam build() { - return new CareTeam(this); + CareTeam careTeam = new CareTeam(this); + if (validating) { + validate(careTeam); + } + return careTeam; + } + + protected void validate(CareTeam careTeam) { + super.validate(careTeam); + ValidationSupport.checkList(careTeam.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(careTeam.category, "category", CodeableConcept.class); + ValidationSupport.checkList(careTeam.participant, "participant", Participant.class); + ValidationSupport.checkList(careTeam.reasonCode, "reasonCode", CodeableConcept.class); + ValidationSupport.checkList(careTeam.reasonReference, "reasonReference", Reference.class); + ValidationSupport.checkList(careTeam.managingOrganization, "managingOrganization", Reference.class); + ValidationSupport.checkList(careTeam.telecom, "telecom", ContactPoint.class); + ValidationSupport.checkList(careTeam.note, "note", Annotation.class); + ValidationSupport.checkReferenceType(careTeam.subject, "subject", "Patient", "Group"); + ValidationSupport.checkReferenceType(careTeam.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(careTeam.reasonReference, "reasonReference", "Condition"); + ValidationSupport.checkReferenceType(careTeam.managingOrganization, "managingOrganization", "Organization"); } protected Builder from(CareTeam careTeam) { @@ -1025,13 +1041,10 @@ public static class Participant extends BackboneElement { private Participant(Builder builder) { super(builder); - role = Collections.unmodifiableList(ValidationSupport.checkList(builder.role, "role", CodeableConcept.class)); + role = Collections.unmodifiableList(builder.role); member = builder.member; onBehalfOf = builder.onBehalfOf; period = builder.period; - ValidationSupport.checkReferenceType(member, "member", "Practitioner", "PractitionerRole", "RelatedPerson", "Patient", "Organization", "CareTeam"); - ValidationSupport.checkReferenceType(onBehalfOf, "onBehalfOf", "Organization"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1363,7 +1376,19 @@ public Builder period(Period period) { */ @Override public Participant build() { - return new Participant(this); + Participant participant = new Participant(this); + if (validating) { + validate(participant); + } + return participant; + } + + protected void validate(Participant participant) { + super.validate(participant); + ValidationSupport.checkList(participant.role, "role", CodeableConcept.class); + ValidationSupport.checkReferenceType(participant.member, "member", "Practitioner", "PractitionerRole", "RelatedPerson", "Patient", "Organization", "CareTeam"); + ValidationSupport.checkReferenceType(participant.onBehalfOf, "onBehalfOf", "Organization"); + ValidationSupport.requireValueOrChildren(participant); } protected Builder from(Participant participant) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CatalogEntry.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CatalogEntry.java index 43310682407..3c72f3a66b3 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CatalogEntry.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CatalogEntry.java @@ -77,20 +77,19 @@ public class CatalogEntry extends DomainResource { private CatalogEntry(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); type = builder.type; - orderable = ValidationSupport.requireNonNull(builder.orderable, "orderable"); - referencedItem = ValidationSupport.requireNonNull(builder.referencedItem, "referencedItem"); - additionalIdentifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.additionalIdentifier, "additionalIdentifier", Identifier.class)); - classification = Collections.unmodifiableList(ValidationSupport.checkList(builder.classification, "classification", CodeableConcept.class)); + orderable = builder.orderable; + referencedItem = builder.referencedItem; + additionalIdentifier = Collections.unmodifiableList(builder.additionalIdentifier); + classification = Collections.unmodifiableList(builder.classification); status = builder.status; validityPeriod = builder.validityPeriod; validTo = builder.validTo; lastUpdated = builder.lastUpdated; - additionalCharacteristic = Collections.unmodifiableList(ValidationSupport.checkList(builder.additionalCharacteristic, "additionalCharacteristic", CodeableConcept.class)); - additionalClassification = Collections.unmodifiableList(ValidationSupport.checkList(builder.additionalClassification, "additionalClassification", CodeableConcept.class)); - relatedEntry = Collections.unmodifiableList(ValidationSupport.checkList(builder.relatedEntry, "relatedEntry", RelatedEntry.class)); - ValidationSupport.checkReferenceType(referencedItem, "referencedItem", "Medication", "Device", "Organization", "Practitioner", "PractitionerRole", "HealthcareService", "ActivityDefinition", "PlanDefinition", "SpecimenDefinition", "ObservationDefinition", "Binary"); + additionalCharacteristic = Collections.unmodifiableList(builder.additionalCharacteristic); + additionalClassification = Collections.unmodifiableList(builder.additionalClassification); + relatedEntry = Collections.unmodifiableList(builder.relatedEntry); } /** @@ -904,7 +903,24 @@ public Builder relatedEntry(Collection relatedEntry) { */ @Override public CatalogEntry build() { - return new CatalogEntry(this); + CatalogEntry catalogEntry = new CatalogEntry(this); + if (validating) { + validate(catalogEntry); + } + return catalogEntry; + } + + protected void validate(CatalogEntry catalogEntry) { + super.validate(catalogEntry); + ValidationSupport.checkList(catalogEntry.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(catalogEntry.orderable, "orderable"); + ValidationSupport.requireNonNull(catalogEntry.referencedItem, "referencedItem"); + ValidationSupport.checkList(catalogEntry.additionalIdentifier, "additionalIdentifier", Identifier.class); + ValidationSupport.checkList(catalogEntry.classification, "classification", CodeableConcept.class); + ValidationSupport.checkList(catalogEntry.additionalCharacteristic, "additionalCharacteristic", CodeableConcept.class); + ValidationSupport.checkList(catalogEntry.additionalClassification, "additionalClassification", CodeableConcept.class); + ValidationSupport.checkList(catalogEntry.relatedEntry, "relatedEntry", RelatedEntry.class); + ValidationSupport.checkReferenceType(catalogEntry.referencedItem, "referencedItem", "Medication", "Device", "Organization", "Practitioner", "PractitionerRole", "HealthcareService", "ActivityDefinition", "PlanDefinition", "SpecimenDefinition", "ObservationDefinition", "Binary"); } protected Builder from(CatalogEntry catalogEntry) { @@ -944,10 +960,8 @@ public static class RelatedEntry extends BackboneElement { private RelatedEntry(Builder builder) { super(builder); - relationtype = ValidationSupport.requireNonNull(builder.relationtype, "relationtype"); - item = ValidationSupport.requireNonNull(builder.item, "item"); - ValidationSupport.checkReferenceType(item, "item", "CatalogEntry"); - ValidationSupport.requireValueOrChildren(this); + relationtype = builder.relationtype; + item = builder.item; } /** @@ -1198,7 +1212,19 @@ public Builder item(Reference item) { */ @Override public RelatedEntry build() { - return new RelatedEntry(this); + RelatedEntry relatedEntry = new RelatedEntry(this); + if (validating) { + validate(relatedEntry); + } + return relatedEntry; + } + + protected void validate(RelatedEntry relatedEntry) { + super.validate(relatedEntry); + ValidationSupport.requireNonNull(relatedEntry.relationtype, "relationtype"); + ValidationSupport.requireNonNull(relatedEntry.item, "item"); + ValidationSupport.checkReferenceType(relatedEntry.item, "item", "CatalogEntry"); + ValidationSupport.requireValueOrChildren(relatedEntry); } protected Builder from(RelatedEntry relatedEntry) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ChargeItem.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ChargeItem.java index 618e9ec5f64..53940e45f23 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ChargeItem.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ChargeItem.java @@ -144,42 +144,32 @@ public class ChargeItem extends DomainResource { private ChargeItem(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - definitionUri = Collections.unmodifiableList(ValidationSupport.checkList(builder.definitionUri, "definitionUri", Uri.class)); - definitionCanonical = Collections.unmodifiableList(ValidationSupport.checkList(builder.definitionCanonical, "definitionCanonical", Canonical.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - partOf = Collections.unmodifiableList(ValidationSupport.checkList(builder.partOf, "partOf", Reference.class)); - code = ValidationSupport.requireNonNull(builder.code, "code"); - subject = ValidationSupport.requireNonNull(builder.subject, "subject"); + identifier = Collections.unmodifiableList(builder.identifier); + definitionUri = Collections.unmodifiableList(builder.definitionUri); + definitionCanonical = Collections.unmodifiableList(builder.definitionCanonical); + status = builder.status; + partOf = Collections.unmodifiableList(builder.partOf); + code = builder.code; + subject = builder.subject; context = builder.context; - occurrence = ValidationSupport.choiceElement(builder.occurrence, "occurrence", DateTime.class, Period.class, Timing.class); - performer = Collections.unmodifiableList(ValidationSupport.checkList(builder.performer, "performer", Performer.class)); + occurrence = builder.occurrence; + performer = Collections.unmodifiableList(builder.performer); performingOrganization = builder.performingOrganization; requestingOrganization = builder.requestingOrganization; costCenter = builder.costCenter; quantity = builder.quantity; - bodysite = Collections.unmodifiableList(ValidationSupport.checkList(builder.bodysite, "bodysite", CodeableConcept.class)); + bodysite = Collections.unmodifiableList(builder.bodysite); factorOverride = builder.factorOverride; priceOverride = builder.priceOverride; overrideReason = builder.overrideReason; enterer = builder.enterer; enteredDate = builder.enteredDate; - reason = Collections.unmodifiableList(ValidationSupport.checkList(builder.reason, "reason", CodeableConcept.class)); - service = Collections.unmodifiableList(ValidationSupport.checkList(builder.service, "service", Reference.class)); - product = ValidationSupport.choiceElement(builder.product, "product", Reference.class, CodeableConcept.class); - account = Collections.unmodifiableList(ValidationSupport.checkList(builder.account, "account", Reference.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - supportingInformation = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportingInformation, "supportingInformation", Reference.class)); - ValidationSupport.checkReferenceType(partOf, "partOf", "ChargeItem"); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group"); - ValidationSupport.checkReferenceType(context, "context", "Encounter", "EpisodeOfCare"); - ValidationSupport.checkReferenceType(performingOrganization, "performingOrganization", "Organization"); - ValidationSupport.checkReferenceType(requestingOrganization, "requestingOrganization", "Organization"); - ValidationSupport.checkReferenceType(costCenter, "costCenter", "Organization"); - ValidationSupport.checkReferenceType(enterer, "enterer", "Practitioner", "PractitionerRole", "Organization", "Patient", "Device", "RelatedPerson"); - ValidationSupport.checkReferenceType(service, "service", "DiagnosticReport", "ImagingStudy", "Immunization", "MedicationAdministration", "MedicationDispense", "Observation", "Procedure", "SupplyDelivery"); - ValidationSupport.checkReferenceType(product, "product", "Device", "Medication", "Substance"); - ValidationSupport.checkReferenceType(account, "account", "Account"); + reason = Collections.unmodifiableList(builder.reason); + service = Collections.unmodifiableList(builder.service); + product = builder.product; + account = Collections.unmodifiableList(builder.account); + note = Collections.unmodifiableList(builder.note); + supportingInformation = Collections.unmodifiableList(builder.supportingInformation); } /** @@ -1557,7 +1547,41 @@ public Builder supportingInformation(Collection supportingInformation */ @Override public ChargeItem build() { - return new ChargeItem(this); + ChargeItem chargeItem = new ChargeItem(this); + if (validating) { + validate(chargeItem); + } + return chargeItem; + } + + protected void validate(ChargeItem chargeItem) { + super.validate(chargeItem); + ValidationSupport.checkList(chargeItem.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(chargeItem.definitionUri, "definitionUri", Uri.class); + ValidationSupport.checkList(chargeItem.definitionCanonical, "definitionCanonical", Canonical.class); + ValidationSupport.requireNonNull(chargeItem.status, "status"); + ValidationSupport.checkList(chargeItem.partOf, "partOf", Reference.class); + ValidationSupport.requireNonNull(chargeItem.code, "code"); + ValidationSupport.requireNonNull(chargeItem.subject, "subject"); + ValidationSupport.choiceElement(chargeItem.occurrence, "occurrence", DateTime.class, Period.class, Timing.class); + ValidationSupport.checkList(chargeItem.performer, "performer", Performer.class); + ValidationSupport.checkList(chargeItem.bodysite, "bodysite", CodeableConcept.class); + ValidationSupport.checkList(chargeItem.reason, "reason", CodeableConcept.class); + ValidationSupport.checkList(chargeItem.service, "service", Reference.class); + ValidationSupport.choiceElement(chargeItem.product, "product", Reference.class, CodeableConcept.class); + ValidationSupport.checkList(chargeItem.account, "account", Reference.class); + ValidationSupport.checkList(chargeItem.note, "note", Annotation.class); + ValidationSupport.checkList(chargeItem.supportingInformation, "supportingInformation", Reference.class); + ValidationSupport.checkReferenceType(chargeItem.partOf, "partOf", "ChargeItem"); + ValidationSupport.checkReferenceType(chargeItem.subject, "subject", "Patient", "Group"); + ValidationSupport.checkReferenceType(chargeItem.context, "context", "Encounter", "EpisodeOfCare"); + ValidationSupport.checkReferenceType(chargeItem.performingOrganization, "performingOrganization", "Organization"); + ValidationSupport.checkReferenceType(chargeItem.requestingOrganization, "requestingOrganization", "Organization"); + ValidationSupport.checkReferenceType(chargeItem.costCenter, "costCenter", "Organization"); + ValidationSupport.checkReferenceType(chargeItem.enterer, "enterer", "Practitioner", "PractitionerRole", "Organization", "Patient", "Device", "RelatedPerson"); + ValidationSupport.checkReferenceType(chargeItem.service, "service", "DiagnosticReport", "ImagingStudy", "Immunization", "MedicationAdministration", "MedicationDispense", "Observation", "Procedure", "SupplyDelivery"); + ValidationSupport.checkReferenceType(chargeItem.product, "product", "Device", "Medication", "Substance"); + ValidationSupport.checkReferenceType(chargeItem.account, "account", "Account"); } protected Builder from(ChargeItem chargeItem) { @@ -1610,9 +1634,7 @@ public static class Performer extends BackboneElement { private Performer(Builder builder) { super(builder); function = builder.function; - actor = ValidationSupport.requireNonNull(builder.actor, "actor"); - ValidationSupport.checkReferenceType(actor, "actor", "Practitioner", "PractitionerRole", "Organization", "CareTeam", "Patient", "Device", "RelatedPerson"); - ValidationSupport.requireValueOrChildren(this); + actor = builder.actor; } /** @@ -1866,7 +1888,18 @@ public Builder actor(Reference actor) { */ @Override public Performer build() { - return new Performer(this); + Performer performer = new Performer(this); + if (validating) { + validate(performer); + } + return performer; + } + + protected void validate(Performer performer) { + super.validate(performer); + ValidationSupport.requireNonNull(performer.actor, "actor"); + ValidationSupport.checkReferenceType(performer.actor, "actor", "Practitioner", "PractitionerRole", "Organization", "CareTeam", "Patient", "Device", "RelatedPerson"); + ValidationSupport.requireValueOrChildren(performer); } protected Builder from(Performer performer) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ChargeItemDefinition.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ChargeItemDefinition.java index f0479c32281..41fb3765af9 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ChargeItemDefinition.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ChargeItemDefinition.java @@ -139,30 +139,29 @@ public class ChargeItemDefinition extends DomainResource { private ChargeItemDefinition(Builder builder) { super(builder); - url = ValidationSupport.requireNonNull(builder.url, "url"); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + url = builder.url; + identifier = Collections.unmodifiableList(builder.identifier); version = builder.version; title = builder.title; - derivedFromUri = Collections.unmodifiableList(ValidationSupport.checkList(builder.derivedFromUri, "derivedFromUri", Uri.class)); - partOf = Collections.unmodifiableList(ValidationSupport.checkList(builder.partOf, "partOf", Canonical.class)); - replaces = Collections.unmodifiableList(ValidationSupport.checkList(builder.replaces, "replaces", Canonical.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + derivedFromUri = Collections.unmodifiableList(builder.derivedFromUri); + partOf = Collections.unmodifiableList(builder.partOf); + replaces = Collections.unmodifiableList(builder.replaces); + status = builder.status; experimental = builder.experimental; date = builder.date; publisher = builder.publisher; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactDetail.class)); + contact = Collections.unmodifiableList(builder.contact); description = builder.description; - useContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.useContext, "useContext", UsageContext.class)); - jurisdiction = Collections.unmodifiableList(ValidationSupport.checkList(builder.jurisdiction, "jurisdiction", CodeableConcept.class)); + useContext = Collections.unmodifiableList(builder.useContext); + jurisdiction = Collections.unmodifiableList(builder.jurisdiction); copyright = builder.copyright; approvalDate = builder.approvalDate; lastReviewDate = builder.lastReviewDate; effectivePeriod = builder.effectivePeriod; code = builder.code; - instance = Collections.unmodifiableList(ValidationSupport.checkList(builder.instance, "instance", Reference.class)); - applicability = Collections.unmodifiableList(ValidationSupport.checkList(builder.applicability, "applicability", Applicability.class)); - propertyGroup = Collections.unmodifiableList(ValidationSupport.checkList(builder.propertyGroup, "propertyGroup", PropertyGroup.class)); - ValidationSupport.checkReferenceType(instance, "instance", "Medication", "Substance", "Device"); + instance = Collections.unmodifiableList(builder.instance); + applicability = Collections.unmodifiableList(builder.applicability); + propertyGroup = Collections.unmodifiableList(builder.propertyGroup); } /** @@ -1391,7 +1390,28 @@ public Builder propertyGroup(Collection propertyGroup) { */ @Override public ChargeItemDefinition build() { - return new ChargeItemDefinition(this); + ChargeItemDefinition chargeItemDefinition = new ChargeItemDefinition(this); + if (validating) { + validate(chargeItemDefinition); + } + return chargeItemDefinition; + } + + protected void validate(ChargeItemDefinition chargeItemDefinition) { + super.validate(chargeItemDefinition); + ValidationSupport.requireNonNull(chargeItemDefinition.url, "url"); + ValidationSupport.checkList(chargeItemDefinition.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(chargeItemDefinition.derivedFromUri, "derivedFromUri", Uri.class); + ValidationSupport.checkList(chargeItemDefinition.partOf, "partOf", Canonical.class); + ValidationSupport.checkList(chargeItemDefinition.replaces, "replaces", Canonical.class); + ValidationSupport.requireNonNull(chargeItemDefinition.status, "status"); + ValidationSupport.checkList(chargeItemDefinition.contact, "contact", ContactDetail.class); + ValidationSupport.checkList(chargeItemDefinition.useContext, "useContext", UsageContext.class); + ValidationSupport.checkList(chargeItemDefinition.jurisdiction, "jurisdiction", CodeableConcept.class); + ValidationSupport.checkList(chargeItemDefinition.instance, "instance", Reference.class); + ValidationSupport.checkList(chargeItemDefinition.applicability, "applicability", Applicability.class); + ValidationSupport.checkList(chargeItemDefinition.propertyGroup, "propertyGroup", PropertyGroup.class); + ValidationSupport.checkReferenceType(chargeItemDefinition.instance, "instance", "Medication", "Substance", "Device"); } protected Builder from(ChargeItemDefinition chargeItemDefinition) { @@ -1436,7 +1456,6 @@ private Applicability(Builder builder) { description = builder.description; language = builder.language; expression = builder.expression; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1707,7 +1726,16 @@ public Builder expression(String expression) { */ @Override public Applicability build() { - return new Applicability(this); + Applicability applicability = new Applicability(this); + if (validating) { + validate(applicability); + } + return applicability; + } + + protected void validate(Applicability applicability) { + super.validate(applicability); + ValidationSupport.requireValueOrChildren(applicability); } protected Builder from(Applicability applicability) { @@ -1730,9 +1758,8 @@ public static class PropertyGroup extends BackboneElement { private PropertyGroup(Builder builder) { super(builder); - applicability = Collections.unmodifiableList(ValidationSupport.checkList(builder.applicability, "applicability", ChargeItemDefinition.Applicability.class)); - priceComponent = Collections.unmodifiableList(ValidationSupport.checkList(builder.priceComponent, "priceComponent", PriceComponent.class)); - ValidationSupport.requireValueOrChildren(this); + applicability = Collections.unmodifiableList(builder.applicability); + priceComponent = Collections.unmodifiableList(builder.priceComponent); } /** @@ -2017,7 +2044,18 @@ public Builder priceComponent(Collection priceComponent) { */ @Override public PropertyGroup build() { - return new PropertyGroup(this); + PropertyGroup propertyGroup = new PropertyGroup(this); + if (validating) { + validate(propertyGroup); + } + return propertyGroup; + } + + protected void validate(PropertyGroup propertyGroup) { + super.validate(propertyGroup); + ValidationSupport.checkList(propertyGroup.applicability, "applicability", ChargeItemDefinition.Applicability.class); + ValidationSupport.checkList(propertyGroup.priceComponent, "priceComponent", PriceComponent.class); + ValidationSupport.requireValueOrChildren(propertyGroup); } protected Builder from(PropertyGroup propertyGroup) { @@ -2049,11 +2087,10 @@ public static class PriceComponent extends BackboneElement { private PriceComponent(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); + type = builder.type; code = builder.code; factor = builder.factor; amount = builder.amount; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2356,7 +2393,17 @@ public Builder amount(Money amount) { */ @Override public PriceComponent build() { - return new PriceComponent(this); + PriceComponent priceComponent = new PriceComponent(this); + if (validating) { + validate(priceComponent); + } + return priceComponent; + } + + protected void validate(PriceComponent priceComponent) { + super.validate(priceComponent); + ValidationSupport.requireNonNull(priceComponent.type, "type"); + ValidationSupport.requireValueOrChildren(priceComponent); } protected Builder from(PriceComponent priceComponent) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Claim.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Claim.java index 5b3fa4709fe..6f0b14cbca1 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Claim.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Claim.java @@ -170,41 +170,33 @@ public class Claim extends DomainResource { private Claim(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - type = ValidationSupport.requireNonNull(builder.type, "type"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; + type = builder.type; subType = builder.subType; - use = ValidationSupport.requireNonNull(builder.use, "use"); - patient = ValidationSupport.requireNonNull(builder.patient, "patient"); + use = builder.use; + patient = builder.patient; billablePeriod = builder.billablePeriod; - created = ValidationSupport.requireNonNull(builder.created, "created"); + created = builder.created; enterer = builder.enterer; insurer = builder.insurer; - provider = ValidationSupport.requireNonNull(builder.provider, "provider"); - priority = ValidationSupport.requireNonNull(builder.priority, "priority"); + provider = builder.provider; + priority = builder.priority; fundsReserve = builder.fundsReserve; - related = Collections.unmodifiableList(ValidationSupport.checkList(builder.related, "related", Related.class)); + related = Collections.unmodifiableList(builder.related); prescription = builder.prescription; originalPrescription = builder.originalPrescription; payee = builder.payee; referral = builder.referral; facility = builder.facility; - careTeam = Collections.unmodifiableList(ValidationSupport.checkList(builder.careTeam, "careTeam", CareTeam.class)); - supportingInfo = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportingInfo, "supportingInfo", SupportingInfo.class)); - diagnosis = Collections.unmodifiableList(ValidationSupport.checkList(builder.diagnosis, "diagnosis", Diagnosis.class)); - procedure = Collections.unmodifiableList(ValidationSupport.checkList(builder.procedure, "procedure", Procedure.class)); - insurance = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.insurance, "insurance", Insurance.class)); + careTeam = Collections.unmodifiableList(builder.careTeam); + supportingInfo = Collections.unmodifiableList(builder.supportingInfo); + diagnosis = Collections.unmodifiableList(builder.diagnosis); + procedure = Collections.unmodifiableList(builder.procedure); + insurance = Collections.unmodifiableList(builder.insurance); accident = builder.accident; - item = Collections.unmodifiableList(ValidationSupport.checkList(builder.item, "item", Item.class)); + item = Collections.unmodifiableList(builder.item); total = builder.total; - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(enterer, "enterer", "Practitioner", "PractitionerRole"); - ValidationSupport.checkReferenceType(insurer, "insurer", "Organization"); - ValidationSupport.checkReferenceType(provider, "provider", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.checkReferenceType(prescription, "prescription", "DeviceRequest", "MedicationRequest", "VisionPrescription"); - ValidationSupport.checkReferenceType(originalPrescription, "originalPrescription", "DeviceRequest", "MedicationRequest", "VisionPrescription"); - ValidationSupport.checkReferenceType(referral, "referral", "ServiceRequest"); - ValidationSupport.checkReferenceType(facility, "facility", "Location"); } /** @@ -1531,7 +1523,38 @@ public Builder total(Money total) { */ @Override public Claim build() { - return new Claim(this); + Claim claim = new Claim(this); + if (validating) { + validate(claim); + } + return claim; + } + + protected void validate(Claim claim) { + super.validate(claim); + ValidationSupport.checkList(claim.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(claim.status, "status"); + ValidationSupport.requireNonNull(claim.type, "type"); + ValidationSupport.requireNonNull(claim.use, "use"); + ValidationSupport.requireNonNull(claim.patient, "patient"); + ValidationSupport.requireNonNull(claim.created, "created"); + ValidationSupport.requireNonNull(claim.provider, "provider"); + ValidationSupport.requireNonNull(claim.priority, "priority"); + ValidationSupport.checkList(claim.related, "related", Related.class); + ValidationSupport.checkList(claim.careTeam, "careTeam", CareTeam.class); + ValidationSupport.checkList(claim.supportingInfo, "supportingInfo", SupportingInfo.class); + ValidationSupport.checkList(claim.diagnosis, "diagnosis", Diagnosis.class); + ValidationSupport.checkList(claim.procedure, "procedure", Procedure.class); + ValidationSupport.checkNonEmptyList(claim.insurance, "insurance", Insurance.class); + ValidationSupport.checkList(claim.item, "item", Item.class); + ValidationSupport.checkReferenceType(claim.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(claim.enterer, "enterer", "Practitioner", "PractitionerRole"); + ValidationSupport.checkReferenceType(claim.insurer, "insurer", "Organization"); + ValidationSupport.checkReferenceType(claim.provider, "provider", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.checkReferenceType(claim.prescription, "prescription", "DeviceRequest", "MedicationRequest", "VisionPrescription"); + ValidationSupport.checkReferenceType(claim.originalPrescription, "originalPrescription", "DeviceRequest", "MedicationRequest", "VisionPrescription"); + ValidationSupport.checkReferenceType(claim.referral, "referral", "ServiceRequest"); + ValidationSupport.checkReferenceType(claim.facility, "facility", "Location"); } protected Builder from(Claim claim) { @@ -1588,8 +1611,6 @@ private Related(Builder builder) { claim = builder.claim; relationship = builder.relationship; reference = builder.reference; - ValidationSupport.checkReferenceType(claim, "claim", "Claim"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1859,7 +1880,17 @@ public Builder reference(Identifier reference) { */ @Override public Related build() { - return new Related(this); + Related related = new Related(this); + if (validating) { + validate(related); + } + return related; + } + + protected void validate(Related related) { + super.validate(related); + ValidationSupport.checkReferenceType(related.claim, "claim", "Claim"); + ValidationSupport.requireValueOrChildren(related); } protected Builder from(Related related) { @@ -1889,10 +1920,8 @@ public static class Payee extends BackboneElement { private Payee(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); + type = builder.type; party = builder.party; - ValidationSupport.checkReferenceType(party, "party", "Practitioner", "PractitionerRole", "Organization", "Patient", "RelatedPerson"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -2144,7 +2173,18 @@ public Builder party(Reference party) { */ @Override public Payee build() { - return new Payee(this); + Payee payee = new Payee(this); + if (validating) { + validate(payee); + } + return payee; + } + + protected void validate(Payee payee) { + super.validate(payee); + ValidationSupport.requireNonNull(payee.type, "type"); + ValidationSupport.checkReferenceType(payee.party, "party", "Practitioner", "PractitionerRole", "Organization", "Patient", "RelatedPerson"); + ValidationSupport.requireValueOrChildren(payee); } protected Builder from(Payee payee) { @@ -2183,13 +2223,11 @@ public static class CareTeam extends BackboneElement { private CareTeam(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); - provider = ValidationSupport.requireNonNull(builder.provider, "provider"); + sequence = builder.sequence; + provider = builder.provider; responsible = builder.responsible; role = builder.role; qualification = builder.qualification; - ValidationSupport.checkReferenceType(provider, "provider", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -2529,7 +2567,19 @@ public Builder qualification(CodeableConcept qualification) { */ @Override public CareTeam build() { - return new CareTeam(this); + CareTeam careTeam = new CareTeam(this); + if (validating) { + validate(careTeam); + } + return careTeam; + } + + protected void validate(CareTeam careTeam) { + super.validate(careTeam); + ValidationSupport.requireNonNull(careTeam.sequence, "sequence"); + ValidationSupport.requireNonNull(careTeam.provider, "provider"); + ValidationSupport.checkReferenceType(careTeam.provider, "provider", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.requireValueOrChildren(careTeam); } protected Builder from(CareTeam careTeam) { @@ -2580,13 +2630,12 @@ public static class SupportingInfo extends BackboneElement { private SupportingInfo(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); - category = ValidationSupport.requireNonNull(builder.category, "category"); + sequence = builder.sequence; + category = builder.category; code = builder.code; - timing = ValidationSupport.choiceElement(builder.timing, "timing", Date.class, Period.class); - value = ValidationSupport.choiceElement(builder.value, "value", Boolean.class, String.class, Quantity.class, Attachment.class, Reference.class); + timing = builder.timing; + value = builder.value; reason = builder.reason; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2967,7 +3016,20 @@ public Builder reason(CodeableConcept reason) { */ @Override public SupportingInfo build() { - return new SupportingInfo(this); + SupportingInfo supportingInfo = new SupportingInfo(this); + if (validating) { + validate(supportingInfo); + } + return supportingInfo; + } + + protected void validate(SupportingInfo supportingInfo) { + super.validate(supportingInfo); + ValidationSupport.requireNonNull(supportingInfo.sequence, "sequence"); + ValidationSupport.requireNonNull(supportingInfo.category, "category"); + ValidationSupport.choiceElement(supportingInfo.timing, "timing", Date.class, Period.class); + ValidationSupport.choiceElement(supportingInfo.value, "value", Boolean.class, String.class, Quantity.class, Attachment.class, Reference.class); + ValidationSupport.requireValueOrChildren(supportingInfo); } protected Builder from(SupportingInfo supportingInfo) { @@ -3023,13 +3085,11 @@ public static class Diagnosis extends BackboneElement { private Diagnosis(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); - diagnosis = ValidationSupport.requireChoiceElement(builder.diagnosis, "diagnosis", CodeableConcept.class, Reference.class); - type = Collections.unmodifiableList(ValidationSupport.checkList(builder.type, "type", CodeableConcept.class)); + sequence = builder.sequence; + diagnosis = builder.diagnosis; + type = Collections.unmodifiableList(builder.type); onAdmission = builder.onAdmission; packageCode = builder.packageCode; - ValidationSupport.checkReferenceType(diagnosis, "diagnosis", "Condition"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -3395,7 +3455,20 @@ public Builder packageCode(CodeableConcept packageCode) { */ @Override public Diagnosis build() { - return new Diagnosis(this); + Diagnosis diagnosis = new Diagnosis(this); + if (validating) { + validate(diagnosis); + } + return diagnosis; + } + + protected void validate(Diagnosis diagnosis) { + super.validate(diagnosis); + ValidationSupport.requireNonNull(diagnosis.sequence, "sequence"); + ValidationSupport.requireChoiceElement(diagnosis.diagnosis, "diagnosis", CodeableConcept.class, Reference.class); + ValidationSupport.checkList(diagnosis.type, "type", CodeableConcept.class); + ValidationSupport.checkReferenceType(diagnosis.diagnosis, "diagnosis", "Condition"); + ValidationSupport.requireValueOrChildren(diagnosis); } protected Builder from(Diagnosis diagnosis) { @@ -3439,14 +3512,11 @@ public static class Procedure extends BackboneElement { private Procedure(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); - type = Collections.unmodifiableList(ValidationSupport.checkList(builder.type, "type", CodeableConcept.class)); + sequence = builder.sequence; + type = Collections.unmodifiableList(builder.type); date = builder.date; - procedure = ValidationSupport.requireChoiceElement(builder.procedure, "procedure", CodeableConcept.class, Reference.class); - udi = Collections.unmodifiableList(ValidationSupport.checkList(builder.udi, "udi", Reference.class)); - ValidationSupport.checkReferenceType(procedure, "procedure", "Procedure"); - ValidationSupport.checkReferenceType(udi, "udi", "Device"); - ValidationSupport.requireValueOrChildren(this); + procedure = builder.procedure; + udi = Collections.unmodifiableList(builder.udi); } /** @@ -3840,7 +3910,22 @@ public Builder udi(Collection udi) { */ @Override public Procedure build() { - return new Procedure(this); + Procedure procedure = new Procedure(this); + if (validating) { + validate(procedure); + } + return procedure; + } + + protected void validate(Procedure procedure) { + super.validate(procedure); + ValidationSupport.requireNonNull(procedure.sequence, "sequence"); + ValidationSupport.checkList(procedure.type, "type", CodeableConcept.class); + ValidationSupport.requireChoiceElement(procedure.procedure, "procedure", CodeableConcept.class, Reference.class); + ValidationSupport.checkList(procedure.udi, "udi", Reference.class); + ValidationSupport.checkReferenceType(procedure.procedure, "procedure", "Procedure"); + ValidationSupport.checkReferenceType(procedure.udi, "udi", "Device"); + ValidationSupport.requireValueOrChildren(procedure); } protected Builder from(Procedure procedure) { @@ -3877,16 +3962,13 @@ public static class Insurance extends BackboneElement { private Insurance(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); - focal = ValidationSupport.requireNonNull(builder.focal, "focal"); + sequence = builder.sequence; + focal = builder.focal; identifier = builder.identifier; - coverage = ValidationSupport.requireNonNull(builder.coverage, "coverage"); + coverage = builder.coverage; businessArrangement = builder.businessArrangement; - preAuthRef = Collections.unmodifiableList(ValidationSupport.checkList(builder.preAuthRef, "preAuthRef", String.class)); + preAuthRef = Collections.unmodifiableList(builder.preAuthRef); claimResponse = builder.claimResponse; - ValidationSupport.checkReferenceType(coverage, "coverage", "Coverage"); - ValidationSupport.checkReferenceType(claimResponse, "claimResponse", "ClaimResponse"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -4317,7 +4399,22 @@ public Builder claimResponse(Reference claimResponse) { */ @Override public Insurance build() { - return new Insurance(this); + Insurance insurance = new Insurance(this); + if (validating) { + validate(insurance); + } + return insurance; + } + + protected void validate(Insurance insurance) { + super.validate(insurance); + ValidationSupport.requireNonNull(insurance.sequence, "sequence"); + ValidationSupport.requireNonNull(insurance.focal, "focal"); + ValidationSupport.requireNonNull(insurance.coverage, "coverage"); + ValidationSupport.checkList(insurance.preAuthRef, "preAuthRef", String.class); + ValidationSupport.checkReferenceType(insurance.coverage, "coverage", "Coverage"); + ValidationSupport.checkReferenceType(insurance.claimResponse, "claimResponse", "ClaimResponse"); + ValidationSupport.requireValueOrChildren(insurance); } protected Builder from(Insurance insurance) { @@ -4353,11 +4450,9 @@ public static class Accident extends BackboneElement { private Accident(Builder builder) { super(builder); - date = ValidationSupport.requireNonNull(builder.date, "date"); + date = builder.date; type = builder.type; - location = ValidationSupport.choiceElement(builder.location, "location", Address.class, Reference.class); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.requireValueOrChildren(this); + location = builder.location; } /** @@ -4642,7 +4737,19 @@ public Builder location(Element location) { */ @Override public Accident build() { - return new Accident(this); + Accident accident = new Accident(this); + if (validating) { + validate(accident); + } + return accident; + } + + protected void validate(Accident accident) { + super.validate(accident); + ValidationSupport.requireNonNull(accident.date, "date"); + ValidationSupport.choiceElement(accident.location, "location", Address.class, Reference.class); + ValidationSupport.checkReferenceType(accident.location, "location", "Location"); + ValidationSupport.requireValueOrChildren(accident); } protected Builder from(Accident accident) { @@ -4739,31 +4846,27 @@ public static class Item extends BackboneElement { private Item(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); - careTeamSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.careTeamSequence, "careTeamSequence", PositiveInt.class)); - diagnosisSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.diagnosisSequence, "diagnosisSequence", PositiveInt.class)); - procedureSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.procedureSequence, "procedureSequence", PositiveInt.class)); - informationSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.informationSequence, "informationSequence", PositiveInt.class)); + sequence = builder.sequence; + careTeamSequence = Collections.unmodifiableList(builder.careTeamSequence); + diagnosisSequence = Collections.unmodifiableList(builder.diagnosisSequence); + procedureSequence = Collections.unmodifiableList(builder.procedureSequence); + informationSequence = Collections.unmodifiableList(builder.informationSequence); revenue = builder.revenue; category = builder.category; - productOrService = ValidationSupport.requireNonNull(builder.productOrService, "productOrService"); - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); - programCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.programCode, "programCode", CodeableConcept.class)); - serviced = ValidationSupport.choiceElement(builder.serviced, "serviced", Date.class, Period.class); - location = ValidationSupport.choiceElement(builder.location, "location", CodeableConcept.class, Address.class, Reference.class); + productOrService = builder.productOrService; + modifier = Collections.unmodifiableList(builder.modifier); + programCode = Collections.unmodifiableList(builder.programCode); + serviced = builder.serviced; + location = builder.location; quantity = builder.quantity; unitPrice = builder.unitPrice; factor = builder.factor; net = builder.net; - udi = Collections.unmodifiableList(ValidationSupport.checkList(builder.udi, "udi", Reference.class)); + udi = Collections.unmodifiableList(builder.udi); bodySite = builder.bodySite; - subSite = Collections.unmodifiableList(ValidationSupport.checkList(builder.subSite, "subSite", CodeableConcept.class)); - encounter = Collections.unmodifiableList(ValidationSupport.checkList(builder.encounter, "encounter", Reference.class)); - detail = Collections.unmodifiableList(ValidationSupport.checkList(builder.detail, "detail", Detail.class)); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.checkReferenceType(udi, "udi", "Device"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.requireValueOrChildren(this); + subSite = Collections.unmodifiableList(builder.subSite); + encounter = Collections.unmodifiableList(builder.encounter); + detail = Collections.unmodifiableList(builder.detail); } /** @@ -5804,7 +5907,33 @@ public Builder detail(Collection detail) { */ @Override public Item build() { - return new Item(this); + Item item = new Item(this); + if (validating) { + validate(item); + } + return item; + } + + protected void validate(Item item) { + super.validate(item); + ValidationSupport.requireNonNull(item.sequence, "sequence"); + ValidationSupport.checkList(item.careTeamSequence, "careTeamSequence", PositiveInt.class); + ValidationSupport.checkList(item.diagnosisSequence, "diagnosisSequence", PositiveInt.class); + ValidationSupport.checkList(item.procedureSequence, "procedureSequence", PositiveInt.class); + ValidationSupport.checkList(item.informationSequence, "informationSequence", PositiveInt.class); + ValidationSupport.requireNonNull(item.productOrService, "productOrService"); + ValidationSupport.checkList(item.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(item.programCode, "programCode", CodeableConcept.class); + ValidationSupport.choiceElement(item.serviced, "serviced", Date.class, Period.class); + ValidationSupport.choiceElement(item.location, "location", CodeableConcept.class, Address.class, Reference.class); + ValidationSupport.checkList(item.udi, "udi", Reference.class); + ValidationSupport.checkList(item.subSite, "subSite", CodeableConcept.class); + ValidationSupport.checkList(item.encounter, "encounter", Reference.class); + ValidationSupport.checkList(item.detail, "detail", Detail.class); + ValidationSupport.checkReferenceType(item.location, "location", "Location"); + ValidationSupport.checkReferenceType(item.udi, "udi", "Device"); + ValidationSupport.checkReferenceType(item.encounter, "encounter", "Encounter"); + ValidationSupport.requireValueOrChildren(item); } protected Builder from(Item item) { @@ -5886,20 +6015,18 @@ public static class Detail extends BackboneElement { private Detail(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); + sequence = builder.sequence; revenue = builder.revenue; category = builder.category; - productOrService = ValidationSupport.requireNonNull(builder.productOrService, "productOrService"); - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); - programCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.programCode, "programCode", CodeableConcept.class)); + productOrService = builder.productOrService; + modifier = Collections.unmodifiableList(builder.modifier); + programCode = Collections.unmodifiableList(builder.programCode); quantity = builder.quantity; unitPrice = builder.unitPrice; factor = builder.factor; net = builder.net; - udi = Collections.unmodifiableList(ValidationSupport.checkList(builder.udi, "udi", Reference.class)); - subDetail = Collections.unmodifiableList(ValidationSupport.checkList(builder.subDetail, "subDetail", SubDetail.class)); - ValidationSupport.checkReferenceType(udi, "udi", "Device"); - ValidationSupport.requireValueOrChildren(this); + udi = Collections.unmodifiableList(builder.udi); + subDetail = Collections.unmodifiableList(builder.subDetail); } /** @@ -6531,7 +6658,23 @@ public Builder subDetail(Collection subDetail) { */ @Override public Detail build() { - return new Detail(this); + Detail detail = new Detail(this); + if (validating) { + validate(detail); + } + return detail; + } + + protected void validate(Detail detail) { + super.validate(detail); + ValidationSupport.requireNonNull(detail.sequence, "sequence"); + ValidationSupport.requireNonNull(detail.productOrService, "productOrService"); + ValidationSupport.checkList(detail.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(detail.programCode, "programCode", CodeableConcept.class); + ValidationSupport.checkList(detail.udi, "udi", Reference.class); + ValidationSupport.checkList(detail.subDetail, "subDetail", SubDetail.class); + ValidationSupport.checkReferenceType(detail.udi, "udi", "Device"); + ValidationSupport.requireValueOrChildren(detail); } protected Builder from(Detail detail) { @@ -6603,19 +6746,17 @@ public static class SubDetail extends BackboneElement { private SubDetail(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); + sequence = builder.sequence; revenue = builder.revenue; category = builder.category; - productOrService = ValidationSupport.requireNonNull(builder.productOrService, "productOrService"); - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); - programCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.programCode, "programCode", CodeableConcept.class)); + productOrService = builder.productOrService; + modifier = Collections.unmodifiableList(builder.modifier); + programCode = Collections.unmodifiableList(builder.programCode); quantity = builder.quantity; unitPrice = builder.unitPrice; factor = builder.factor; net = builder.net; - udi = Collections.unmodifiableList(ValidationSupport.checkList(builder.udi, "udi", Reference.class)); - ValidationSupport.checkReferenceType(udi, "udi", "Device"); - ValidationSupport.requireValueOrChildren(this); + udi = Collections.unmodifiableList(builder.udi); } /** @@ -7198,7 +7339,22 @@ public Builder udi(Collection udi) { */ @Override public SubDetail build() { - return new SubDetail(this); + SubDetail subDetail = new SubDetail(this); + if (validating) { + validate(subDetail); + } + return subDetail; + } + + protected void validate(SubDetail subDetail) { + super.validate(subDetail); + ValidationSupport.requireNonNull(subDetail.sequence, "sequence"); + ValidationSupport.requireNonNull(subDetail.productOrService, "productOrService"); + ValidationSupport.checkList(subDetail.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(subDetail.programCode, "programCode", CodeableConcept.class); + ValidationSupport.checkList(subDetail.udi, "udi", Reference.class); + ValidationSupport.checkReferenceType(subDetail.udi, "udi", "Device"); + ValidationSupport.requireValueOrChildren(subDetail); } protected Builder from(SubDetail subDetail) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ClaimResponse.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ClaimResponse.java index 024b942fa3b..1a67bf84132 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ClaimResponse.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ClaimResponse.java @@ -177,38 +177,33 @@ public class ClaimResponse extends DomainResource { private ClaimResponse(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - type = ValidationSupport.requireNonNull(builder.type, "type"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; + type = builder.type; subType = builder.subType; - use = ValidationSupport.requireNonNull(builder.use, "use"); - patient = ValidationSupport.requireNonNull(builder.patient, "patient"); - created = ValidationSupport.requireNonNull(builder.created, "created"); - insurer = ValidationSupport.requireNonNull(builder.insurer, "insurer"); + use = builder.use; + patient = builder.patient; + created = builder.created; + insurer = builder.insurer; requestor = builder.requestor; request = builder.request; - outcome = ValidationSupport.requireNonNull(builder.outcome, "outcome"); + outcome = builder.outcome; disposition = builder.disposition; preAuthRef = builder.preAuthRef; preAuthPeriod = builder.preAuthPeriod; payeeType = builder.payeeType; - item = Collections.unmodifiableList(ValidationSupport.checkList(builder.item, "item", Item.class)); - addItem = Collections.unmodifiableList(ValidationSupport.checkList(builder.addItem, "addItem", AddItem.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkList(builder.adjudication, "adjudication", ClaimResponse.Item.Adjudication.class)); - total = Collections.unmodifiableList(ValidationSupport.checkList(builder.total, "total", Total.class)); + item = Collections.unmodifiableList(builder.item); + addItem = Collections.unmodifiableList(builder.addItem); + adjudication = Collections.unmodifiableList(builder.adjudication); + total = Collections.unmodifiableList(builder.total); payment = builder.payment; fundsReserve = builder.fundsReserve; formCode = builder.formCode; form = builder.form; - processNote = Collections.unmodifiableList(ValidationSupport.checkList(builder.processNote, "processNote", ProcessNote.class)); - communicationRequest = Collections.unmodifiableList(ValidationSupport.checkList(builder.communicationRequest, "communicationRequest", Reference.class)); - insurance = Collections.unmodifiableList(ValidationSupport.checkList(builder.insurance, "insurance", Insurance.class)); - error = Collections.unmodifiableList(ValidationSupport.checkList(builder.error, "error", Error.class)); - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(insurer, "insurer", "Organization"); - ValidationSupport.checkReferenceType(requestor, "requestor", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.checkReferenceType(request, "request", "Claim"); - ValidationSupport.checkReferenceType(communicationRequest, "communicationRequest", "CommunicationRequest"); + processNote = Collections.unmodifiableList(builder.processNote); + communicationRequest = Collections.unmodifiableList(builder.communicationRequest); + insurance = Collections.unmodifiableList(builder.insurance); + error = Collections.unmodifiableList(builder.error); } /** @@ -1531,7 +1526,36 @@ public Builder error(Collection error) { */ @Override public ClaimResponse build() { - return new ClaimResponse(this); + ClaimResponse claimResponse = new ClaimResponse(this); + if (validating) { + validate(claimResponse); + } + return claimResponse; + } + + protected void validate(ClaimResponse claimResponse) { + super.validate(claimResponse); + ValidationSupport.checkList(claimResponse.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(claimResponse.status, "status"); + ValidationSupport.requireNonNull(claimResponse.type, "type"); + ValidationSupport.requireNonNull(claimResponse.use, "use"); + ValidationSupport.requireNonNull(claimResponse.patient, "patient"); + ValidationSupport.requireNonNull(claimResponse.created, "created"); + ValidationSupport.requireNonNull(claimResponse.insurer, "insurer"); + ValidationSupport.requireNonNull(claimResponse.outcome, "outcome"); + ValidationSupport.checkList(claimResponse.item, "item", Item.class); + ValidationSupport.checkList(claimResponse.addItem, "addItem", AddItem.class); + ValidationSupport.checkList(claimResponse.adjudication, "adjudication", ClaimResponse.Item.Adjudication.class); + ValidationSupport.checkList(claimResponse.total, "total", Total.class); + ValidationSupport.checkList(claimResponse.processNote, "processNote", ProcessNote.class); + ValidationSupport.checkList(claimResponse.communicationRequest, "communicationRequest", Reference.class); + ValidationSupport.checkList(claimResponse.insurance, "insurance", Insurance.class); + ValidationSupport.checkList(claimResponse.error, "error", Error.class); + ValidationSupport.checkReferenceType(claimResponse.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(claimResponse.insurer, "insurer", "Organization"); + ValidationSupport.checkReferenceType(claimResponse.requestor, "requestor", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.checkReferenceType(claimResponse.request, "request", "Claim"); + ValidationSupport.checkReferenceType(claimResponse.communicationRequest, "communicationRequest", "CommunicationRequest"); } protected Builder from(ClaimResponse claimResponse) { @@ -1581,11 +1605,10 @@ public static class Item extends BackboneElement { private Item(Builder builder) { super(builder); - itemSequence = ValidationSupport.requireNonNull(builder.itemSequence, "itemSequence"); - noteNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.noteNumber, "noteNumber", PositiveInt.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.adjudication, "adjudication", Adjudication.class)); - detail = Collections.unmodifiableList(ValidationSupport.checkList(builder.detail, "detail", Detail.class)); - ValidationSupport.requireValueOrChildren(this); + itemSequence = builder.itemSequence; + noteNumber = Collections.unmodifiableList(builder.noteNumber); + adjudication = Collections.unmodifiableList(builder.adjudication); + detail = Collections.unmodifiableList(builder.detail); } /** @@ -1954,7 +1977,20 @@ public Builder detail(Collection detail) { */ @Override public Item build() { - return new Item(this); + Item item = new Item(this); + if (validating) { + validate(item); + } + return item; + } + + protected void validate(Item item) { + super.validate(item); + ValidationSupport.requireNonNull(item.itemSequence, "itemSequence"); + ValidationSupport.checkList(item.noteNumber, "noteNumber", PositiveInt.class); + ValidationSupport.checkNonEmptyList(item.adjudication, "adjudication", Adjudication.class); + ValidationSupport.checkList(item.detail, "detail", Detail.class); + ValidationSupport.requireValueOrChildren(item); } protected Builder from(Item item) { @@ -1992,11 +2028,10 @@ public static class Adjudication extends BackboneElement { private Adjudication(Builder builder) { super(builder); - category = ValidationSupport.requireNonNull(builder.category, "category"); + category = builder.category; reason = builder.reason; amount = builder.amount; value = builder.value; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2301,7 +2336,17 @@ public Builder value(Decimal value) { */ @Override public Adjudication build() { - return new Adjudication(this); + Adjudication adjudication = new Adjudication(this); + if (validating) { + validate(adjudication); + } + return adjudication; + } + + protected void validate(Adjudication adjudication) { + super.validate(adjudication); + ValidationSupport.requireNonNull(adjudication.category, "category"); + ValidationSupport.requireValueOrChildren(adjudication); } protected Builder from(Adjudication adjudication) { @@ -2328,11 +2373,10 @@ public static class Detail extends BackboneElement { private Detail(Builder builder) { super(builder); - detailSequence = ValidationSupport.requireNonNull(builder.detailSequence, "detailSequence"); - noteNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.noteNumber, "noteNumber", PositiveInt.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.adjudication, "adjudication", ClaimResponse.Item.Adjudication.class)); - subDetail = Collections.unmodifiableList(ValidationSupport.checkList(builder.subDetail, "subDetail", SubDetail.class)); - ValidationSupport.requireValueOrChildren(this); + detailSequence = builder.detailSequence; + noteNumber = Collections.unmodifiableList(builder.noteNumber); + adjudication = Collections.unmodifiableList(builder.adjudication); + subDetail = Collections.unmodifiableList(builder.subDetail); } /** @@ -2698,7 +2742,20 @@ public Builder subDetail(Collection subDetail) { */ @Override public Detail build() { - return new Detail(this); + Detail detail = new Detail(this); + if (validating) { + validate(detail); + } + return detail; + } + + protected void validate(Detail detail) { + super.validate(detail); + ValidationSupport.requireNonNull(detail.detailSequence, "detailSequence"); + ValidationSupport.checkList(detail.noteNumber, "noteNumber", PositiveInt.class); + ValidationSupport.checkNonEmptyList(detail.adjudication, "adjudication", ClaimResponse.Item.Adjudication.class); + ValidationSupport.checkList(detail.subDetail, "subDetail", SubDetail.class); + ValidationSupport.requireValueOrChildren(detail); } protected Builder from(Detail detail) { @@ -2722,10 +2779,9 @@ public static class SubDetail extends BackboneElement { private SubDetail(Builder builder) { super(builder); - subDetailSequence = ValidationSupport.requireNonNull(builder.subDetailSequence, "subDetailSequence"); - noteNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.noteNumber, "noteNumber", PositiveInt.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkList(builder.adjudication, "adjudication", ClaimResponse.Item.Adjudication.class)); - ValidationSupport.requireValueOrChildren(this); + subDetailSequence = builder.subDetailSequence; + noteNumber = Collections.unmodifiableList(builder.noteNumber); + adjudication = Collections.unmodifiableList(builder.adjudication); } /** @@ -3037,7 +3093,19 @@ public Builder adjudication(Collection adjudica */ @Override public SubDetail build() { - return new SubDetail(this); + SubDetail subDetail = new SubDetail(this); + if (validating) { + validate(subDetail); + } + return subDetail; + } + + protected void validate(SubDetail subDetail) { + super.validate(subDetail); + ValidationSupport.requireNonNull(subDetail.subDetailSequence, "subDetailSequence"); + ValidationSupport.checkList(subDetail.noteNumber, "noteNumber", PositiveInt.class); + ValidationSupport.checkList(subDetail.adjudication, "adjudication", ClaimResponse.Item.Adjudication.class); + ValidationSupport.requireValueOrChildren(subDetail); } protected Builder from(SubDetail subDetail) { @@ -3119,27 +3187,24 @@ public static class AddItem extends BackboneElement { private AddItem(Builder builder) { super(builder); - itemSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.itemSequence, "itemSequence", PositiveInt.class)); - detailSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.detailSequence, "detailSequence", PositiveInt.class)); - subdetailSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.subdetailSequence, "subdetailSequence", PositiveInt.class)); - provider = Collections.unmodifiableList(ValidationSupport.checkList(builder.provider, "provider", Reference.class)); - productOrService = ValidationSupport.requireNonNull(builder.productOrService, "productOrService"); - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); - programCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.programCode, "programCode", CodeableConcept.class)); - serviced = ValidationSupport.choiceElement(builder.serviced, "serviced", Date.class, Period.class); - location = ValidationSupport.choiceElement(builder.location, "location", CodeableConcept.class, Address.class, Reference.class); + itemSequence = Collections.unmodifiableList(builder.itemSequence); + detailSequence = Collections.unmodifiableList(builder.detailSequence); + subdetailSequence = Collections.unmodifiableList(builder.subdetailSequence); + provider = Collections.unmodifiableList(builder.provider); + productOrService = builder.productOrService; + modifier = Collections.unmodifiableList(builder.modifier); + programCode = Collections.unmodifiableList(builder.programCode); + serviced = builder.serviced; + location = builder.location; quantity = builder.quantity; unitPrice = builder.unitPrice; factor = builder.factor; net = builder.net; bodySite = builder.bodySite; - subSite = Collections.unmodifiableList(ValidationSupport.checkList(builder.subSite, "subSite", CodeableConcept.class)); - noteNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.noteNumber, "noteNumber", PositiveInt.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.adjudication, "adjudication", ClaimResponse.Item.Adjudication.class)); - detail = Collections.unmodifiableList(ValidationSupport.checkList(builder.detail, "detail", Detail.class)); - ValidationSupport.checkReferenceType(provider, "provider", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.requireValueOrChildren(this); + subSite = Collections.unmodifiableList(builder.subSite); + noteNumber = Collections.unmodifiableList(builder.noteNumber); + adjudication = Collections.unmodifiableList(builder.adjudication); + detail = Collections.unmodifiableList(builder.detail); } /** @@ -4089,7 +4154,31 @@ public Builder detail(Collection detail) { */ @Override public AddItem build() { - return new AddItem(this); + AddItem addItem = new AddItem(this); + if (validating) { + validate(addItem); + } + return addItem; + } + + protected void validate(AddItem addItem) { + super.validate(addItem); + ValidationSupport.checkList(addItem.itemSequence, "itemSequence", PositiveInt.class); + ValidationSupport.checkList(addItem.detailSequence, "detailSequence", PositiveInt.class); + ValidationSupport.checkList(addItem.subdetailSequence, "subdetailSequence", PositiveInt.class); + ValidationSupport.checkList(addItem.provider, "provider", Reference.class); + ValidationSupport.requireNonNull(addItem.productOrService, "productOrService"); + ValidationSupport.checkList(addItem.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(addItem.programCode, "programCode", CodeableConcept.class); + ValidationSupport.choiceElement(addItem.serviced, "serviced", Date.class, Period.class); + ValidationSupport.choiceElement(addItem.location, "location", CodeableConcept.class, Address.class, Reference.class); + ValidationSupport.checkList(addItem.subSite, "subSite", CodeableConcept.class); + ValidationSupport.checkList(addItem.noteNumber, "noteNumber", PositiveInt.class); + ValidationSupport.checkNonEmptyList(addItem.adjudication, "adjudication", ClaimResponse.Item.Adjudication.class); + ValidationSupport.checkList(addItem.detail, "detail", Detail.class); + ValidationSupport.checkReferenceType(addItem.provider, "provider", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.checkReferenceType(addItem.location, "location", "Location"); + ValidationSupport.requireValueOrChildren(addItem); } protected Builder from(AddItem addItem) { @@ -4146,16 +4235,15 @@ public static class Detail extends BackboneElement { private Detail(Builder builder) { super(builder); - productOrService = ValidationSupport.requireNonNull(builder.productOrService, "productOrService"); - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); + productOrService = builder.productOrService; + modifier = Collections.unmodifiableList(builder.modifier); quantity = builder.quantity; unitPrice = builder.unitPrice; factor = builder.factor; net = builder.net; - noteNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.noteNumber, "noteNumber", PositiveInt.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.adjudication, "adjudication", ClaimResponse.Item.Adjudication.class)); - subDetail = Collections.unmodifiableList(ValidationSupport.checkList(builder.subDetail, "subDetail", SubDetail.class)); - ValidationSupport.requireValueOrChildren(this); + noteNumber = Collections.unmodifiableList(builder.noteNumber); + adjudication = Collections.unmodifiableList(builder.adjudication); + subDetail = Collections.unmodifiableList(builder.subDetail); } /** @@ -4692,7 +4780,21 @@ public Builder subDetail(Collection subDetail) { */ @Override public Detail build() { - return new Detail(this); + Detail detail = new Detail(this); + if (validating) { + validate(detail); + } + return detail; + } + + protected void validate(Detail detail) { + super.validate(detail); + ValidationSupport.requireNonNull(detail.productOrService, "productOrService"); + ValidationSupport.checkList(detail.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(detail.noteNumber, "noteNumber", PositiveInt.class); + ValidationSupport.checkNonEmptyList(detail.adjudication, "adjudication", ClaimResponse.Item.Adjudication.class); + ValidationSupport.checkList(detail.subDetail, "subDetail", SubDetail.class); + ValidationSupport.requireValueOrChildren(detail); } protected Builder from(Detail detail) { @@ -4739,15 +4841,14 @@ public static class SubDetail extends BackboneElement { private SubDetail(Builder builder) { super(builder); - productOrService = ValidationSupport.requireNonNull(builder.productOrService, "productOrService"); - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); + productOrService = builder.productOrService; + modifier = Collections.unmodifiableList(builder.modifier); quantity = builder.quantity; unitPrice = builder.unitPrice; factor = builder.factor; net = builder.net; - noteNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.noteNumber, "noteNumber", PositiveInt.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.adjudication, "adjudication", ClaimResponse.Item.Adjudication.class)); - ValidationSupport.requireValueOrChildren(this); + noteNumber = Collections.unmodifiableList(builder.noteNumber); + adjudication = Collections.unmodifiableList(builder.adjudication); } /** @@ -5235,7 +5336,20 @@ public Builder adjudication(Collection adjudica */ @Override public SubDetail build() { - return new SubDetail(this); + SubDetail subDetail = new SubDetail(this); + if (validating) { + validate(subDetail); + } + return subDetail; + } + + protected void validate(SubDetail subDetail) { + super.validate(subDetail); + ValidationSupport.requireNonNull(subDetail.productOrService, "productOrService"); + ValidationSupport.checkList(subDetail.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(subDetail.noteNumber, "noteNumber", PositiveInt.class); + ValidationSupport.checkNonEmptyList(subDetail.adjudication, "adjudication", ClaimResponse.Item.Adjudication.class); + ValidationSupport.requireValueOrChildren(subDetail); } protected Builder from(SubDetail subDetail) { @@ -5274,9 +5388,8 @@ public static class Total extends BackboneElement { private Total(Builder builder) { super(builder); - category = ValidationSupport.requireNonNull(builder.category, "category"); - amount = ValidationSupport.requireNonNull(builder.amount, "amount"); - ValidationSupport.requireValueOrChildren(this); + category = builder.category; + amount = builder.amount; } /** @@ -5526,7 +5639,18 @@ public Builder amount(Money amount) { */ @Override public Total build() { - return new Total(this); + Total total = new Total(this); + if (validating) { + validate(total); + } + return total; + } + + protected void validate(Total total) { + super.validate(total); + ValidationSupport.requireNonNull(total.category, "category"); + ValidationSupport.requireNonNull(total.amount, "amount"); + ValidationSupport.requireValueOrChildren(total); } protected Builder from(Total total) { @@ -5565,13 +5689,12 @@ public static class Payment extends BackboneElement { private Payment(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); + type = builder.type; adjustment = builder.adjustment; adjustmentReason = builder.adjustmentReason; date = builder.date; - amount = ValidationSupport.requireNonNull(builder.amount, "amount"); + amount = builder.amount; identifier = builder.identifier; - ValidationSupport.requireValueOrChildren(this); } /** @@ -5935,7 +6058,18 @@ public Builder identifier(Identifier identifier) { */ @Override public Payment build() { - return new Payment(this); + Payment payment = new Payment(this); + if (validating) { + validate(payment); + } + return payment; + } + + protected void validate(Payment payment) { + super.validate(payment); + ValidationSupport.requireNonNull(payment.type, "type"); + ValidationSupport.requireNonNull(payment.amount, "amount"); + ValidationSupport.requireValueOrChildren(payment); } protected Builder from(Payment payment) { @@ -5978,10 +6112,8 @@ private ProcessNote(Builder builder) { super(builder); number = builder.number; type = builder.type; - text = ValidationSupport.requireNonNull(builder.text, "text"); + text = builder.text; language = builder.language; - ValidationSupport.checkValueSetBinding(language, "language", "http://hl7.org/fhir/ValueSet/all-languages", "urn:ietf:bcp:47"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -6282,7 +6414,18 @@ public Builder language(CodeableConcept language) { */ @Override public ProcessNote build() { - return new ProcessNote(this); + ProcessNote processNote = new ProcessNote(this); + if (validating) { + validate(processNote); + } + return processNote; + } + + protected void validate(ProcessNote processNote) { + super.validate(processNote); + ValidationSupport.requireNonNull(processNote.text, "text"); + ValidationSupport.checkValueSetBinding(processNote.language, "language", "http://hl7.org/fhir/ValueSet/all-languages", "urn:ietf:bcp:47"); + ValidationSupport.requireValueOrChildren(processNote); } protected Builder from(ProcessNote processNote) { @@ -6313,14 +6456,11 @@ public static class Insurance extends BackboneElement { private Insurance(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); - focal = ValidationSupport.requireNonNull(builder.focal, "focal"); - coverage = ValidationSupport.requireNonNull(builder.coverage, "coverage"); + sequence = builder.sequence; + focal = builder.focal; + coverage = builder.coverage; businessArrangement = builder.businessArrangement; claimResponse = builder.claimResponse; - ValidationSupport.checkReferenceType(coverage, "coverage", "Coverage"); - ValidationSupport.checkReferenceType(claimResponse, "claimResponse", "ClaimResponse"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -6670,7 +6810,21 @@ public Builder claimResponse(Reference claimResponse) { */ @Override public Insurance build() { - return new Insurance(this); + Insurance insurance = new Insurance(this); + if (validating) { + validate(insurance); + } + return insurance; + } + + protected void validate(Insurance insurance) { + super.validate(insurance); + ValidationSupport.requireNonNull(insurance.sequence, "sequence"); + ValidationSupport.requireNonNull(insurance.focal, "focal"); + ValidationSupport.requireNonNull(insurance.coverage, "coverage"); + ValidationSupport.checkReferenceType(insurance.coverage, "coverage", "Coverage"); + ValidationSupport.checkReferenceType(insurance.claimResponse, "claimResponse", "ClaimResponse"); + ValidationSupport.requireValueOrChildren(insurance); } protected Builder from(Insurance insurance) { @@ -6706,8 +6860,7 @@ private Error(Builder builder) { itemSequence = builder.itemSequence; detailSequence = builder.detailSequence; subDetailSequence = builder.subDetailSequence; - code = ValidationSupport.requireNonNull(builder.code, "code"); - ValidationSupport.requireValueOrChildren(this); + code = builder.code; } /** @@ -7014,7 +7167,17 @@ public Builder code(CodeableConcept code) { */ @Override public Error build() { - return new Error(this); + Error error = new Error(this); + if (validating) { + validate(error); + } + return error; + } + + protected void validate(Error error) { + super.validate(error); + ValidationSupport.requireNonNull(error.code, "code"); + ValidationSupport.requireValueOrChildren(error); } protected Builder from(Error error) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ClinicalImpression.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ClinicalImpression.java index dfc35d990d6..d4c214b123d 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ClinicalImpression.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ClinicalImpression.java @@ -119,32 +119,26 @@ public class ClinicalImpression extends DomainResource { private ClinicalImpression(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; statusReason = builder.statusReason; code = builder.code; description = builder.description; - subject = ValidationSupport.requireNonNull(builder.subject, "subject"); + subject = builder.subject; encounter = builder.encounter; - effective = ValidationSupport.choiceElement(builder.effective, "effective", DateTime.class, Period.class); + effective = builder.effective; date = builder.date; assessor = builder.assessor; previous = builder.previous; - problem = Collections.unmodifiableList(ValidationSupport.checkList(builder.problem, "problem", Reference.class)); - investigation = Collections.unmodifiableList(ValidationSupport.checkList(builder.investigation, "investigation", Investigation.class)); - protocol = Collections.unmodifiableList(ValidationSupport.checkList(builder.protocol, "protocol", Uri.class)); + problem = Collections.unmodifiableList(builder.problem); + investigation = Collections.unmodifiableList(builder.investigation); + protocol = Collections.unmodifiableList(builder.protocol); summary = builder.summary; - finding = Collections.unmodifiableList(ValidationSupport.checkList(builder.finding, "finding", Finding.class)); - prognosisCodeableConcept = Collections.unmodifiableList(ValidationSupport.checkList(builder.prognosisCodeableConcept, "prognosisCodeableConcept", CodeableConcept.class)); - prognosisReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.prognosisReference, "prognosisReference", Reference.class)); - supportingInfo = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportingInfo, "supportingInfo", Reference.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(assessor, "assessor", "Practitioner", "PractitionerRole"); - ValidationSupport.checkReferenceType(previous, "previous", "ClinicalImpression"); - ValidationSupport.checkReferenceType(problem, "problem", "Condition", "AllergyIntolerance"); - ValidationSupport.checkReferenceType(prognosisReference, "prognosisReference", "RiskAssessment"); + finding = Collections.unmodifiableList(builder.finding); + prognosisCodeableConcept = Collections.unmodifiableList(builder.prognosisCodeableConcept); + prognosisReference = Collections.unmodifiableList(builder.prognosisReference); + supportingInfo = Collections.unmodifiableList(builder.supportingInfo); + note = Collections.unmodifiableList(builder.note); } /** @@ -1275,7 +1269,33 @@ public Builder note(Collection note) { */ @Override public ClinicalImpression build() { - return new ClinicalImpression(this); + ClinicalImpression clinicalImpression = new ClinicalImpression(this); + if (validating) { + validate(clinicalImpression); + } + return clinicalImpression; + } + + protected void validate(ClinicalImpression clinicalImpression) { + super.validate(clinicalImpression); + ValidationSupport.checkList(clinicalImpression.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(clinicalImpression.status, "status"); + ValidationSupport.requireNonNull(clinicalImpression.subject, "subject"); + ValidationSupport.choiceElement(clinicalImpression.effective, "effective", DateTime.class, Period.class); + ValidationSupport.checkList(clinicalImpression.problem, "problem", Reference.class); + ValidationSupport.checkList(clinicalImpression.investigation, "investigation", Investigation.class); + ValidationSupport.checkList(clinicalImpression.protocol, "protocol", Uri.class); + ValidationSupport.checkList(clinicalImpression.finding, "finding", Finding.class); + ValidationSupport.checkList(clinicalImpression.prognosisCodeableConcept, "prognosisCodeableConcept", CodeableConcept.class); + ValidationSupport.checkList(clinicalImpression.prognosisReference, "prognosisReference", Reference.class); + ValidationSupport.checkList(clinicalImpression.supportingInfo, "supportingInfo", Reference.class); + ValidationSupport.checkList(clinicalImpression.note, "note", Annotation.class); + ValidationSupport.checkReferenceType(clinicalImpression.subject, "subject", "Patient", "Group"); + ValidationSupport.checkReferenceType(clinicalImpression.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(clinicalImpression.assessor, "assessor", "Practitioner", "PractitionerRole"); + ValidationSupport.checkReferenceType(clinicalImpression.previous, "previous", "ClinicalImpression"); + ValidationSupport.checkReferenceType(clinicalImpression.problem, "problem", "Condition", "AllergyIntolerance"); + ValidationSupport.checkReferenceType(clinicalImpression.prognosisReference, "prognosisReference", "RiskAssessment"); } protected Builder from(ClinicalImpression clinicalImpression) { @@ -1323,10 +1343,8 @@ public static class Investigation extends BackboneElement { private Investigation(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); - item = Collections.unmodifiableList(ValidationSupport.checkList(builder.item, "item", Reference.class)); - ValidationSupport.checkReferenceType(item, "item", "Observation", "QuestionnaireResponse", "FamilyMemberHistory", "DiagnosticReport", "RiskAssessment", "ImagingStudy", "Media"); - ValidationSupport.requireValueOrChildren(this); + code = builder.code; + item = Collections.unmodifiableList(builder.item); } /** @@ -1615,7 +1633,19 @@ public Builder item(Collection item) { */ @Override public Investigation build() { - return new Investigation(this); + Investigation investigation = new Investigation(this); + if (validating) { + validate(investigation); + } + return investigation; + } + + protected void validate(Investigation investigation) { + super.validate(investigation); + ValidationSupport.requireNonNull(investigation.code, "code"); + ValidationSupport.checkList(investigation.item, "item", Reference.class); + ValidationSupport.checkReferenceType(investigation.item, "item", "Observation", "QuestionnaireResponse", "FamilyMemberHistory", "DiagnosticReport", "RiskAssessment", "ImagingStudy", "Media"); + ValidationSupport.requireValueOrChildren(investigation); } protected Builder from(Investigation investigation) { @@ -1647,8 +1677,6 @@ private Finding(Builder builder) { itemCodeableConcept = builder.itemCodeableConcept; itemReference = builder.itemReference; basis = builder.basis; - ValidationSupport.checkReferenceType(itemReference, "itemReference", "Condition", "Observation", "Media"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1920,7 +1948,17 @@ public Builder basis(String basis) { */ @Override public Finding build() { - return new Finding(this); + Finding finding = new Finding(this); + if (validating) { + validate(finding); + } + return finding; + } + + protected void validate(Finding finding) { + super.validate(finding); + ValidationSupport.checkReferenceType(finding.itemReference, "itemReference", "Condition", "Observation", "Media"); + ValidationSupport.requireValueOrChildren(finding); } protected Builder from(Finding finding) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CodeSystem.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CodeSystem.java index 736c9f99f65..f8a80b585ac 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CodeSystem.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CodeSystem.java @@ -178,18 +178,18 @@ public class CodeSystem extends DomainResource { private CodeSystem(Builder builder) { super(builder); url = builder.url; - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); version = builder.version; name = builder.name; title = builder.title; - status = ValidationSupport.requireNonNull(builder.status, "status"); + status = builder.status; experimental = builder.experimental; date = builder.date; publisher = builder.publisher; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactDetail.class)); + contact = Collections.unmodifiableList(builder.contact); description = builder.description; - useContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.useContext, "useContext", UsageContext.class)); - jurisdiction = Collections.unmodifiableList(ValidationSupport.checkList(builder.jurisdiction, "jurisdiction", CodeableConcept.class)); + useContext = Collections.unmodifiableList(builder.useContext); + jurisdiction = Collections.unmodifiableList(builder.jurisdiction); purpose = builder.purpose; copyright = builder.copyright; caseSensitive = builder.caseSensitive; @@ -197,12 +197,12 @@ private CodeSystem(Builder builder) { hierarchyMeaning = builder.hierarchyMeaning; compositional = builder.compositional; versionNeeded = builder.versionNeeded; - content = ValidationSupport.requireNonNull(builder.content, "content"); + content = builder.content; supplements = builder.supplements; count = builder.count; - filter = Collections.unmodifiableList(ValidationSupport.checkList(builder.filter, "filter", Filter.class)); - property = Collections.unmodifiableList(ValidationSupport.checkList(builder.property, "property", Property.class)); - concept = Collections.unmodifiableList(ValidationSupport.checkList(builder.concept, "concept", Concept.class)); + filter = Collections.unmodifiableList(builder.filter); + property = Collections.unmodifiableList(builder.property); + concept = Collections.unmodifiableList(builder.concept); } /** @@ -1438,7 +1438,24 @@ public Builder concept(Collection concept) { */ @Override public CodeSystem build() { - return new CodeSystem(this); + CodeSystem codeSystem = new CodeSystem(this); + if (validating) { + validate(codeSystem); + } + return codeSystem; + } + + protected void validate(CodeSystem codeSystem) { + super.validate(codeSystem); + ValidationSupport.checkList(codeSystem.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(codeSystem.status, "status"); + ValidationSupport.checkList(codeSystem.contact, "contact", ContactDetail.class); + ValidationSupport.checkList(codeSystem.useContext, "useContext", UsageContext.class); + ValidationSupport.checkList(codeSystem.jurisdiction, "jurisdiction", CodeableConcept.class); + ValidationSupport.requireNonNull(codeSystem.content, "content"); + ValidationSupport.checkList(codeSystem.filter, "filter", Filter.class); + ValidationSupport.checkList(codeSystem.property, "property", Property.class); + ValidationSupport.checkList(codeSystem.concept, "concept", Concept.class); } protected Builder from(CodeSystem codeSystem) { @@ -1497,11 +1514,10 @@ public static class Filter extends BackboneElement { private Filter(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); + code = builder.code; description = builder.description; - operator = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.operator, "operator", FilterOperator.class)); - value = ValidationSupport.requireNonNull(builder.value, "value"); - ValidationSupport.requireValueOrChildren(this); + operator = Collections.unmodifiableList(builder.operator); + value = builder.value; } /** @@ -1830,7 +1846,19 @@ public Builder value(String value) { */ @Override public Filter build() { - return new Filter(this); + Filter filter = new Filter(this); + if (validating) { + validate(filter); + } + return filter; + } + + protected void validate(Filter filter) { + super.validate(filter); + ValidationSupport.requireNonNull(filter.code, "code"); + ValidationSupport.checkNonEmptyList(filter.operator, "operator", FilterOperator.class); + ValidationSupport.requireNonNull(filter.value, "value"); + ValidationSupport.requireValueOrChildren(filter); } protected Builder from(Filter filter) { @@ -1867,11 +1895,10 @@ public static class Property extends BackboneElement { private Property(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); + code = builder.code; uri = builder.uri; description = builder.description; - type = ValidationSupport.requireNonNull(builder.type, "type"); - ValidationSupport.requireValueOrChildren(this); + type = builder.type; } /** @@ -2181,7 +2208,18 @@ public Builder type(PropertyType type) { */ @Override public Property build() { - return new Property(this); + Property property = new Property(this); + if (validating) { + validate(property); + } + return property; + } + + protected void validate(Property property) { + super.validate(property); + ValidationSupport.requireNonNull(property.code, "code"); + ValidationSupport.requireNonNull(property.type, "type"); + ValidationSupport.requireValueOrChildren(property); } protected Builder from(Property property) { @@ -2210,13 +2248,12 @@ public static class Concept extends BackboneElement { private Concept(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); + code = builder.code; display = builder.display; definition = builder.definition; - designation = Collections.unmodifiableList(ValidationSupport.checkList(builder.designation, "designation", Designation.class)); - property = Collections.unmodifiableList(ValidationSupport.checkList(builder.property, "property", Property.class)); - concept = Collections.unmodifiableList(ValidationSupport.checkList(builder.concept, "concept", CodeSystem.Concept.class)); - ValidationSupport.requireValueOrChildren(this); + designation = Collections.unmodifiableList(builder.designation); + property = Collections.unmodifiableList(builder.property); + concept = Collections.unmodifiableList(builder.concept); } /** @@ -2645,7 +2682,20 @@ public Builder concept(Collection concept) { */ @Override public Concept build() { - return new Concept(this); + Concept concept = new Concept(this); + if (validating) { + validate(concept); + } + return concept; + } + + protected void validate(Concept concept) { + super.validate(concept); + ValidationSupport.requireNonNull(concept.code, "code"); + ValidationSupport.checkList(concept.designation, "designation", Designation.class); + ValidationSupport.checkList(concept.property, "property", Property.class); + ValidationSupport.checkList(concept.concept, "concept", CodeSystem.Concept.class); + ValidationSupport.requireValueOrChildren(concept); } protected Builder from(Concept concept) { @@ -2687,9 +2737,7 @@ private Designation(Builder builder) { super(builder); language = builder.language; use = builder.use; - value = ValidationSupport.requireNonNull(builder.value, "value"); - ValidationSupport.checkValueSetBinding(language, "language", "http://hl7.org/fhir/ValueSet/all-languages", "urn:ietf:bcp:47"); - ValidationSupport.requireValueOrChildren(this); + value = builder.value; } /** @@ -2961,7 +3009,18 @@ public Builder value(String value) { */ @Override public Designation build() { - return new Designation(this); + Designation designation = new Designation(this); + if (validating) { + validate(designation); + } + return designation; + } + + protected void validate(Designation designation) { + super.validate(designation); + ValidationSupport.requireNonNull(designation.value, "value"); + ValidationSupport.checkValueSetBinding(designation.language, "language", "http://hl7.org/fhir/ValueSet/all-languages", "urn:ietf:bcp:47"); + ValidationSupport.requireValueOrChildren(designation); } protected Builder from(Designation designation) { @@ -2986,9 +3045,8 @@ public static class Property extends BackboneElement { private Property(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); - value = ValidationSupport.requireChoiceElement(builder.value, "value", Code.class, Coding.class, String.class, Integer.class, Boolean.class, DateTime.class, Decimal.class); - ValidationSupport.requireValueOrChildren(this); + code = builder.code; + value = builder.value; } /** @@ -3245,7 +3303,18 @@ public Builder value(Element value) { */ @Override public Property build() { - return new Property(this); + Property property = new Property(this); + if (validating) { + validate(property); + } + return property; + } + + protected void validate(Property property) { + super.validate(property); + ValidationSupport.requireNonNull(property.code, "code"); + ValidationSupport.requireChoiceElement(property.value, "value", Code.class, Coding.class, String.class, Integer.class, Boolean.class, DateTime.class, Decimal.class); + ValidationSupport.requireValueOrChildren(property); } protected Builder from(Property property) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Communication.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Communication.java index 1e35e5984c9..4b45b2b6bce 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Communication.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Communication.java @@ -141,35 +141,29 @@ public class Communication extends DomainResource { private Communication(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - instantiatesCanonical = Collections.unmodifiableList(ValidationSupport.checkList(builder.instantiatesCanonical, "instantiatesCanonical", Canonical.class)); - instantiatesUri = Collections.unmodifiableList(ValidationSupport.checkList(builder.instantiatesUri, "instantiatesUri", Uri.class)); - basedOn = Collections.unmodifiableList(ValidationSupport.checkList(builder.basedOn, "basedOn", Reference.class)); - partOf = Collections.unmodifiableList(ValidationSupport.checkList(builder.partOf, "partOf", Reference.class)); - inResponseTo = Collections.unmodifiableList(ValidationSupport.checkList(builder.inResponseTo, "inResponseTo", Reference.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + identifier = Collections.unmodifiableList(builder.identifier); + instantiatesCanonical = Collections.unmodifiableList(builder.instantiatesCanonical); + instantiatesUri = Collections.unmodifiableList(builder.instantiatesUri); + basedOn = Collections.unmodifiableList(builder.basedOn); + partOf = Collections.unmodifiableList(builder.partOf); + inResponseTo = Collections.unmodifiableList(builder.inResponseTo); + status = builder.status; statusReason = builder.statusReason; - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", CodeableConcept.class)); + category = Collections.unmodifiableList(builder.category); priority = builder.priority; - medium = Collections.unmodifiableList(ValidationSupport.checkList(builder.medium, "medium", CodeableConcept.class)); + medium = Collections.unmodifiableList(builder.medium); subject = builder.subject; topic = builder.topic; - about = Collections.unmodifiableList(ValidationSupport.checkList(builder.about, "about", Reference.class)); + about = Collections.unmodifiableList(builder.about); encounter = builder.encounter; sent = builder.sent; received = builder.received; - recipient = Collections.unmodifiableList(ValidationSupport.checkList(builder.recipient, "recipient", Reference.class)); + recipient = Collections.unmodifiableList(builder.recipient); sender = builder.sender; - reasonCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonCode, "reasonCode", CodeableConcept.class)); - reasonReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonReference, "reasonReference", Reference.class)); - payload = Collections.unmodifiableList(ValidationSupport.checkList(builder.payload, "payload", Payload.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - ValidationSupport.checkReferenceType(inResponseTo, "inResponseTo", "Communication"); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(recipient, "recipient", "Device", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "Group", "CareTeam", "HealthcareService"); - ValidationSupport.checkReferenceType(sender, "sender", "Device", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "HealthcareService"); - ValidationSupport.checkReferenceType(reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference"); + reasonCode = Collections.unmodifiableList(builder.reasonCode); + reasonReference = Collections.unmodifiableList(builder.reasonReference); + payload = Collections.unmodifiableList(builder.payload); + note = Collections.unmodifiableList(builder.note); } /** @@ -1509,7 +1503,36 @@ public Builder note(Collection note) { */ @Override public Communication build() { - return new Communication(this); + Communication communication = new Communication(this); + if (validating) { + validate(communication); + } + return communication; + } + + protected void validate(Communication communication) { + super.validate(communication); + ValidationSupport.checkList(communication.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(communication.instantiatesCanonical, "instantiatesCanonical", Canonical.class); + ValidationSupport.checkList(communication.instantiatesUri, "instantiatesUri", Uri.class); + ValidationSupport.checkList(communication.basedOn, "basedOn", Reference.class); + ValidationSupport.checkList(communication.partOf, "partOf", Reference.class); + ValidationSupport.checkList(communication.inResponseTo, "inResponseTo", Reference.class); + ValidationSupport.requireNonNull(communication.status, "status"); + ValidationSupport.checkList(communication.category, "category", CodeableConcept.class); + ValidationSupport.checkList(communication.medium, "medium", CodeableConcept.class); + ValidationSupport.checkList(communication.about, "about", Reference.class); + ValidationSupport.checkList(communication.recipient, "recipient", Reference.class); + ValidationSupport.checkList(communication.reasonCode, "reasonCode", CodeableConcept.class); + ValidationSupport.checkList(communication.reasonReference, "reasonReference", Reference.class); + ValidationSupport.checkList(communication.payload, "payload", Payload.class); + ValidationSupport.checkList(communication.note, "note", Annotation.class); + ValidationSupport.checkReferenceType(communication.inResponseTo, "inResponseTo", "Communication"); + ValidationSupport.checkReferenceType(communication.subject, "subject", "Patient", "Group"); + ValidationSupport.checkReferenceType(communication.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(communication.recipient, "recipient", "Device", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "Group", "CareTeam", "HealthcareService"); + ValidationSupport.checkReferenceType(communication.sender, "sender", "Device", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "HealthcareService"); + ValidationSupport.checkReferenceType(communication.reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference"); } protected Builder from(Communication communication) { @@ -1551,8 +1574,7 @@ public static class Payload extends BackboneElement { private Payload(Builder builder) { super(builder); - content = ValidationSupport.requireChoiceElement(builder.content, "content", String.class, Attachment.class, Reference.class); - ValidationSupport.requireValueOrChildren(this); + content = builder.content; } /** @@ -1773,7 +1795,17 @@ public Builder content(Element content) { */ @Override public Payload build() { - return new Payload(this); + Payload payload = new Payload(this); + if (validating) { + validate(payload); + } + return payload; + } + + protected void validate(Payload payload) { + super.validate(payload); + ValidationSupport.requireChoiceElement(payload.content, "content", String.class, Attachment.class, Reference.class); + ValidationSupport.requireValueOrChildren(payload); } protected Builder from(Payload payload) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CommunicationRequest.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CommunicationRequest.java index 16804eeaea9..67935aebd99 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CommunicationRequest.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CommunicationRequest.java @@ -138,35 +138,28 @@ public class CommunicationRequest extends DomainResource { private CommunicationRequest(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - basedOn = Collections.unmodifiableList(ValidationSupport.checkList(builder.basedOn, "basedOn", Reference.class)); - replaces = Collections.unmodifiableList(ValidationSupport.checkList(builder.replaces, "replaces", Reference.class)); + identifier = Collections.unmodifiableList(builder.identifier); + basedOn = Collections.unmodifiableList(builder.basedOn); + replaces = Collections.unmodifiableList(builder.replaces); groupIdentifier = builder.groupIdentifier; - status = ValidationSupport.requireNonNull(builder.status, "status"); + status = builder.status; statusReason = builder.statusReason; - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", CodeableConcept.class)); + category = Collections.unmodifiableList(builder.category); priority = builder.priority; doNotPerform = builder.doNotPerform; - medium = Collections.unmodifiableList(ValidationSupport.checkList(builder.medium, "medium", CodeableConcept.class)); + medium = Collections.unmodifiableList(builder.medium); subject = builder.subject; - about = Collections.unmodifiableList(ValidationSupport.checkList(builder.about, "about", Reference.class)); + about = Collections.unmodifiableList(builder.about); encounter = builder.encounter; - payload = Collections.unmodifiableList(ValidationSupport.checkList(builder.payload, "payload", Payload.class)); - occurrence = ValidationSupport.choiceElement(builder.occurrence, "occurrence", DateTime.class, Period.class); + payload = Collections.unmodifiableList(builder.payload); + occurrence = builder.occurrence; authoredOn = builder.authoredOn; requester = builder.requester; - recipient = Collections.unmodifiableList(ValidationSupport.checkList(builder.recipient, "recipient", Reference.class)); + recipient = Collections.unmodifiableList(builder.recipient); sender = builder.sender; - reasonCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonCode, "reasonCode", CodeableConcept.class)); - reasonReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonReference, "reasonReference", Reference.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - ValidationSupport.checkReferenceType(replaces, "replaces", "CommunicationRequest"); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(requester, "requester", "Practitioner", "PractitionerRole", "Organization", "Patient", "RelatedPerson", "Device"); - ValidationSupport.checkReferenceType(recipient, "recipient", "Device", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "Group", "CareTeam", "HealthcareService"); - ValidationSupport.checkReferenceType(sender, "sender", "Device", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "HealthcareService"); - ValidationSupport.checkReferenceType(reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference"); + reasonCode = Collections.unmodifiableList(builder.reasonCode); + reasonReference = Collections.unmodifiableList(builder.reasonReference); + note = Collections.unmodifiableList(builder.note); } /** @@ -1426,7 +1419,35 @@ public Builder note(Collection note) { */ @Override public CommunicationRequest build() { - return new CommunicationRequest(this); + CommunicationRequest communicationRequest = new CommunicationRequest(this); + if (validating) { + validate(communicationRequest); + } + return communicationRequest; + } + + protected void validate(CommunicationRequest communicationRequest) { + super.validate(communicationRequest); + ValidationSupport.checkList(communicationRequest.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(communicationRequest.basedOn, "basedOn", Reference.class); + ValidationSupport.checkList(communicationRequest.replaces, "replaces", Reference.class); + ValidationSupport.requireNonNull(communicationRequest.status, "status"); + ValidationSupport.checkList(communicationRequest.category, "category", CodeableConcept.class); + ValidationSupport.checkList(communicationRequest.medium, "medium", CodeableConcept.class); + ValidationSupport.checkList(communicationRequest.about, "about", Reference.class); + ValidationSupport.checkList(communicationRequest.payload, "payload", Payload.class); + ValidationSupport.choiceElement(communicationRequest.occurrence, "occurrence", DateTime.class, Period.class); + ValidationSupport.checkList(communicationRequest.recipient, "recipient", Reference.class); + ValidationSupport.checkList(communicationRequest.reasonCode, "reasonCode", CodeableConcept.class); + ValidationSupport.checkList(communicationRequest.reasonReference, "reasonReference", Reference.class); + ValidationSupport.checkList(communicationRequest.note, "note", Annotation.class); + ValidationSupport.checkReferenceType(communicationRequest.replaces, "replaces", "CommunicationRequest"); + ValidationSupport.checkReferenceType(communicationRequest.subject, "subject", "Patient", "Group"); + ValidationSupport.checkReferenceType(communicationRequest.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(communicationRequest.requester, "requester", "Practitioner", "PractitionerRole", "Organization", "Patient", "RelatedPerson", "Device"); + ValidationSupport.checkReferenceType(communicationRequest.recipient, "recipient", "Device", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "Group", "CareTeam", "HealthcareService"); + ValidationSupport.checkReferenceType(communicationRequest.sender, "sender", "Device", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "HealthcareService"); + ValidationSupport.checkReferenceType(communicationRequest.reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference"); } protected Builder from(CommunicationRequest communicationRequest) { @@ -1467,8 +1488,7 @@ public static class Payload extends BackboneElement { private Payload(Builder builder) { super(builder); - content = ValidationSupport.requireChoiceElement(builder.content, "content", String.class, Attachment.class, Reference.class); - ValidationSupport.requireValueOrChildren(this); + content = builder.content; } /** @@ -1689,7 +1709,17 @@ public Builder content(Element content) { */ @Override public Payload build() { - return new Payload(this); + Payload payload = new Payload(this); + if (validating) { + validate(payload); + } + return payload; + } + + protected void validate(Payload payload) { + super.validate(payload); + ValidationSupport.requireChoiceElement(payload.content, "content", String.class, Attachment.class, Reference.class); + ValidationSupport.requireValueOrChildren(payload); } protected Builder from(Payload payload) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CompartmentDefinition.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CompartmentDefinition.java index 185c80cf109..85bd9618e9e 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CompartmentDefinition.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CompartmentDefinition.java @@ -103,20 +103,20 @@ public class CompartmentDefinition extends DomainResource { private CompartmentDefinition(Builder builder) { super(builder); - url = ValidationSupport.requireNonNull(builder.url, "url"); + url = builder.url; version = builder.version; - name = ValidationSupport.requireNonNull(builder.name, "name"); - status = ValidationSupport.requireNonNull(builder.status, "status"); + name = builder.name; + status = builder.status; experimental = builder.experimental; date = builder.date; publisher = builder.publisher; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactDetail.class)); + contact = Collections.unmodifiableList(builder.contact); description = builder.description; - useContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.useContext, "useContext", UsageContext.class)); + useContext = Collections.unmodifiableList(builder.useContext); purpose = builder.purpose; - code = ValidationSupport.requireNonNull(builder.code, "code"); - search = ValidationSupport.requireNonNull(builder.search, "search"); - resource = Collections.unmodifiableList(ValidationSupport.checkList(builder.resource, "resource", Resource.class)); + code = builder.code; + search = builder.search; + resource = Collections.unmodifiableList(builder.resource); } /** @@ -917,7 +917,23 @@ public Builder resource(Collection resource) { */ @Override public CompartmentDefinition build() { - return new CompartmentDefinition(this); + CompartmentDefinition compartmentDefinition = new CompartmentDefinition(this); + if (validating) { + validate(compartmentDefinition); + } + return compartmentDefinition; + } + + protected void validate(CompartmentDefinition compartmentDefinition) { + super.validate(compartmentDefinition); + ValidationSupport.requireNonNull(compartmentDefinition.url, "url"); + ValidationSupport.requireNonNull(compartmentDefinition.name, "name"); + ValidationSupport.requireNonNull(compartmentDefinition.status, "status"); + ValidationSupport.checkList(compartmentDefinition.contact, "contact", ContactDetail.class); + ValidationSupport.checkList(compartmentDefinition.useContext, "useContext", UsageContext.class); + ValidationSupport.requireNonNull(compartmentDefinition.code, "code"); + ValidationSupport.requireNonNull(compartmentDefinition.search, "search"); + ValidationSupport.checkList(compartmentDefinition.resource, "resource", Resource.class); } protected Builder from(CompartmentDefinition compartmentDefinition) { @@ -959,10 +975,9 @@ public static class Resource extends BackboneElement { private Resource(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); - param = Collections.unmodifiableList(ValidationSupport.checkList(builder.param, "param", String.class)); + code = builder.code; + param = Collections.unmodifiableList(builder.param); documentation = builder.documentation; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1257,7 +1272,18 @@ public Builder documentation(String documentation) { */ @Override public Resource build() { - return new Resource(this); + Resource resource = new Resource(this); + if (validating) { + validate(resource); + } + return resource; + } + + protected void validate(Resource resource) { + super.validate(resource); + ValidationSupport.requireNonNull(resource.code, "code"); + ValidationSupport.checkList(resource.param, "param", String.class); + ValidationSupport.requireValueOrChildren(resource); } protected Builder from(Resource resource) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Composition.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Composition.java index 421d5f6a2a7..e82ab7cc7c7 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Composition.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Composition.java @@ -161,23 +161,20 @@ public class Composition extends DomainResource { private Composition(Builder builder) { super(builder); identifier = builder.identifier; - status = ValidationSupport.requireNonNull(builder.status, "status"); - type = ValidationSupport.requireNonNull(builder.type, "type"); - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", CodeableConcept.class)); + status = builder.status; + type = builder.type; + category = Collections.unmodifiableList(builder.category); subject = builder.subject; encounter = builder.encounter; - date = ValidationSupport.requireNonNull(builder.date, "date"); - author = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.author, "author", Reference.class)); - title = ValidationSupport.requireNonNull(builder.title, "title"); + date = builder.date; + author = Collections.unmodifiableList(builder.author); + title = builder.title; confidentiality = builder.confidentiality; - attester = Collections.unmodifiableList(ValidationSupport.checkList(builder.attester, "attester", Attester.class)); + attester = Collections.unmodifiableList(builder.attester); custodian = builder.custodian; - relatesTo = Collections.unmodifiableList(ValidationSupport.checkList(builder.relatesTo, "relatesTo", RelatesTo.class)); - event = Collections.unmodifiableList(ValidationSupport.checkList(builder.event, "event", Event.class)); - section = Collections.unmodifiableList(ValidationSupport.checkList(builder.section, "section", Section.class)); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(author, "author", "Practitioner", "PractitionerRole", "Device", "Patient", "RelatedPerson", "Organization"); - ValidationSupport.checkReferenceType(custodian, "custodian", "Organization"); + relatesTo = Collections.unmodifiableList(builder.relatesTo); + event = Collections.unmodifiableList(builder.event); + section = Collections.unmodifiableList(builder.section); } /** @@ -1084,7 +1081,28 @@ public Builder section(Collection
    section) { */ @Override public Composition build() { - return new Composition(this); + Composition composition = new Composition(this); + if (validating) { + validate(composition); + } + return composition; + } + + protected void validate(Composition composition) { + super.validate(composition); + ValidationSupport.requireNonNull(composition.status, "status"); + ValidationSupport.requireNonNull(composition.type, "type"); + ValidationSupport.checkList(composition.category, "category", CodeableConcept.class); + ValidationSupport.requireNonNull(composition.date, "date"); + ValidationSupport.checkNonEmptyList(composition.author, "author", Reference.class); + ValidationSupport.requireNonNull(composition.title, "title"); + ValidationSupport.checkList(composition.attester, "attester", Attester.class); + ValidationSupport.checkList(composition.relatesTo, "relatesTo", RelatesTo.class); + ValidationSupport.checkList(composition.event, "event", Event.class); + ValidationSupport.checkList(composition.section, "section", Section.class); + ValidationSupport.checkReferenceType(composition.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(composition.author, "author", "Practitioner", "PractitionerRole", "Device", "Patient", "RelatedPerson", "Organization"); + ValidationSupport.checkReferenceType(composition.custodian, "custodian", "Organization"); } protected Builder from(Composition composition) { @@ -1126,11 +1144,9 @@ public static class Attester extends BackboneElement { private Attester(Builder builder) { super(builder); - mode = ValidationSupport.requireNonNull(builder.mode, "mode"); + mode = builder.mode; time = builder.time; party = builder.party; - ValidationSupport.checkReferenceType(party, "party", "Patient", "RelatedPerson", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1411,7 +1427,18 @@ public Builder party(Reference party) { */ @Override public Attester build() { - return new Attester(this); + Attester attester = new Attester(this); + if (validating) { + validate(attester); + } + return attester; + } + + protected void validate(Attester attester) { + super.validate(attester); + ValidationSupport.requireNonNull(attester.mode, "mode"); + ValidationSupport.checkReferenceType(attester.party, "party", "Patient", "RelatedPerson", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.requireValueOrChildren(attester); } protected Builder from(Attester attester) { @@ -1443,10 +1470,8 @@ public static class RelatesTo extends BackboneElement { private RelatesTo(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); - target = ValidationSupport.requireChoiceElement(builder.target, "target", Identifier.class, Reference.class); - ValidationSupport.checkReferenceType(target, "target", "Composition"); - ValidationSupport.requireValueOrChildren(this); + code = builder.code; + target = builder.target; } /** @@ -1703,7 +1728,19 @@ public Builder target(Element target) { */ @Override public RelatesTo build() { - return new RelatesTo(this); + RelatesTo relatesTo = new RelatesTo(this); + if (validating) { + validate(relatesTo); + } + return relatesTo; + } + + protected void validate(RelatesTo relatesTo) { + super.validate(relatesTo); + ValidationSupport.requireNonNull(relatesTo.code, "code"); + ValidationSupport.requireChoiceElement(relatesTo.target, "target", Identifier.class, Reference.class); + ValidationSupport.checkReferenceType(relatesTo.target, "target", "Composition"); + ValidationSupport.requireValueOrChildren(relatesTo); } protected Builder from(RelatesTo relatesTo) { @@ -1734,10 +1771,9 @@ public static class Event extends BackboneElement { private Event(Builder builder) { super(builder); - code = Collections.unmodifiableList(ValidationSupport.checkList(builder.code, "code", CodeableConcept.class)); + code = Collections.unmodifiableList(builder.code); period = builder.period; - detail = Collections.unmodifiableList(ValidationSupport.checkList(builder.detail, "detail", Reference.class)); - ValidationSupport.requireValueOrChildren(this); + detail = Collections.unmodifiableList(builder.detail); } /** @@ -2053,7 +2089,18 @@ public Builder detail(Collection detail) { */ @Override public Event build() { - return new Event(this); + Event event = new Event(this); + if (validating) { + validate(event); + } + return event; + } + + protected void validate(Event event) { + super.validate(event); + ValidationSupport.checkList(event.code, "code", CodeableConcept.class); + ValidationSupport.checkList(event.detail, "detail", Reference.class); + ValidationSupport.requireValueOrChildren(event); } protected Builder from(Event event) { @@ -2110,16 +2157,14 @@ private Section(Builder builder) { super(builder); title = builder.title; code = builder.code; - author = Collections.unmodifiableList(ValidationSupport.checkList(builder.author, "author", Reference.class)); + author = Collections.unmodifiableList(builder.author); focus = builder.focus; text = builder.text; mode = builder.mode; orderedBy = builder.orderedBy; - entry = Collections.unmodifiableList(ValidationSupport.checkList(builder.entry, "entry", Reference.class)); + entry = Collections.unmodifiableList(builder.entry); emptyReason = builder.emptyReason; - section = Collections.unmodifiableList(ValidationSupport.checkList(builder.section, "section", Composition.Section.class)); - ValidationSupport.checkReferenceType(author, "author", "Practitioner", "PractitionerRole", "Device", "Patient", "RelatedPerson", "Organization"); - ValidationSupport.requireValueOrChildren(this); + section = Collections.unmodifiableList(builder.section); } /** @@ -2685,7 +2730,20 @@ public Builder section(Collection section) { */ @Override public Section build() { - return new Section(this); + Section section = new Section(this); + if (validating) { + validate(section); + } + return section; + } + + protected void validate(Section section) { + super.validate(section); + ValidationSupport.checkList(section.author, "author", Reference.class); + ValidationSupport.checkList(section.entry, "entry", Reference.class); + ValidationSupport.checkList(section.section, "section", Composition.Section.class); + ValidationSupport.checkReferenceType(section.author, "author", "Practitioner", "PractitionerRole", "Device", "Patient", "RelatedPerson", "Organization"); + ValidationSupport.requireValueOrChildren(section); } protected Builder from(Section section) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ConceptMap.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ConceptMap.java index d5de6810ae7..c9b1325cd94 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ConceptMap.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ConceptMap.java @@ -147,19 +147,19 @@ private ConceptMap(Builder builder) { version = builder.version; name = builder.name; title = builder.title; - status = ValidationSupport.requireNonNull(builder.status, "status"); + status = builder.status; experimental = builder.experimental; date = builder.date; publisher = builder.publisher; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactDetail.class)); + contact = Collections.unmodifiableList(builder.contact); description = builder.description; - useContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.useContext, "useContext", UsageContext.class)); - jurisdiction = Collections.unmodifiableList(ValidationSupport.checkList(builder.jurisdiction, "jurisdiction", CodeableConcept.class)); + useContext = Collections.unmodifiableList(builder.useContext); + jurisdiction = Collections.unmodifiableList(builder.jurisdiction); purpose = builder.purpose; copyright = builder.copyright; - source = ValidationSupport.choiceElement(builder.source, "source", Uri.class, Canonical.class); - target = ValidationSupport.choiceElement(builder.target, "target", Uri.class, Canonical.class); - group = Collections.unmodifiableList(ValidationSupport.checkList(builder.group, "group", Group.class)); + source = builder.source; + target = builder.target; + group = Collections.unmodifiableList(builder.group); } /** @@ -1102,7 +1102,22 @@ public Builder group(Collection group) { */ @Override public ConceptMap build() { - return new ConceptMap(this); + ConceptMap conceptMap = new ConceptMap(this); + if (validating) { + validate(conceptMap); + } + return conceptMap; + } + + protected void validate(ConceptMap conceptMap) { + super.validate(conceptMap); + ValidationSupport.requireNonNull(conceptMap.status, "status"); + ValidationSupport.checkList(conceptMap.contact, "contact", ContactDetail.class); + ValidationSupport.checkList(conceptMap.useContext, "useContext", UsageContext.class); + ValidationSupport.checkList(conceptMap.jurisdiction, "jurisdiction", CodeableConcept.class); + ValidationSupport.choiceElement(conceptMap.source, "source", Uri.class, Canonical.class); + ValidationSupport.choiceElement(conceptMap.target, "target", Uri.class, Canonical.class); + ValidationSupport.checkList(conceptMap.group, "group", Group.class); } protected Builder from(ConceptMap conceptMap) { @@ -1147,9 +1162,8 @@ private Group(Builder builder) { sourceVersion = builder.sourceVersion; target = builder.target; targetVersion = builder.targetVersion; - element = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.element, "element", Element.class)); + element = Collections.unmodifiableList(builder.element); unmapped = builder.unmapped; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1532,7 +1546,17 @@ public Builder unmapped(Unmapped unmapped) { */ @Override public Group build() { - return new Group(this); + Group group = new Group(this); + if (validating) { + validate(group); + } + return group; + } + + protected void validate(Group group) { + super.validate(group); + ValidationSupport.checkNonEmptyList(group.element, "element", Element.class); + ValidationSupport.requireValueOrChildren(group); } protected Builder from(Group group) { @@ -1559,8 +1583,7 @@ private Element(Builder builder) { super(builder); code = builder.code; display = builder.display; - target = Collections.unmodifiableList(ValidationSupport.checkList(builder.target, "target", Target.class)); - ValidationSupport.requireValueOrChildren(this); + target = Collections.unmodifiableList(builder.target); } /** @@ -1845,7 +1868,17 @@ public Builder target(Collection target) { */ @Override public Element build() { - return new Element(this); + Element element = new Element(this); + if (validating) { + validate(element); + } + return element; + } + + protected void validate(Element element) { + super.validate(element); + ValidationSupport.checkList(element.target, "target", Target.class); + ValidationSupport.requireValueOrChildren(element); } protected Builder from(Element element) { @@ -1879,11 +1912,10 @@ private Target(Builder builder) { super(builder); code = builder.code; display = builder.display; - equivalence = ValidationSupport.requireNonNull(builder.equivalence, "equivalence"); + equivalence = builder.equivalence; comment = builder.comment; - dependsOn = Collections.unmodifiableList(ValidationSupport.checkList(builder.dependsOn, "dependsOn", DependsOn.class)); - product = Collections.unmodifiableList(ValidationSupport.checkList(builder.product, "product", ConceptMap.Group.Element.Target.DependsOn.class)); - ValidationSupport.requireValueOrChildren(this); + dependsOn = Collections.unmodifiableList(builder.dependsOn); + product = Collections.unmodifiableList(builder.product); } /** @@ -2293,7 +2325,19 @@ public Builder product(Collection pro */ @Override public Target build() { - return new Target(this); + Target target = new Target(this); + if (validating) { + validate(target); + } + return target; + } + + protected void validate(Target target) { + super.validate(target); + ValidationSupport.requireNonNull(target.equivalence, "equivalence"); + ValidationSupport.checkList(target.dependsOn, "dependsOn", DependsOn.class); + ValidationSupport.checkList(target.product, "product", ConceptMap.Group.Element.Target.DependsOn.class); + ValidationSupport.requireValueOrChildren(target); } protected Builder from(Target target) { @@ -2322,11 +2366,10 @@ public static class DependsOn extends BackboneElement { private DependsOn(Builder builder) { super(builder); - property = ValidationSupport.requireNonNull(builder.property, "property"); + property = builder.property; system = builder.system; - value = ValidationSupport.requireNonNull(builder.value, "value"); + value = builder.value; display = builder.display; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2634,7 +2677,18 @@ public Builder display(String display) { */ @Override public DependsOn build() { - return new DependsOn(this); + DependsOn dependsOn = new DependsOn(this); + if (validating) { + validate(dependsOn); + } + return dependsOn; + } + + protected void validate(DependsOn dependsOn) { + super.validate(dependsOn); + ValidationSupport.requireNonNull(dependsOn.property, "property"); + ValidationSupport.requireNonNull(dependsOn.value, "value"); + ValidationSupport.requireValueOrChildren(dependsOn); } protected Builder from(DependsOn dependsOn) { @@ -2669,11 +2723,10 @@ public static class Unmapped extends BackboneElement { private Unmapped(Builder builder) { super(builder); - mode = ValidationSupport.requireNonNull(builder.mode, "mode"); + mode = builder.mode; code = builder.code; display = builder.display; url = builder.url; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2982,7 +3035,17 @@ public Builder url(Canonical url) { */ @Override public Unmapped build() { - return new Unmapped(this); + Unmapped unmapped = new Unmapped(this); + if (validating) { + validate(unmapped); + } + return unmapped; + } + + protected void validate(Unmapped unmapped) { + super.validate(unmapped); + ValidationSupport.requireNonNull(unmapped.mode, "mode"); + ValidationSupport.requireValueOrChildren(unmapped); } protected Builder from(Unmapped unmapped) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Condition.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Condition.java index f56367fa73b..9a41eb52463 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Condition.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Condition.java @@ -179,29 +179,23 @@ public class Condition extends DomainResource { private Condition(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); clinicalStatus = builder.clinicalStatus; verificationStatus = builder.verificationStatus; - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", CodeableConcept.class)); + category = Collections.unmodifiableList(builder.category); severity = builder.severity; code = builder.code; - bodySite = Collections.unmodifiableList(ValidationSupport.checkList(builder.bodySite, "bodySite", CodeableConcept.class)); - subject = ValidationSupport.requireNonNull(builder.subject, "subject"); + bodySite = Collections.unmodifiableList(builder.bodySite); + subject = builder.subject; encounter = builder.encounter; - onset = ValidationSupport.choiceElement(builder.onset, "onset", DateTime.class, Age.class, Period.class, Range.class, String.class); - abatement = ValidationSupport.choiceElement(builder.abatement, "abatement", DateTime.class, Age.class, Period.class, Range.class, String.class); + onset = builder.onset; + abatement = builder.abatement; recordedDate = builder.recordedDate; recorder = builder.recorder; asserter = builder.asserter; - stage = Collections.unmodifiableList(ValidationSupport.checkList(builder.stage, "stage", Stage.class)); - evidence = Collections.unmodifiableList(ValidationSupport.checkList(builder.evidence, "evidence", Evidence.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - ValidationSupport.checkValueSetBinding(clinicalStatus, "clinicalStatus", "http://hl7.org/fhir/ValueSet/condition-clinical", "http://terminology.hl7.org/CodeSystem/condition-clinical", "active", "recurrence", "relapse", "inactive", "remission", "resolved"); - ValidationSupport.checkValueSetBinding(verificationStatus, "verificationStatus", "http://hl7.org/fhir/ValueSet/condition-ver-status", "http://terminology.hl7.org/CodeSystem/condition-ver-status", "unconfirmed", "provisional", "differential", "confirmed", "refuted", "entered-in-error"); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(recorder, "recorder", "Practitioner", "PractitionerRole", "Patient", "RelatedPerson"); - ValidationSupport.checkReferenceType(asserter, "asserter", "Practitioner", "PractitionerRole", "Patient", "RelatedPerson"); + stage = Collections.unmodifiableList(builder.stage); + evidence = Collections.unmodifiableList(builder.evidence); + note = Collections.unmodifiableList(builder.note); } /** @@ -1169,7 +1163,30 @@ public Builder note(Collection note) { */ @Override public Condition build() { - return new Condition(this); + Condition condition = new Condition(this); + if (validating) { + validate(condition); + } + return condition; + } + + protected void validate(Condition condition) { + super.validate(condition); + ValidationSupport.checkList(condition.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(condition.category, "category", CodeableConcept.class); + ValidationSupport.checkList(condition.bodySite, "bodySite", CodeableConcept.class); + ValidationSupport.requireNonNull(condition.subject, "subject"); + ValidationSupport.choiceElement(condition.onset, "onset", DateTime.class, Age.class, Period.class, Range.class, String.class); + ValidationSupport.choiceElement(condition.abatement, "abatement", DateTime.class, Age.class, Period.class, Range.class, String.class); + ValidationSupport.checkList(condition.stage, "stage", Stage.class); + ValidationSupport.checkList(condition.evidence, "evidence", Evidence.class); + ValidationSupport.checkList(condition.note, "note", Annotation.class); + ValidationSupport.checkValueSetBinding(condition.clinicalStatus, "clinicalStatus", "http://hl7.org/fhir/ValueSet/condition-clinical", "http://terminology.hl7.org/CodeSystem/condition-clinical", "active", "recurrence", "relapse", "inactive", "remission", "resolved"); + ValidationSupport.checkValueSetBinding(condition.verificationStatus, "verificationStatus", "http://hl7.org/fhir/ValueSet/condition-ver-status", "http://terminology.hl7.org/CodeSystem/condition-ver-status", "unconfirmed", "provisional", "differential", "confirmed", "refuted", "entered-in-error"); + ValidationSupport.checkReferenceType(condition.subject, "subject", "Patient", "Group"); + ValidationSupport.checkReferenceType(condition.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(condition.recorder, "recorder", "Practitioner", "PractitionerRole", "Patient", "RelatedPerson"); + ValidationSupport.checkReferenceType(condition.asserter, "asserter", "Practitioner", "PractitionerRole", "Patient", "RelatedPerson"); } protected Builder from(Condition condition) { @@ -1219,10 +1236,8 @@ public static class Stage extends BackboneElement { private Stage(Builder builder) { super(builder); summary = builder.summary; - assessment = Collections.unmodifiableList(ValidationSupport.checkList(builder.assessment, "assessment", Reference.class)); + assessment = Collections.unmodifiableList(builder.assessment); type = builder.type; - ValidationSupport.checkReferenceType(assessment, "assessment", "ClinicalImpression", "DiagnosticReport", "Observation"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1521,7 +1536,18 @@ public Builder type(CodeableConcept type) { */ @Override public Stage build() { - return new Stage(this); + Stage stage = new Stage(this); + if (validating) { + validate(stage); + } + return stage; + } + + protected void validate(Stage stage) { + super.validate(stage); + ValidationSupport.checkList(stage.assessment, "assessment", Reference.class); + ValidationSupport.checkReferenceType(stage.assessment, "assessment", "ClinicalImpression", "DiagnosticReport", "Observation"); + ValidationSupport.requireValueOrChildren(stage); } protected Builder from(Stage stage) { @@ -1552,9 +1578,8 @@ public static class Evidence extends BackboneElement { private Evidence(Builder builder) { super(builder); - code = Collections.unmodifiableList(ValidationSupport.checkList(builder.code, "code", CodeableConcept.class)); - detail = Collections.unmodifiableList(ValidationSupport.checkList(builder.detail, "detail", Reference.class)); - ValidationSupport.requireValueOrChildren(this); + code = Collections.unmodifiableList(builder.code); + detail = Collections.unmodifiableList(builder.detail); } /** @@ -1830,7 +1855,18 @@ public Builder detail(Collection detail) { */ @Override public Evidence build() { - return new Evidence(this); + Evidence evidence = new Evidence(this); + if (validating) { + validate(evidence); + } + return evidence; + } + + protected void validate(Evidence evidence) { + super.validate(evidence); + ValidationSupport.checkList(evidence.code, "code", CodeableConcept.class); + ValidationSupport.checkList(evidence.detail, "detail", Reference.class); + ValidationSupport.requireValueOrChildren(evidence); } protected Builder from(Evidence evidence) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Consent.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Consent.java index b7385a3b3ba..dc55ea26c1b 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Consent.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Consent.java @@ -207,23 +207,19 @@ public class Consent extends DomainResource { private Consent(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - scope = ValidationSupport.requireNonNull(builder.scope, "scope"); - category = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.category, "category", CodeableConcept.class)); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; + scope = builder.scope; + category = Collections.unmodifiableList(builder.category); patient = builder.patient; dateTime = builder.dateTime; - performer = Collections.unmodifiableList(ValidationSupport.checkList(builder.performer, "performer", Reference.class)); - organization = Collections.unmodifiableList(ValidationSupport.checkList(builder.organization, "organization", Reference.class)); - source = ValidationSupport.choiceElement(builder.source, "source", Attachment.class, Reference.class); - policy = Collections.unmodifiableList(ValidationSupport.checkList(builder.policy, "policy", Policy.class)); + performer = Collections.unmodifiableList(builder.performer); + organization = Collections.unmodifiableList(builder.organization); + source = builder.source; + policy = Collections.unmodifiableList(builder.policy); policyRule = builder.policyRule; - verification = Collections.unmodifiableList(ValidationSupport.checkList(builder.verification, "verification", Verification.class)); + verification = Collections.unmodifiableList(builder.verification); provision = builder.provision; - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(performer, "performer", "Organization", "Patient", "Practitioner", "RelatedPerson", "PractitionerRole"); - ValidationSupport.checkReferenceType(organization, "organization", "Organization"); - ValidationSupport.checkReferenceType(source, "source", "Consent", "DocumentReference", "Contract", "QuestionnaireResponse"); } /** @@ -1089,7 +1085,28 @@ public Builder provision(Provision provision) { */ @Override public Consent build() { - return new Consent(this); + Consent consent = new Consent(this); + if (validating) { + validate(consent); + } + return consent; + } + + protected void validate(Consent consent) { + super.validate(consent); + ValidationSupport.checkList(consent.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(consent.status, "status"); + ValidationSupport.requireNonNull(consent.scope, "scope"); + ValidationSupport.checkNonEmptyList(consent.category, "category", CodeableConcept.class); + ValidationSupport.checkList(consent.performer, "performer", Reference.class); + ValidationSupport.checkList(consent.organization, "organization", Reference.class); + ValidationSupport.choiceElement(consent.source, "source", Attachment.class, Reference.class); + ValidationSupport.checkList(consent.policy, "policy", Policy.class); + ValidationSupport.checkList(consent.verification, "verification", Verification.class); + ValidationSupport.checkReferenceType(consent.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(consent.performer, "performer", "Organization", "Patient", "Practitioner", "RelatedPerson", "PractitionerRole"); + ValidationSupport.checkReferenceType(consent.organization, "organization", "Organization"); + ValidationSupport.checkReferenceType(consent.source, "source", "Consent", "DocumentReference", "Contract", "QuestionnaireResponse"); } protected Builder from(Consent consent) { @@ -1123,7 +1140,6 @@ private Policy(Builder builder) { super(builder); authority = builder.authority; uri = builder.uri; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1363,7 +1379,16 @@ public Builder uri(Uri uri) { */ @Override public Policy build() { - return new Policy(this); + Policy policy = new Policy(this); + if (validating) { + validate(policy); + } + return policy; + } + + protected void validate(Policy policy) { + super.validate(policy); + ValidationSupport.requireValueOrChildren(policy); } protected Builder from(Policy policy) { @@ -1389,11 +1414,9 @@ public static class Verification extends BackboneElement { private Verification(Builder builder) { super(builder); - verified = ValidationSupport.requireNonNull(builder.verified, "verified"); + verified = builder.verified; verifiedWith = builder.verifiedWith; verificationDate = builder.verificationDate; - ValidationSupport.checkReferenceType(verifiedWith, "verifiedWith", "Patient", "RelatedPerson"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1671,7 +1694,18 @@ public Builder verificationDate(DateTime verificationDate) { */ @Override public Verification build() { - return new Verification(this); + Verification verification = new Verification(this); + if (validating) { + validate(verification); + } + return verification; + } + + protected void validate(Verification verification) { + super.validate(verification); + ValidationSupport.requireNonNull(verification.verified, "verified"); + ValidationSupport.checkReferenceType(verification.verifiedWith, "verifiedWith", "Patient", "RelatedPerson"); + ValidationSupport.requireValueOrChildren(verification); } protected Builder from(Verification verification) { @@ -1749,16 +1783,15 @@ private Provision(Builder builder) { super(builder); type = builder.type; period = builder.period; - actor = Collections.unmodifiableList(ValidationSupport.checkList(builder.actor, "actor", Actor.class)); - action = Collections.unmodifiableList(ValidationSupport.checkList(builder.action, "action", CodeableConcept.class)); - securityLabel = Collections.unmodifiableList(ValidationSupport.checkList(builder.securityLabel, "securityLabel", Coding.class)); - purpose = Collections.unmodifiableList(ValidationSupport.checkList(builder.purpose, "purpose", Coding.class)); - clazz = Collections.unmodifiableList(ValidationSupport.checkList(builder.clazz, "class", Coding.class)); - code = Collections.unmodifiableList(ValidationSupport.checkList(builder.code, "code", CodeableConcept.class)); + actor = Collections.unmodifiableList(builder.actor); + action = Collections.unmodifiableList(builder.action); + securityLabel = Collections.unmodifiableList(builder.securityLabel); + purpose = Collections.unmodifiableList(builder.purpose); + clazz = Collections.unmodifiableList(builder.clazz); + code = Collections.unmodifiableList(builder.code); dataPeriod = builder.dataPeriod; - data = Collections.unmodifiableList(ValidationSupport.checkList(builder.data, "data", Data.class)); - provision = Collections.unmodifiableList(ValidationSupport.checkList(builder.provision, "provision", Consent.Provision.class)); - ValidationSupport.requireValueOrChildren(this); + data = Collections.unmodifiableList(builder.data); + provision = Collections.unmodifiableList(builder.provision); } /** @@ -2426,7 +2459,24 @@ public Builder provision(Collection provision) { */ @Override public Provision build() { - return new Provision(this); + Provision provision = new Provision(this); + if (validating) { + validate(provision); + } + return provision; + } + + protected void validate(Provision provision) { + super.validate(provision); + ValidationSupport.checkList(provision.actor, "actor", Actor.class); + ValidationSupport.checkList(provision.action, "action", CodeableConcept.class); + ValidationSupport.checkList(provision.securityLabel, "securityLabel", Coding.class); + ValidationSupport.checkList(provision.purpose, "purpose", Coding.class); + ValidationSupport.checkList(provision.clazz, "class", Coding.class); + ValidationSupport.checkList(provision.code, "code", CodeableConcept.class); + ValidationSupport.checkList(provision.data, "data", Data.class); + ValidationSupport.checkList(provision.provision, "provision", Consent.Provision.class); + ValidationSupport.requireValueOrChildren(provision); } protected Builder from(Provision provision) { @@ -2465,10 +2515,8 @@ public static class Actor extends BackboneElement { private Actor(Builder builder) { super(builder); - role = ValidationSupport.requireNonNull(builder.role, "role"); - reference = ValidationSupport.requireNonNull(builder.reference, "reference"); - ValidationSupport.checkReferenceType(reference, "reference", "Device", "Group", "CareTeam", "Organization", "Patient", "Practitioner", "RelatedPerson", "PractitionerRole"); - ValidationSupport.requireValueOrChildren(this); + role = builder.role; + reference = builder.reference; } /** @@ -2728,7 +2776,19 @@ public Builder reference(Reference reference) { */ @Override public Actor build() { - return new Actor(this); + Actor actor = new Actor(this); + if (validating) { + validate(actor); + } + return actor; + } + + protected void validate(Actor actor) { + super.validate(actor); + ValidationSupport.requireNonNull(actor.role, "role"); + ValidationSupport.requireNonNull(actor.reference, "reference"); + ValidationSupport.checkReferenceType(actor.reference, "reference", "Device", "Group", "CareTeam", "Organization", "Patient", "Practitioner", "RelatedPerson", "PractitionerRole"); + ValidationSupport.requireValueOrChildren(actor); } protected Builder from(Actor actor) { @@ -2759,9 +2819,8 @@ public static class Data extends BackboneElement { private Data(Builder builder) { super(builder); - meaning = ValidationSupport.requireNonNull(builder.meaning, "meaning"); - reference = ValidationSupport.requireNonNull(builder.reference, "reference"); - ValidationSupport.requireValueOrChildren(this); + meaning = builder.meaning; + reference = builder.reference; } /** @@ -3007,7 +3066,18 @@ public Builder reference(Reference reference) { */ @Override public Data build() { - return new Data(this); + Data data = new Data(this); + if (validating) { + validate(data); + } + return data; + } + + protected void validate(Data data) { + super.validate(data); + ValidationSupport.requireNonNull(data.meaning, "meaning"); + ValidationSupport.requireNonNull(data.reference, "reference"); + ValidationSupport.requireValueOrChildren(data); } protected Builder from(Data data) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Contract.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Contract.java index 9f62649da4e..5af1d3f4be2 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Contract.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Contract.java @@ -196,7 +196,7 @@ public class Contract extends DomainResource { private Contract(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); url = builder.url; version = builder.version; status = builder.status; @@ -207,35 +207,28 @@ private Contract(Builder builder) { issued = builder.issued; applies = builder.applies; expirationType = builder.expirationType; - subject = Collections.unmodifiableList(ValidationSupport.checkList(builder.subject, "subject", Reference.class)); - authority = Collections.unmodifiableList(ValidationSupport.checkList(builder.authority, "authority", Reference.class)); - domain = Collections.unmodifiableList(ValidationSupport.checkList(builder.domain, "domain", Reference.class)); - site = Collections.unmodifiableList(ValidationSupport.checkList(builder.site, "site", Reference.class)); + subject = Collections.unmodifiableList(builder.subject); + authority = Collections.unmodifiableList(builder.authority); + domain = Collections.unmodifiableList(builder.domain); + site = Collections.unmodifiableList(builder.site); name = builder.name; title = builder.title; subtitle = builder.subtitle; - alias = Collections.unmodifiableList(ValidationSupport.checkList(builder.alias, "alias", String.class)); + alias = Collections.unmodifiableList(builder.alias); author = builder.author; scope = builder.scope; - topic = ValidationSupport.choiceElement(builder.topic, "topic", CodeableConcept.class, Reference.class); + topic = builder.topic; type = builder.type; - subType = Collections.unmodifiableList(ValidationSupport.checkList(builder.subType, "subType", CodeableConcept.class)); + subType = Collections.unmodifiableList(builder.subType); contentDefinition = builder.contentDefinition; - term = Collections.unmodifiableList(ValidationSupport.checkList(builder.term, "term", Term.class)); - supportingInfo = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportingInfo, "supportingInfo", Reference.class)); - relevantHistory = Collections.unmodifiableList(ValidationSupport.checkList(builder.relevantHistory, "relevantHistory", Reference.class)); - signer = Collections.unmodifiableList(ValidationSupport.checkList(builder.signer, "signer", Signer.class)); - friendly = Collections.unmodifiableList(ValidationSupport.checkList(builder.friendly, "friendly", Friendly.class)); - legal = Collections.unmodifiableList(ValidationSupport.checkList(builder.legal, "legal", Legal.class)); - rule = Collections.unmodifiableList(ValidationSupport.checkList(builder.rule, "rule", Rule.class)); - legallyBinding = ValidationSupport.choiceElement(builder.legallyBinding, "legallyBinding", Attachment.class, Reference.class); - ValidationSupport.checkReferenceType(instantiatesCanonical, "instantiatesCanonical", "Contract"); - ValidationSupport.checkReferenceType(authority, "authority", "Organization"); - ValidationSupport.checkReferenceType(domain, "domain", "Location"); - ValidationSupport.checkReferenceType(site, "site", "Location"); - ValidationSupport.checkReferenceType(author, "author", "Patient", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.checkReferenceType(relevantHistory, "relevantHistory", "Provenance"); - ValidationSupport.checkReferenceType(legallyBinding, "legallyBinding", "Composition", "DocumentReference", "QuestionnaireResponse", "Contract"); + term = Collections.unmodifiableList(builder.term); + supportingInfo = Collections.unmodifiableList(builder.supportingInfo); + relevantHistory = Collections.unmodifiableList(builder.relevantHistory); + signer = Collections.unmodifiableList(builder.signer); + friendly = Collections.unmodifiableList(builder.friendly); + legal = Collections.unmodifiableList(builder.legal); + rule = Collections.unmodifiableList(builder.rule); + legallyBinding = builder.legallyBinding; } /** @@ -1896,7 +1889,38 @@ public Builder legallyBinding(Element legallyBinding) { */ @Override public Contract build() { - return new Contract(this); + Contract contract = new Contract(this); + if (validating) { + validate(contract); + } + return contract; + } + + protected void validate(Contract contract) { + super.validate(contract); + ValidationSupport.checkList(contract.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(contract.subject, "subject", Reference.class); + ValidationSupport.checkList(contract.authority, "authority", Reference.class); + ValidationSupport.checkList(contract.domain, "domain", Reference.class); + ValidationSupport.checkList(contract.site, "site", Reference.class); + ValidationSupport.checkList(contract.alias, "alias", String.class); + ValidationSupport.choiceElement(contract.topic, "topic", CodeableConcept.class, Reference.class); + ValidationSupport.checkList(contract.subType, "subType", CodeableConcept.class); + ValidationSupport.checkList(contract.term, "term", Term.class); + ValidationSupport.checkList(contract.supportingInfo, "supportingInfo", Reference.class); + ValidationSupport.checkList(contract.relevantHistory, "relevantHistory", Reference.class); + ValidationSupport.checkList(contract.signer, "signer", Signer.class); + ValidationSupport.checkList(contract.friendly, "friendly", Friendly.class); + ValidationSupport.checkList(contract.legal, "legal", Legal.class); + ValidationSupport.checkList(contract.rule, "rule", Rule.class); + ValidationSupport.choiceElement(contract.legallyBinding, "legallyBinding", Attachment.class, Reference.class); + ValidationSupport.checkReferenceType(contract.instantiatesCanonical, "instantiatesCanonical", "Contract"); + ValidationSupport.checkReferenceType(contract.authority, "authority", "Organization"); + ValidationSupport.checkReferenceType(contract.domain, "domain", "Location"); + ValidationSupport.checkReferenceType(contract.site, "site", "Location"); + ValidationSupport.checkReferenceType(contract.author, "author", "Patient", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.checkReferenceType(contract.relevantHistory, "relevantHistory", "Provenance"); + ValidationSupport.checkReferenceType(contract.legallyBinding, "legallyBinding", "Composition", "DocumentReference", "QuestionnaireResponse", "Contract"); } protected Builder from(Contract contract) { @@ -1973,14 +1997,12 @@ public static class ContentDefinition extends BackboneElement { private ContentDefinition(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); + type = builder.type; subType = builder.subType; publisher = builder.publisher; publicationDate = builder.publicationDate; - publicationStatus = ValidationSupport.requireNonNull(builder.publicationStatus, "publicationStatus"); + publicationStatus = builder.publicationStatus; copyright = builder.copyright; - ValidationSupport.checkReferenceType(publisher, "publisher", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -2360,7 +2382,19 @@ public Builder copyright(Markdown copyright) { */ @Override public ContentDefinition build() { - return new ContentDefinition(this); + ContentDefinition contentDefinition = new ContentDefinition(this); + if (validating) { + validate(contentDefinition); + } + return contentDefinition; + } + + protected void validate(ContentDefinition contentDefinition) { + super.validate(contentDefinition); + ValidationSupport.requireNonNull(contentDefinition.type, "type"); + ValidationSupport.requireNonNull(contentDefinition.publicationStatus, "publicationStatus"); + ValidationSupport.checkReferenceType(contentDefinition.publisher, "publisher", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.requireValueOrChildren(contentDefinition); } protected Builder from(ContentDefinition contentDefinition) { @@ -2416,16 +2450,15 @@ private Term(Builder builder) { identifier = builder.identifier; issued = builder.issued; applies = builder.applies; - topic = ValidationSupport.choiceElement(builder.topic, "topic", CodeableConcept.class, Reference.class); + topic = builder.topic; type = builder.type; subType = builder.subType; text = builder.text; - securityLabel = Collections.unmodifiableList(ValidationSupport.checkList(builder.securityLabel, "securityLabel", SecurityLabel.class)); - offer = ValidationSupport.requireNonNull(builder.offer, "offer"); - asset = Collections.unmodifiableList(ValidationSupport.checkList(builder.asset, "asset", Asset.class)); - action = Collections.unmodifiableList(ValidationSupport.checkList(builder.action, "action", Action.class)); - group = Collections.unmodifiableList(ValidationSupport.checkList(builder.group, "group", Contract.Term.class)); - ValidationSupport.requireValueOrChildren(this); + securityLabel = Collections.unmodifiableList(builder.securityLabel); + offer = builder.offer; + asset = Collections.unmodifiableList(builder.asset); + action = Collections.unmodifiableList(builder.action); + group = Collections.unmodifiableList(builder.group); } /** @@ -3054,7 +3087,22 @@ public Builder group(Collection group) { */ @Override public Term build() { - return new Term(this); + Term term = new Term(this); + if (validating) { + validate(term); + } + return term; + } + + protected void validate(Term term) { + super.validate(term); + ValidationSupport.choiceElement(term.topic, "topic", CodeableConcept.class, Reference.class); + ValidationSupport.checkList(term.securityLabel, "securityLabel", SecurityLabel.class); + ValidationSupport.requireNonNull(term.offer, "offer"); + ValidationSupport.checkList(term.asset, "asset", Asset.class); + ValidationSupport.checkList(term.action, "action", Action.class); + ValidationSupport.checkList(term.group, "group", Contract.Term.class); + ValidationSupport.requireValueOrChildren(term); } protected Builder from(Term term) { @@ -3106,11 +3154,10 @@ public static class SecurityLabel extends BackboneElement { private SecurityLabel(Builder builder) { super(builder); - number = Collections.unmodifiableList(ValidationSupport.checkList(builder.number, "number", UnsignedInt.class)); - classification = ValidationSupport.requireNonNull(builder.classification, "classification"); - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", Coding.class)); - control = Collections.unmodifiableList(ValidationSupport.checkList(builder.control, "control", Coding.class)); - ValidationSupport.requireValueOrChildren(this); + number = Collections.unmodifiableList(builder.number); + classification = builder.classification; + category = Collections.unmodifiableList(builder.category); + control = Collections.unmodifiableList(builder.control); } /** @@ -3476,7 +3523,20 @@ public Builder control(Collection control) { */ @Override public SecurityLabel build() { - return new SecurityLabel(this); + SecurityLabel securityLabel = new SecurityLabel(this); + if (validating) { + validate(securityLabel); + } + return securityLabel; + } + + protected void validate(SecurityLabel securityLabel) { + super.validate(securityLabel); + ValidationSupport.checkList(securityLabel.number, "number", UnsignedInt.class); + ValidationSupport.requireNonNull(securityLabel.classification, "classification"); + ValidationSupport.checkList(securityLabel.category, "category", Coding.class); + ValidationSupport.checkList(securityLabel.control, "control", Coding.class); + ValidationSupport.requireValueOrChildren(securityLabel); } protected Builder from(SecurityLabel securityLabel) { @@ -3526,17 +3586,16 @@ public static class Offer extends BackboneElement { private Offer(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - party = Collections.unmodifiableList(ValidationSupport.checkList(builder.party, "party", Party.class)); + identifier = Collections.unmodifiableList(builder.identifier); + party = Collections.unmodifiableList(builder.party); topic = builder.topic; type = builder.type; decision = builder.decision; - decisionMode = Collections.unmodifiableList(ValidationSupport.checkList(builder.decisionMode, "decisionMode", CodeableConcept.class)); - answer = Collections.unmodifiableList(ValidationSupport.checkList(builder.answer, "answer", Answer.class)); + decisionMode = Collections.unmodifiableList(builder.decisionMode); + answer = Collections.unmodifiableList(builder.answer); text = builder.text; - linkId = Collections.unmodifiableList(ValidationSupport.checkList(builder.linkId, "linkId", String.class)); - securityLabelNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.securityLabelNumber, "securityLabelNumber", UnsignedInt.class)); - ValidationSupport.requireValueOrChildren(this); + linkId = Collections.unmodifiableList(builder.linkId); + securityLabelNumber = Collections.unmodifiableList(builder.securityLabelNumber); } /** @@ -4128,7 +4187,22 @@ public Builder securityLabelNumber(Collection securityLabelNumber) */ @Override public Offer build() { - return new Offer(this); + Offer offer = new Offer(this); + if (validating) { + validate(offer); + } + return offer; + } + + protected void validate(Offer offer) { + super.validate(offer); + ValidationSupport.checkList(offer.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(offer.party, "party", Party.class); + ValidationSupport.checkList(offer.decisionMode, "decisionMode", CodeableConcept.class); + ValidationSupport.checkList(offer.answer, "answer", Answer.class); + ValidationSupport.checkList(offer.linkId, "linkId", String.class); + ValidationSupport.checkList(offer.securityLabelNumber, "securityLabelNumber", UnsignedInt.class); + ValidationSupport.requireValueOrChildren(offer); } protected Builder from(Offer offer) { @@ -4165,10 +4239,8 @@ public static class Party extends BackboneElement { private Party(Builder builder) { super(builder); - reference = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.reference, "reference", Reference.class)); - role = ValidationSupport.requireNonNull(builder.role, "role"); - ValidationSupport.checkReferenceType(reference, "reference", "Patient", "RelatedPerson", "Practitioner", "PractitionerRole", "Device", "Group", "Organization"); - ValidationSupport.requireValueOrChildren(this); + reference = Collections.unmodifiableList(builder.reference); + role = builder.role; } /** @@ -4458,7 +4530,19 @@ public Builder role(CodeableConcept role) { */ @Override public Party build() { - return new Party(this); + Party party = new Party(this); + if (validating) { + validate(party); + } + return party; + } + + protected void validate(Party party) { + super.validate(party); + ValidationSupport.checkNonEmptyList(party.reference, "reference", Reference.class); + ValidationSupport.requireNonNull(party.role, "role"); + ValidationSupport.checkReferenceType(party.reference, "reference", "Patient", "RelatedPerson", "Practitioner", "PractitionerRole", "Device", "Group", "Organization"); + ValidationSupport.requireValueOrChildren(party); } protected Builder from(Party party) { @@ -4480,8 +4564,7 @@ public static class Answer extends BackboneElement { private Answer(Builder builder) { super(builder); - value = ValidationSupport.requireChoiceElement(builder.value, "value", Boolean.class, Decimal.class, Integer.class, Date.class, DateTime.class, Time.class, String.class, Uri.class, Attachment.class, Coding.class, Quantity.class, Reference.class); - ValidationSupport.requireValueOrChildren(this); + value = builder.value; } /** @@ -4715,7 +4798,17 @@ public Builder value(Element value) { */ @Override public Answer build() { - return new Answer(this); + Answer answer = new Answer(this); + if (validating) { + validate(answer); + } + return answer; + } + + protected void validate(Answer answer) { + super.validate(answer); + ValidationSupport.requireChoiceElement(answer.value, "value", Boolean.class, Decimal.class, Integer.class, Date.class, DateTime.class, Time.class, String.class, Uri.class, Attachment.class, Coding.class, Quantity.class, Reference.class); + ValidationSupport.requireValueOrChildren(answer); } protected Builder from(Answer answer) { @@ -4780,21 +4873,20 @@ public static class Asset extends BackboneElement { private Asset(Builder builder) { super(builder); scope = builder.scope; - type = Collections.unmodifiableList(ValidationSupport.checkList(builder.type, "type", CodeableConcept.class)); - typeReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.typeReference, "typeReference", Reference.class)); - subtype = Collections.unmodifiableList(ValidationSupport.checkList(builder.subtype, "subtype", CodeableConcept.class)); + type = Collections.unmodifiableList(builder.type); + typeReference = Collections.unmodifiableList(builder.typeReference); + subtype = Collections.unmodifiableList(builder.subtype); relationship = builder.relationship; - context = Collections.unmodifiableList(ValidationSupport.checkList(builder.context, "context", Context.class)); + context = Collections.unmodifiableList(builder.context); condition = builder.condition; - periodType = Collections.unmodifiableList(ValidationSupport.checkList(builder.periodType, "periodType", CodeableConcept.class)); - period = Collections.unmodifiableList(ValidationSupport.checkList(builder.period, "period", Period.class)); - usePeriod = Collections.unmodifiableList(ValidationSupport.checkList(builder.usePeriod, "usePeriod", Period.class)); + periodType = Collections.unmodifiableList(builder.periodType); + period = Collections.unmodifiableList(builder.period); + usePeriod = Collections.unmodifiableList(builder.usePeriod); text = builder.text; - linkId = Collections.unmodifiableList(ValidationSupport.checkList(builder.linkId, "linkId", String.class)); - answer = Collections.unmodifiableList(ValidationSupport.checkList(builder.answer, "answer", Contract.Term.Offer.Answer.class)); - securityLabelNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.securityLabelNumber, "securityLabelNumber", UnsignedInt.class)); - valuedItem = Collections.unmodifiableList(ValidationSupport.checkList(builder.valuedItem, "valuedItem", ValuedItem.class)); - ValidationSupport.requireValueOrChildren(this); + linkId = Collections.unmodifiableList(builder.linkId); + answer = Collections.unmodifiableList(builder.answer); + securityLabelNumber = Collections.unmodifiableList(builder.securityLabelNumber); + valuedItem = Collections.unmodifiableList(builder.valuedItem); } /** @@ -5631,7 +5723,27 @@ public Builder valuedItem(Collection valuedItem) { */ @Override public Asset build() { - return new Asset(this); + Asset asset = new Asset(this); + if (validating) { + validate(asset); + } + return asset; + } + + protected void validate(Asset asset) { + super.validate(asset); + ValidationSupport.checkList(asset.type, "type", CodeableConcept.class); + ValidationSupport.checkList(asset.typeReference, "typeReference", Reference.class); + ValidationSupport.checkList(asset.subtype, "subtype", CodeableConcept.class); + ValidationSupport.checkList(asset.context, "context", Context.class); + ValidationSupport.checkList(asset.periodType, "periodType", CodeableConcept.class); + ValidationSupport.checkList(asset.period, "period", Period.class); + ValidationSupport.checkList(asset.usePeriod, "usePeriod", Period.class); + ValidationSupport.checkList(asset.linkId, "linkId", String.class); + ValidationSupport.checkList(asset.answer, "answer", Contract.Term.Offer.Answer.class); + ValidationSupport.checkList(asset.securityLabelNumber, "securityLabelNumber", UnsignedInt.class); + ValidationSupport.checkList(asset.valuedItem, "valuedItem", ValuedItem.class); + ValidationSupport.requireValueOrChildren(asset); } protected Builder from(Asset asset) { @@ -5672,9 +5784,8 @@ public static class Context extends BackboneElement { private Context(Builder builder) { super(builder); reference = builder.reference; - code = Collections.unmodifiableList(ValidationSupport.checkList(builder.code, "code", CodeableConcept.class)); + code = Collections.unmodifiableList(builder.code); text = builder.text; - ValidationSupport.requireValueOrChildren(this); } /** @@ -5961,7 +6072,17 @@ public Builder text(String text) { */ @Override public Context build() { - return new Context(this); + Context context = new Context(this); + if (validating) { + validate(context); + } + return context; + } + + protected void validate(Context context) { + super.validate(context); + ValidationSupport.checkList(context.code, "code", CodeableConcept.class); + ValidationSupport.requireValueOrChildren(context); } protected Builder from(Context context) { @@ -5998,7 +6119,7 @@ public static class ValuedItem extends BackboneElement { private ValuedItem(Builder builder) { super(builder); - entity = ValidationSupport.choiceElement(builder.entity, "entity", CodeableConcept.class, Reference.class); + entity = builder.entity; identifier = builder.identifier; effectiveTime = builder.effectiveTime; quantity = builder.quantity; @@ -6010,11 +6131,8 @@ private ValuedItem(Builder builder) { paymentDate = builder.paymentDate; responsible = builder.responsible; recipient = builder.recipient; - linkId = Collections.unmodifiableList(ValidationSupport.checkList(builder.linkId, "linkId", String.class)); - securityLabelNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.securityLabelNumber, "securityLabelNumber", UnsignedInt.class)); - ValidationSupport.checkReferenceType(responsible, "responsible", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson"); - ValidationSupport.checkReferenceType(recipient, "recipient", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson"); - ValidationSupport.requireValueOrChildren(this); + linkId = Collections.unmodifiableList(builder.linkId); + securityLabelNumber = Collections.unmodifiableList(builder.securityLabelNumber); } /** @@ -6677,7 +6795,21 @@ public Builder securityLabelNumber(Collection securityLabelNumber) */ @Override public ValuedItem build() { - return new ValuedItem(this); + ValuedItem valuedItem = new ValuedItem(this); + if (validating) { + validate(valuedItem); + } + return valuedItem; + } + + protected void validate(ValuedItem valuedItem) { + super.validate(valuedItem); + ValidationSupport.choiceElement(valuedItem.entity, "entity", CodeableConcept.class, Reference.class); + ValidationSupport.checkList(valuedItem.linkId, "linkId", String.class); + ValidationSupport.checkList(valuedItem.securityLabelNumber, "securityLabelNumber", UnsignedInt.class); + ValidationSupport.checkReferenceType(valuedItem.responsible, "responsible", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson"); + ValidationSupport.checkReferenceType(valuedItem.recipient, "recipient", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson"); + ValidationSupport.requireValueOrChildren(valuedItem); } protected Builder from(ValuedItem valuedItem) { @@ -6776,31 +6908,26 @@ public static class Action extends BackboneElement { private Action(Builder builder) { super(builder); doNotPerform = builder.doNotPerform; - type = ValidationSupport.requireNonNull(builder.type, "type"); - subject = Collections.unmodifiableList(ValidationSupport.checkList(builder.subject, "subject", Subject.class)); - intent = ValidationSupport.requireNonNull(builder.intent, "intent"); - linkId = Collections.unmodifiableList(ValidationSupport.checkList(builder.linkId, "linkId", String.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + type = builder.type; + subject = Collections.unmodifiableList(builder.subject); + intent = builder.intent; + linkId = Collections.unmodifiableList(builder.linkId); + status = builder.status; context = builder.context; - contextLinkId = Collections.unmodifiableList(ValidationSupport.checkList(builder.contextLinkId, "contextLinkId", String.class)); - occurrence = ValidationSupport.choiceElement(builder.occurrence, "occurrence", DateTime.class, Period.class, Timing.class); - requester = Collections.unmodifiableList(ValidationSupport.checkList(builder.requester, "requester", Reference.class)); - requesterLinkId = Collections.unmodifiableList(ValidationSupport.checkList(builder.requesterLinkId, "requesterLinkId", String.class)); - performerType = Collections.unmodifiableList(ValidationSupport.checkList(builder.performerType, "performerType", CodeableConcept.class)); + contextLinkId = Collections.unmodifiableList(builder.contextLinkId); + occurrence = builder.occurrence; + requester = Collections.unmodifiableList(builder.requester); + requesterLinkId = Collections.unmodifiableList(builder.requesterLinkId); + performerType = Collections.unmodifiableList(builder.performerType); performerRole = builder.performerRole; performer = builder.performer; - performerLinkId = Collections.unmodifiableList(ValidationSupport.checkList(builder.performerLinkId, "performerLinkId", String.class)); - reasonCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonCode, "reasonCode", CodeableConcept.class)); - reasonReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonReference, "reasonReference", Reference.class)); - reason = Collections.unmodifiableList(ValidationSupport.checkList(builder.reason, "reason", String.class)); - reasonLinkId = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonLinkId, "reasonLinkId", String.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - securityLabelNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.securityLabelNumber, "securityLabelNumber", UnsignedInt.class)); - ValidationSupport.checkReferenceType(context, "context", "Encounter", "EpisodeOfCare"); - ValidationSupport.checkReferenceType(requester, "requester", "Patient", "RelatedPerson", "Practitioner", "PractitionerRole", "Device", "Group", "Organization"); - ValidationSupport.checkReferenceType(performer, "performer", "RelatedPerson", "Patient", "Practitioner", "PractitionerRole", "CareTeam", "Device", "Substance", "Organization", "Location"); - ValidationSupport.checkReferenceType(reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference", "Questionnaire", "QuestionnaireResponse"); - ValidationSupport.requireValueOrChildren(this); + performerLinkId = Collections.unmodifiableList(builder.performerLinkId); + reasonCode = Collections.unmodifiableList(builder.reasonCode); + reasonReference = Collections.unmodifiableList(builder.reasonReference); + reason = Collections.unmodifiableList(builder.reason); + reasonLinkId = Collections.unmodifiableList(builder.reasonLinkId); + note = Collections.unmodifiableList(builder.note); + securityLabelNumber = Collections.unmodifiableList(builder.securityLabelNumber); } /** @@ -7945,7 +8072,37 @@ public Builder securityLabelNumber(Collection securityLabelNumber) */ @Override public Action build() { - return new Action(this); + Action action = new Action(this); + if (validating) { + validate(action); + } + return action; + } + + protected void validate(Action action) { + super.validate(action); + ValidationSupport.requireNonNull(action.type, "type"); + ValidationSupport.checkList(action.subject, "subject", Subject.class); + ValidationSupport.requireNonNull(action.intent, "intent"); + ValidationSupport.checkList(action.linkId, "linkId", String.class); + ValidationSupport.requireNonNull(action.status, "status"); + ValidationSupport.checkList(action.contextLinkId, "contextLinkId", String.class); + ValidationSupport.choiceElement(action.occurrence, "occurrence", DateTime.class, Period.class, Timing.class); + ValidationSupport.checkList(action.requester, "requester", Reference.class); + ValidationSupport.checkList(action.requesterLinkId, "requesterLinkId", String.class); + ValidationSupport.checkList(action.performerType, "performerType", CodeableConcept.class); + ValidationSupport.checkList(action.performerLinkId, "performerLinkId", String.class); + ValidationSupport.checkList(action.reasonCode, "reasonCode", CodeableConcept.class); + ValidationSupport.checkList(action.reasonReference, "reasonReference", Reference.class); + ValidationSupport.checkList(action.reason, "reason", String.class); + ValidationSupport.checkList(action.reasonLinkId, "reasonLinkId", String.class); + ValidationSupport.checkList(action.note, "note", Annotation.class); + ValidationSupport.checkList(action.securityLabelNumber, "securityLabelNumber", UnsignedInt.class); + ValidationSupport.checkReferenceType(action.context, "context", "Encounter", "EpisodeOfCare"); + ValidationSupport.checkReferenceType(action.requester, "requester", "Patient", "RelatedPerson", "Practitioner", "PractitionerRole", "Device", "Group", "Organization"); + ValidationSupport.checkReferenceType(action.performer, "performer", "RelatedPerson", "Patient", "Practitioner", "PractitionerRole", "CareTeam", "Device", "Substance", "Organization", "Location"); + ValidationSupport.checkReferenceType(action.reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference", "Questionnaire", "QuestionnaireResponse"); + ValidationSupport.requireValueOrChildren(action); } protected Builder from(Action action) { @@ -7992,10 +8149,8 @@ public static class Subject extends BackboneElement { private Subject(Builder builder) { super(builder); - reference = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.reference, "reference", Reference.class)); + reference = Collections.unmodifiableList(builder.reference); role = builder.role; - ValidationSupport.checkReferenceType(reference, "reference", "Patient", "RelatedPerson", "Practitioner", "PractitionerRole", "Device", "Group", "Organization"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -8282,7 +8437,18 @@ public Builder role(CodeableConcept role) { */ @Override public Subject build() { - return new Subject(this); + Subject subject = new Subject(this); + if (validating) { + validate(subject); + } + return subject; + } + + protected void validate(Subject subject) { + super.validate(subject); + ValidationSupport.checkNonEmptyList(subject.reference, "reference", Reference.class); + ValidationSupport.checkReferenceType(subject.reference, "reference", "Patient", "RelatedPerson", "Practitioner", "PractitionerRole", "Device", "Group", "Organization"); + ValidationSupport.requireValueOrChildren(subject); } protected Builder from(Subject subject) { @@ -8318,11 +8484,9 @@ public static class Signer extends BackboneElement { private Signer(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); - party = ValidationSupport.requireNonNull(builder.party, "party"); - signature = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.signature, "signature", Signature.class)); - ValidationSupport.checkReferenceType(party, "party", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson"); - ValidationSupport.requireValueOrChildren(this); + type = builder.type; + party = builder.party; + signature = Collections.unmodifiableList(builder.signature); } /** @@ -8631,7 +8795,20 @@ public Builder signature(Collection signature) { */ @Override public Signer build() { - return new Signer(this); + Signer signer = new Signer(this); + if (validating) { + validate(signer); + } + return signer; + } + + protected void validate(Signer signer) { + super.validate(signer); + ValidationSupport.requireNonNull(signer.type, "type"); + ValidationSupport.requireNonNull(signer.party, "party"); + ValidationSupport.checkNonEmptyList(signer.signature, "signature", Signature.class); + ValidationSupport.checkReferenceType(signer.party, "party", "Organization", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson"); + ValidationSupport.requireValueOrChildren(signer); } protected Builder from(Signer signer) { @@ -8658,9 +8835,7 @@ public static class Friendly extends BackboneElement { private Friendly(Builder builder) { super(builder); - content = ValidationSupport.requireChoiceElement(builder.content, "content", Attachment.class, Reference.class); - ValidationSupport.checkReferenceType(content, "content", "Composition", "DocumentReference", "QuestionnaireResponse"); - ValidationSupport.requireValueOrChildren(this); + content = builder.content; } /** @@ -8889,7 +9064,18 @@ public Builder content(Element content) { */ @Override public Friendly build() { - return new Friendly(this); + Friendly friendly = new Friendly(this); + if (validating) { + validate(friendly); + } + return friendly; + } + + protected void validate(Friendly friendly) { + super.validate(friendly); + ValidationSupport.requireChoiceElement(friendly.content, "content", Attachment.class, Reference.class); + ValidationSupport.checkReferenceType(friendly.content, "content", "Composition", "DocumentReference", "QuestionnaireResponse"); + ValidationSupport.requireValueOrChildren(friendly); } protected Builder from(Friendly friendly) { @@ -8911,9 +9097,7 @@ public static class Legal extends BackboneElement { private Legal(Builder builder) { super(builder); - content = ValidationSupport.requireChoiceElement(builder.content, "content", Attachment.class, Reference.class); - ValidationSupport.checkReferenceType(content, "content", "Composition", "DocumentReference", "QuestionnaireResponse"); - ValidationSupport.requireValueOrChildren(this); + content = builder.content; } /** @@ -9140,7 +9324,18 @@ public Builder content(Element content) { */ @Override public Legal build() { - return new Legal(this); + Legal legal = new Legal(this); + if (validating) { + validate(legal); + } + return legal; + } + + protected void validate(Legal legal) { + super.validate(legal); + ValidationSupport.requireChoiceElement(legal.content, "content", Attachment.class, Reference.class); + ValidationSupport.checkReferenceType(legal.content, "content", "Composition", "DocumentReference", "QuestionnaireResponse"); + ValidationSupport.requireValueOrChildren(legal); } protected Builder from(Legal legal) { @@ -9162,9 +9357,7 @@ public static class Rule extends BackboneElement { private Rule(Builder builder) { super(builder); - content = ValidationSupport.requireChoiceElement(builder.content, "content", Attachment.class, Reference.class); - ValidationSupport.checkReferenceType(content, "content", "DocumentReference"); - ValidationSupport.requireValueOrChildren(this); + content = builder.content; } /** @@ -9389,7 +9582,18 @@ public Builder content(Element content) { */ @Override public Rule build() { - return new Rule(this); + Rule rule = new Rule(this); + if (validating) { + validate(rule); + } + return rule; + } + + protected void validate(Rule rule) { + super.validate(rule); + ValidationSupport.requireChoiceElement(rule.content, "content", Attachment.class, Reference.class); + ValidationSupport.checkReferenceType(rule.content, "content", "DocumentReference"); + ValidationSupport.requireValueOrChildren(rule); } protected Builder from(Rule rule) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Coverage.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Coverage.java index 0b44c8d4556..af3cfe6e0a7 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Coverage.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Coverage.java @@ -145,28 +145,23 @@ public class Coverage extends DomainResource { private Coverage(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; type = builder.type; policyHolder = builder.policyHolder; subscriber = builder.subscriber; subscriberId = builder.subscriberId; - beneficiary = ValidationSupport.requireNonNull(builder.beneficiary, "beneficiary"); + beneficiary = builder.beneficiary; dependent = builder.dependent; relationship = builder.relationship; period = builder.period; - payor = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.payor, "payor", Reference.class)); - clazz = Collections.unmodifiableList(ValidationSupport.checkList(builder.clazz, "class", Class.class)); + payor = Collections.unmodifiableList(builder.payor); + clazz = Collections.unmodifiableList(builder.clazz); order = builder.order; network = builder.network; - costToBeneficiary = Collections.unmodifiableList(ValidationSupport.checkList(builder.costToBeneficiary, "costToBeneficiary", CostToBeneficiary.class)); + costToBeneficiary = Collections.unmodifiableList(builder.costToBeneficiary); subrogation = builder.subrogation; - contract = Collections.unmodifiableList(ValidationSupport.checkList(builder.contract, "contract", Reference.class)); - ValidationSupport.checkReferenceType(policyHolder, "policyHolder", "Patient", "RelatedPerson", "Organization"); - ValidationSupport.checkReferenceType(subscriber, "subscriber", "Patient", "RelatedPerson"); - ValidationSupport.checkReferenceType(beneficiary, "beneficiary", "Patient"); - ValidationSupport.checkReferenceType(payor, "payor", "Organization", "Patient", "RelatedPerson"); - ValidationSupport.checkReferenceType(contract, "contract", "Contract"); + contract = Collections.unmodifiableList(builder.contract); } /** @@ -1124,7 +1119,27 @@ public Builder contract(Collection contract) { */ @Override public Coverage build() { - return new Coverage(this); + Coverage coverage = new Coverage(this); + if (validating) { + validate(coverage); + } + return coverage; + } + + protected void validate(Coverage coverage) { + super.validate(coverage); + ValidationSupport.checkList(coverage.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(coverage.status, "status"); + ValidationSupport.requireNonNull(coverage.beneficiary, "beneficiary"); + ValidationSupport.checkNonEmptyList(coverage.payor, "payor", Reference.class); + ValidationSupport.checkList(coverage.clazz, "class", Class.class); + ValidationSupport.checkList(coverage.costToBeneficiary, "costToBeneficiary", CostToBeneficiary.class); + ValidationSupport.checkList(coverage.contract, "contract", Reference.class); + ValidationSupport.checkReferenceType(coverage.policyHolder, "policyHolder", "Patient", "RelatedPerson", "Organization"); + ValidationSupport.checkReferenceType(coverage.subscriber, "subscriber", "Patient", "RelatedPerson"); + ValidationSupport.checkReferenceType(coverage.beneficiary, "beneficiary", "Patient"); + ValidationSupport.checkReferenceType(coverage.payor, "payor", "Organization", "Patient", "RelatedPerson"); + ValidationSupport.checkReferenceType(coverage.contract, "contract", "Contract"); } protected Builder from(Coverage coverage) { @@ -1171,10 +1186,9 @@ public static class Class extends BackboneElement { private Class(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); - value = ValidationSupport.requireNonNull(builder.value, "value"); + type = builder.type; + value = builder.value; name = builder.name; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1451,7 +1465,18 @@ public Builder name(String name) { */ @Override public Class build() { - return new Class(this); + Class _class = new Class(this); + if (validating) { + validate(_class); + } + return _class; + } + + protected void validate(Class _class) { + super.validate(_class); + ValidationSupport.requireNonNull(_class.type, "type"); + ValidationSupport.requireNonNull(_class.value, "value"); + ValidationSupport.requireValueOrChildren(_class); } protected Builder from(Class _class) { @@ -1486,9 +1511,8 @@ public static class CostToBeneficiary extends BackboneElement { private CostToBeneficiary(Builder builder) { super(builder); type = builder.type; - value = ValidationSupport.requireChoiceElement(builder.value, "value", SimpleQuantity.class, Money.class); - exception = Collections.unmodifiableList(ValidationSupport.checkList(builder.exception, "exception", Exception.class)); - ValidationSupport.requireValueOrChildren(this); + value = builder.value; + exception = Collections.unmodifiableList(builder.exception); } /** @@ -1786,7 +1810,18 @@ public Builder exception(Collection exception) { */ @Override public CostToBeneficiary build() { - return new CostToBeneficiary(this); + CostToBeneficiary costToBeneficiary = new CostToBeneficiary(this); + if (validating) { + validate(costToBeneficiary); + } + return costToBeneficiary; + } + + protected void validate(CostToBeneficiary costToBeneficiary) { + super.validate(costToBeneficiary); + ValidationSupport.requireChoiceElement(costToBeneficiary.value, "value", SimpleQuantity.class, Money.class); + ValidationSupport.checkList(costToBeneficiary.exception, "exception", Exception.class); + ValidationSupport.requireValueOrChildren(costToBeneficiary); } protected Builder from(CostToBeneficiary costToBeneficiary) { @@ -1816,9 +1851,8 @@ public static class Exception extends BackboneElement { private Exception(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); + type = builder.type; period = builder.period; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2061,7 +2095,17 @@ public Builder period(Period period) { */ @Override public Exception build() { - return new Exception(this); + Exception exception = new Exception(this); + if (validating) { + validate(exception); + } + return exception; + } + + protected void validate(Exception exception) { + super.validate(exception); + ValidationSupport.requireNonNull(exception.type, "type"); + ValidationSupport.requireValueOrChildren(exception); } protected Builder from(Exception exception) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CoverageEligibilityRequest.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CoverageEligibilityRequest.java index 8451e6b4b09..fd09452c3a1 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CoverageEligibilityRequest.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CoverageEligibilityRequest.java @@ -109,25 +109,20 @@ public class CoverageEligibilityRequest extends DomainResource { private CoverageEligibilityRequest(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; priority = builder.priority; - purpose = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.purpose, "purpose", EligibilityRequestPurpose.class)); - patient = ValidationSupport.requireNonNull(builder.patient, "patient"); - serviced = ValidationSupport.choiceElement(builder.serviced, "serviced", Date.class, Period.class); - created = ValidationSupport.requireNonNull(builder.created, "created"); + purpose = Collections.unmodifiableList(builder.purpose); + patient = builder.patient; + serviced = builder.serviced; + created = builder.created; enterer = builder.enterer; provider = builder.provider; - insurer = ValidationSupport.requireNonNull(builder.insurer, "insurer"); + insurer = builder.insurer; facility = builder.facility; - supportingInfo = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportingInfo, "supportingInfo", SupportingInfo.class)); - insurance = Collections.unmodifiableList(ValidationSupport.checkList(builder.insurance, "insurance", Insurance.class)); - item = Collections.unmodifiableList(ValidationSupport.checkList(builder.item, "item", Item.class)); - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(enterer, "enterer", "Practitioner", "PractitionerRole"); - ValidationSupport.checkReferenceType(provider, "provider", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.checkReferenceType(insurer, "insurer", "Organization"); - ValidationSupport.checkReferenceType(facility, "facility", "Location"); + supportingInfo = Collections.unmodifiableList(builder.supportingInfo); + insurance = Collections.unmodifiableList(builder.insurance); + item = Collections.unmodifiableList(builder.item); } /** @@ -988,7 +983,30 @@ public Builder item(Collection item) { */ @Override public CoverageEligibilityRequest build() { - return new CoverageEligibilityRequest(this); + CoverageEligibilityRequest coverageEligibilityRequest = new CoverageEligibilityRequest(this); + if (validating) { + validate(coverageEligibilityRequest); + } + return coverageEligibilityRequest; + } + + protected void validate(CoverageEligibilityRequest coverageEligibilityRequest) { + super.validate(coverageEligibilityRequest); + ValidationSupport.checkList(coverageEligibilityRequest.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(coverageEligibilityRequest.status, "status"); + ValidationSupport.checkNonEmptyList(coverageEligibilityRequest.purpose, "purpose", EligibilityRequestPurpose.class); + ValidationSupport.requireNonNull(coverageEligibilityRequest.patient, "patient"); + ValidationSupport.choiceElement(coverageEligibilityRequest.serviced, "serviced", Date.class, Period.class); + ValidationSupport.requireNonNull(coverageEligibilityRequest.created, "created"); + ValidationSupport.requireNonNull(coverageEligibilityRequest.insurer, "insurer"); + ValidationSupport.checkList(coverageEligibilityRequest.supportingInfo, "supportingInfo", SupportingInfo.class); + ValidationSupport.checkList(coverageEligibilityRequest.insurance, "insurance", Insurance.class); + ValidationSupport.checkList(coverageEligibilityRequest.item, "item", Item.class); + ValidationSupport.checkReferenceType(coverageEligibilityRequest.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(coverageEligibilityRequest.enterer, "enterer", "Practitioner", "PractitionerRole"); + ValidationSupport.checkReferenceType(coverageEligibilityRequest.provider, "provider", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.checkReferenceType(coverageEligibilityRequest.insurer, "insurer", "Organization"); + ValidationSupport.checkReferenceType(coverageEligibilityRequest.facility, "facility", "Location"); } protected Builder from(CoverageEligibilityRequest coverageEligibilityRequest) { @@ -1024,10 +1042,9 @@ public static class SupportingInfo extends BackboneElement { private SupportingInfo(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); - information = ValidationSupport.requireNonNull(builder.information, "information"); + sequence = builder.sequence; + information = builder.information; appliesToAll = builder.appliesToAll; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1304,7 +1321,18 @@ public Builder appliesToAll(Boolean appliesToAll) { */ @Override public SupportingInfo build() { - return new SupportingInfo(this); + SupportingInfo supportingInfo = new SupportingInfo(this); + if (validating) { + validate(supportingInfo); + } + return supportingInfo; + } + + protected void validate(SupportingInfo supportingInfo) { + super.validate(supportingInfo); + ValidationSupport.requireNonNull(supportingInfo.sequence, "sequence"); + ValidationSupport.requireNonNull(supportingInfo.information, "information"); + ValidationSupport.requireValueOrChildren(supportingInfo); } protected Builder from(SupportingInfo supportingInfo) { @@ -1330,10 +1358,8 @@ public static class Insurance extends BackboneElement { private Insurance(Builder builder) { super(builder); focal = builder.focal; - coverage = ValidationSupport.requireNonNull(builder.coverage, "coverage"); + coverage = builder.coverage; businessArrangement = builder.businessArrangement; - ValidationSupport.checkReferenceType(coverage, "coverage", "Coverage"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1612,7 +1638,18 @@ public Builder businessArrangement(String businessArrangement) { */ @Override public Insurance build() { - return new Insurance(this); + Insurance insurance = new Insurance(this); + if (validating) { + validate(insurance); + } + return insurance; + } + + protected void validate(Insurance insurance) { + super.validate(insurance); + ValidationSupport.requireNonNull(insurance.coverage, "coverage"); + ValidationSupport.checkReferenceType(insurance.coverage, "coverage", "Coverage"); + ValidationSupport.requireValueOrChildren(insurance); } protected Builder from(Insurance insurance) { @@ -1663,19 +1700,16 @@ public static class Item extends BackboneElement { private Item(Builder builder) { super(builder); - supportingInfoSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportingInfoSequence, "supportingInfoSequence", PositiveInt.class)); + supportingInfoSequence = Collections.unmodifiableList(builder.supportingInfoSequence); category = builder.category; productOrService = builder.productOrService; - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); + modifier = Collections.unmodifiableList(builder.modifier); provider = builder.provider; quantity = builder.quantity; unitPrice = builder.unitPrice; facility = builder.facility; - diagnosis = Collections.unmodifiableList(ValidationSupport.checkList(builder.diagnosis, "diagnosis", Diagnosis.class)); - detail = Collections.unmodifiableList(ValidationSupport.checkList(builder.detail, "detail", Reference.class)); - ValidationSupport.checkReferenceType(provider, "provider", "Practitioner", "PractitionerRole"); - ValidationSupport.checkReferenceType(facility, "facility", "Location", "Organization"); - ValidationSupport.requireValueOrChildren(this); + diagnosis = Collections.unmodifiableList(builder.diagnosis); + detail = Collections.unmodifiableList(builder.detail); } /** @@ -2235,7 +2269,22 @@ public Builder detail(Collection detail) { */ @Override public Item build() { - return new Item(this); + Item item = new Item(this); + if (validating) { + validate(item); + } + return item; + } + + protected void validate(Item item) { + super.validate(item); + ValidationSupport.checkList(item.supportingInfoSequence, "supportingInfoSequence", PositiveInt.class); + ValidationSupport.checkList(item.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(item.diagnosis, "diagnosis", Diagnosis.class); + ValidationSupport.checkList(item.detail, "detail", Reference.class); + ValidationSupport.checkReferenceType(item.provider, "provider", "Practitioner", "PractitionerRole"); + ValidationSupport.checkReferenceType(item.facility, "facility", "Location", "Organization"); + ValidationSupport.requireValueOrChildren(item); } protected Builder from(Item item) { @@ -2270,9 +2319,7 @@ public static class Diagnosis extends BackboneElement { private Diagnosis(Builder builder) { super(builder); - diagnosis = ValidationSupport.choiceElement(builder.diagnosis, "diagnosis", CodeableConcept.class, Reference.class); - ValidationSupport.checkReferenceType(diagnosis, "diagnosis", "Condition"); - ValidationSupport.requireValueOrChildren(this); + diagnosis = builder.diagnosis; } /** @@ -2490,7 +2537,18 @@ public Builder diagnosis(Element diagnosis) { */ @Override public Diagnosis build() { - return new Diagnosis(this); + Diagnosis diagnosis = new Diagnosis(this); + if (validating) { + validate(diagnosis); + } + return diagnosis; + } + + protected void validate(Diagnosis diagnosis) { + super.validate(diagnosis); + ValidationSupport.choiceElement(diagnosis.diagnosis, "diagnosis", CodeableConcept.class, Reference.class); + ValidationSupport.checkReferenceType(diagnosis.diagnosis, "diagnosis", "Condition"); + ValidationSupport.requireValueOrChildren(diagnosis); } protected Builder from(Diagnosis diagnosis) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CoverageEligibilityResponse.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CoverageEligibilityResponse.java index 4b902d26a49..cdd1d5ad211 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/CoverageEligibilityResponse.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/CoverageEligibilityResponse.java @@ -125,25 +125,21 @@ public class CoverageEligibilityResponse extends DomainResource { private CoverageEligibilityResponse(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - purpose = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.purpose, "purpose", EligibilityResponsePurpose.class)); - patient = ValidationSupport.requireNonNull(builder.patient, "patient"); - serviced = ValidationSupport.choiceElement(builder.serviced, "serviced", Date.class, Period.class); - created = ValidationSupport.requireNonNull(builder.created, "created"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; + purpose = Collections.unmodifiableList(builder.purpose); + patient = builder.patient; + serviced = builder.serviced; + created = builder.created; requestor = builder.requestor; - request = ValidationSupport.requireNonNull(builder.request, "request"); - outcome = ValidationSupport.requireNonNull(builder.outcome, "outcome"); + request = builder.request; + outcome = builder.outcome; disposition = builder.disposition; - insurer = ValidationSupport.requireNonNull(builder.insurer, "insurer"); - insurance = Collections.unmodifiableList(ValidationSupport.checkList(builder.insurance, "insurance", Insurance.class)); + insurer = builder.insurer; + insurance = Collections.unmodifiableList(builder.insurance); preAuthRef = builder.preAuthRef; form = builder.form; - error = Collections.unmodifiableList(ValidationSupport.checkList(builder.error, "error", Error.class)); - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(requestor, "requestor", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.checkReferenceType(request, "request", "CoverageEligibilityRequest"); - ValidationSupport.checkReferenceType(insurer, "insurer", "Organization"); + error = Collections.unmodifiableList(builder.error); } /** @@ -1009,7 +1005,30 @@ public Builder error(Collection error) { */ @Override public CoverageEligibilityResponse build() { - return new CoverageEligibilityResponse(this); + CoverageEligibilityResponse coverageEligibilityResponse = new CoverageEligibilityResponse(this); + if (validating) { + validate(coverageEligibilityResponse); + } + return coverageEligibilityResponse; + } + + protected void validate(CoverageEligibilityResponse coverageEligibilityResponse) { + super.validate(coverageEligibilityResponse); + ValidationSupport.checkList(coverageEligibilityResponse.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(coverageEligibilityResponse.status, "status"); + ValidationSupport.checkNonEmptyList(coverageEligibilityResponse.purpose, "purpose", EligibilityResponsePurpose.class); + ValidationSupport.requireNonNull(coverageEligibilityResponse.patient, "patient"); + ValidationSupport.choiceElement(coverageEligibilityResponse.serviced, "serviced", Date.class, Period.class); + ValidationSupport.requireNonNull(coverageEligibilityResponse.created, "created"); + ValidationSupport.requireNonNull(coverageEligibilityResponse.request, "request"); + ValidationSupport.requireNonNull(coverageEligibilityResponse.outcome, "outcome"); + ValidationSupport.requireNonNull(coverageEligibilityResponse.insurer, "insurer"); + ValidationSupport.checkList(coverageEligibilityResponse.insurance, "insurance", Insurance.class); + ValidationSupport.checkList(coverageEligibilityResponse.error, "error", Error.class); + ValidationSupport.checkReferenceType(coverageEligibilityResponse.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(coverageEligibilityResponse.requestor, "requestor", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.checkReferenceType(coverageEligibilityResponse.request, "request", "CoverageEligibilityRequest"); + ValidationSupport.checkReferenceType(coverageEligibilityResponse.insurer, "insurer", "Organization"); } protected Builder from(CoverageEligibilityResponse coverageEligibilityResponse) { @@ -1047,12 +1066,10 @@ public static class Insurance extends BackboneElement { private Insurance(Builder builder) { super(builder); - coverage = ValidationSupport.requireNonNull(builder.coverage, "coverage"); + coverage = builder.coverage; inforce = builder.inforce; benefitPeriod = builder.benefitPeriod; - item = Collections.unmodifiableList(ValidationSupport.checkList(builder.item, "item", Item.class)); - ValidationSupport.checkReferenceType(coverage, "coverage", "Coverage"); - ValidationSupport.requireValueOrChildren(this); + item = Collections.unmodifiableList(builder.item); } /** @@ -1382,7 +1399,19 @@ public Builder item(Collection item) { */ @Override public Insurance build() { - return new Insurance(this); + Insurance insurance = new Insurance(this); + if (validating) { + validate(insurance); + } + return insurance; + } + + protected void validate(Insurance insurance) { + super.validate(insurance); + ValidationSupport.requireNonNull(insurance.coverage, "coverage"); + ValidationSupport.checkList(insurance.item, "item", Item.class); + ValidationSupport.checkReferenceType(insurance.coverage, "coverage", "Coverage"); + ValidationSupport.requireValueOrChildren(insurance); } protected Builder from(Insurance insurance) { @@ -1461,7 +1490,7 @@ private Item(Builder builder) { super(builder); category = builder.category; productOrService = builder.productOrService; - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); + modifier = Collections.unmodifiableList(builder.modifier); provider = builder.provider; excluded = builder.excluded; name = builder.name; @@ -1469,12 +1498,10 @@ private Item(Builder builder) { network = builder.network; unit = builder.unit; term = builder.term; - benefit = Collections.unmodifiableList(ValidationSupport.checkList(builder.benefit, "benefit", Benefit.class)); + benefit = Collections.unmodifiableList(builder.benefit); authorizationRequired = builder.authorizationRequired; - authorizationSupporting = Collections.unmodifiableList(ValidationSupport.checkList(builder.authorizationSupporting, "authorizationSupporting", CodeableConcept.class)); + authorizationSupporting = Collections.unmodifiableList(builder.authorizationSupporting); authorizationUrl = builder.authorizationUrl; - ValidationSupport.checkReferenceType(provider, "provider", "Practitioner", "PractitionerRole"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -2126,7 +2153,20 @@ public Builder authorizationUrl(Uri authorizationUrl) { */ @Override public Item build() { - return new Item(this); + Item item = new Item(this); + if (validating) { + validate(item); + } + return item; + } + + protected void validate(Item item) { + super.validate(item); + ValidationSupport.checkList(item.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(item.benefit, "benefit", Benefit.class); + ValidationSupport.checkList(item.authorizationSupporting, "authorizationSupporting", CodeableConcept.class); + ValidationSupport.checkReferenceType(item.provider, "provider", "Practitioner", "PractitionerRole"); + ValidationSupport.requireValueOrChildren(item); } protected Builder from(Item item) { @@ -2168,10 +2208,9 @@ public static class Benefit extends BackboneElement { private Benefit(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); - allowed = ValidationSupport.choiceElement(builder.allowed, "allowed", UnsignedInt.class, String.class, Money.class); - used = ValidationSupport.choiceElement(builder.used, "used", UnsignedInt.class, String.class, Money.class); - ValidationSupport.requireValueOrChildren(this); + type = builder.type; + allowed = builder.allowed; + used = builder.used; } /** @@ -2457,7 +2496,19 @@ public Builder used(Element used) { */ @Override public Benefit build() { - return new Benefit(this); + Benefit benefit = new Benefit(this); + if (validating) { + validate(benefit); + } + return benefit; + } + + protected void validate(Benefit benefit) { + super.validate(benefit); + ValidationSupport.requireNonNull(benefit.type, "type"); + ValidationSupport.choiceElement(benefit.allowed, "allowed", UnsignedInt.class, String.class, Money.class); + ValidationSupport.choiceElement(benefit.used, "used", UnsignedInt.class, String.class, Money.class); + ValidationSupport.requireValueOrChildren(benefit); } protected Builder from(Benefit benefit) { @@ -2487,8 +2538,7 @@ public static class Error extends BackboneElement { private Error(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); - ValidationSupport.requireValueOrChildren(this); + code = builder.code; } /** @@ -2702,7 +2752,17 @@ public Builder code(CodeableConcept code) { */ @Override public Error build() { - return new Error(this); + Error error = new Error(this); + if (validating) { + validate(error); + } + return error; + } + + protected void validate(Error error) { + super.validate(error); + ValidationSupport.requireNonNull(error.code, "code"); + ValidationSupport.requireValueOrChildren(error); } protected Builder from(Error error) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DetectedIssue.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DetectedIssue.java index 9c77f1b1e8c..296bd390039 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DetectedIssue.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DetectedIssue.java @@ -114,20 +114,18 @@ public class DetectedIssue extends DomainResource { private DetectedIssue(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; code = builder.code; severity = builder.severity; patient = builder.patient; - identified = ValidationSupport.choiceElement(builder.identified, "identified", DateTime.class, Period.class); + identified = builder.identified; author = builder.author; - implicated = Collections.unmodifiableList(ValidationSupport.checkList(builder.implicated, "implicated", Reference.class)); - evidence = Collections.unmodifiableList(ValidationSupport.checkList(builder.evidence, "evidence", Evidence.class)); + implicated = Collections.unmodifiableList(builder.implicated); + evidence = Collections.unmodifiableList(builder.evidence); detail = builder.detail; reference = builder.reference; - mitigation = Collections.unmodifiableList(ValidationSupport.checkList(builder.mitigation, "mitigation", Mitigation.class)); - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(author, "author", "Practitioner", "PractitionerRole", "Device"); + mitigation = Collections.unmodifiableList(builder.mitigation); } /** @@ -879,7 +877,23 @@ public Builder mitigation(Collection mitigation) { */ @Override public DetectedIssue build() { - return new DetectedIssue(this); + DetectedIssue detectedIssue = new DetectedIssue(this); + if (validating) { + validate(detectedIssue); + } + return detectedIssue; + } + + protected void validate(DetectedIssue detectedIssue) { + super.validate(detectedIssue); + ValidationSupport.checkList(detectedIssue.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(detectedIssue.status, "status"); + ValidationSupport.choiceElement(detectedIssue.identified, "identified", DateTime.class, Period.class); + ValidationSupport.checkList(detectedIssue.implicated, "implicated", Reference.class); + ValidationSupport.checkList(detectedIssue.evidence, "evidence", Evidence.class); + ValidationSupport.checkList(detectedIssue.mitigation, "mitigation", Mitigation.class); + ValidationSupport.checkReferenceType(detectedIssue.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(detectedIssue.author, "author", "Practitioner", "PractitionerRole", "Device"); } protected Builder from(DetectedIssue detectedIssue) { @@ -916,9 +930,8 @@ public static class Evidence extends BackboneElement { private Evidence(Builder builder) { super(builder); - code = Collections.unmodifiableList(ValidationSupport.checkList(builder.code, "code", CodeableConcept.class)); - detail = Collections.unmodifiableList(ValidationSupport.checkList(builder.detail, "detail", Reference.class)); - ValidationSupport.requireValueOrChildren(this); + code = Collections.unmodifiableList(builder.code); + detail = Collections.unmodifiableList(builder.detail); } /** @@ -1194,7 +1207,18 @@ public Builder detail(Collection detail) { */ @Override public Evidence build() { - return new Evidence(this); + Evidence evidence = new Evidence(this); + if (validating) { + validate(evidence); + } + return evidence; + } + + protected void validate(Evidence evidence) { + super.validate(evidence); + ValidationSupport.checkList(evidence.code, "code", CodeableConcept.class); + ValidationSupport.checkList(evidence.detail, "detail", Reference.class); + ValidationSupport.requireValueOrChildren(evidence); } protected Builder from(Evidence evidence) { @@ -1226,11 +1250,9 @@ public static class Mitigation extends BackboneElement { private Mitigation(Builder builder) { super(builder); - action = ValidationSupport.requireNonNull(builder.action, "action"); + action = builder.action; date = builder.date; author = builder.author; - ValidationSupport.checkReferenceType(author, "author", "Practitioner", "PractitionerRole"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1510,7 +1532,18 @@ public Builder author(Reference author) { */ @Override public Mitigation build() { - return new Mitigation(this); + Mitigation mitigation = new Mitigation(this); + if (validating) { + validate(mitigation); + } + return mitigation; + } + + protected void validate(Mitigation mitigation) { + super.validate(mitigation); + ValidationSupport.requireNonNull(mitigation.action, "action"); + ValidationSupport.checkReferenceType(mitigation.author, "author", "Practitioner", "PractitionerRole"); + ValidationSupport.requireValueOrChildren(mitigation); } protected Builder from(Mitigation mitigation) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Device.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Device.java index 4e771377d86..e4cd5e8362a 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Device.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Device.java @@ -118,37 +118,32 @@ public class Device extends DomainResource { private Device(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); definition = builder.definition; - udiCarrier = Collections.unmodifiableList(ValidationSupport.checkList(builder.udiCarrier, "udiCarrier", UdiCarrier.class)); + udiCarrier = Collections.unmodifiableList(builder.udiCarrier); status = builder.status; - statusReason = Collections.unmodifiableList(ValidationSupport.checkList(builder.statusReason, "statusReason", CodeableConcept.class)); + statusReason = Collections.unmodifiableList(builder.statusReason); distinctIdentifier = builder.distinctIdentifier; manufacturer = builder.manufacturer; manufactureDate = builder.manufactureDate; expirationDate = builder.expirationDate; lotNumber = builder.lotNumber; serialNumber = builder.serialNumber; - deviceName = Collections.unmodifiableList(ValidationSupport.checkList(builder.deviceName, "deviceName", DeviceName.class)); + deviceName = Collections.unmodifiableList(builder.deviceName); modelNumber = builder.modelNumber; partNumber = builder.partNumber; type = builder.type; - specialization = Collections.unmodifiableList(ValidationSupport.checkList(builder.specialization, "specialization", Specialization.class)); - version = Collections.unmodifiableList(ValidationSupport.checkList(builder.version, "version", Version.class)); - property = Collections.unmodifiableList(ValidationSupport.checkList(builder.property, "property", Property.class)); + specialization = Collections.unmodifiableList(builder.specialization); + version = Collections.unmodifiableList(builder.version); + property = Collections.unmodifiableList(builder.property); patient = builder.patient; owner = builder.owner; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactPoint.class)); + contact = Collections.unmodifiableList(builder.contact); location = builder.location; url = builder.url; - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - safety = Collections.unmodifiableList(ValidationSupport.checkList(builder.safety, "safety", CodeableConcept.class)); + note = Collections.unmodifiableList(builder.note); + safety = Collections.unmodifiableList(builder.safety); parent = builder.parent; - ValidationSupport.checkReferenceType(definition, "definition", "DeviceDefinition"); - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(owner, "owner", "Organization"); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.checkReferenceType(parent, "parent", "Device"); } /** @@ -1434,7 +1429,30 @@ public Builder parent(Reference parent) { */ @Override public Device build() { - return new Device(this); + Device device = new Device(this); + if (validating) { + validate(device); + } + return device; + } + + protected void validate(Device device) { + super.validate(device); + ValidationSupport.checkList(device.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(device.udiCarrier, "udiCarrier", UdiCarrier.class); + ValidationSupport.checkList(device.statusReason, "statusReason", CodeableConcept.class); + ValidationSupport.checkList(device.deviceName, "deviceName", DeviceName.class); + ValidationSupport.checkList(device.specialization, "specialization", Specialization.class); + ValidationSupport.checkList(device.version, "version", Version.class); + ValidationSupport.checkList(device.property, "property", Property.class); + ValidationSupport.checkList(device.contact, "contact", ContactPoint.class); + ValidationSupport.checkList(device.note, "note", Annotation.class); + ValidationSupport.checkList(device.safety, "safety", CodeableConcept.class); + ValidationSupport.checkReferenceType(device.definition, "definition", "DeviceDefinition"); + ValidationSupport.checkReferenceType(device.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(device.owner, "owner", "Organization"); + ValidationSupport.checkReferenceType(device.location, "location", "Location"); + ValidationSupport.checkReferenceType(device.parent, "parent", "Device"); } protected Builder from(Device device) { @@ -1499,7 +1517,6 @@ private UdiCarrier(Builder builder) { carrierAIDC = builder.carrierAIDC; carrierHRF = builder.carrierHRF; entryType = builder.entryType; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1879,7 +1896,16 @@ public Builder entryType(UDIEntryType entryType) { */ @Override public UdiCarrier build() { - return new UdiCarrier(this); + UdiCarrier udiCarrier = new UdiCarrier(this); + if (validating) { + validate(udiCarrier); + } + return udiCarrier; + } + + protected void validate(UdiCarrier udiCarrier) { + super.validate(udiCarrier); + ValidationSupport.requireValueOrChildren(udiCarrier); } protected Builder from(UdiCarrier udiCarrier) { @@ -1914,9 +1940,8 @@ public static class DeviceName extends BackboneElement { private DeviceName(Builder builder) { super(builder); - name = ValidationSupport.requireNonNull(builder.name, "name"); - type = ValidationSupport.requireNonNull(builder.type, "type"); - ValidationSupport.requireValueOrChildren(this); + name = builder.name; + type = builder.type; } /** @@ -2164,7 +2189,18 @@ public Builder type(DeviceNameType type) { */ @Override public DeviceName build() { - return new DeviceName(this); + DeviceName deviceName = new DeviceName(this); + if (validating) { + validate(deviceName); + } + return deviceName; + } + + protected void validate(DeviceName deviceName) { + super.validate(deviceName); + ValidationSupport.requireNonNull(deviceName.name, "name"); + ValidationSupport.requireNonNull(deviceName.type, "type"); + ValidationSupport.requireValueOrChildren(deviceName); } protected Builder from(DeviceName deviceName) { @@ -2187,9 +2223,8 @@ public static class Specialization extends BackboneElement { private Specialization(Builder builder) { super(builder); - systemType = ValidationSupport.requireNonNull(builder.systemType, "systemType"); + systemType = builder.systemType; version = builder.version; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2432,7 +2467,17 @@ public Builder version(String version) { */ @Override public Specialization build() { - return new Specialization(this); + Specialization specialization = new Specialization(this); + if (validating) { + validate(specialization); + } + return specialization; + } + + protected void validate(Specialization specialization) { + super.validate(specialization); + ValidationSupport.requireNonNull(specialization.systemType, "systemType"); + ValidationSupport.requireValueOrChildren(specialization); } protected Builder from(Specialization specialization) { @@ -2457,8 +2502,7 @@ private Version(Builder builder) { super(builder); type = builder.type; component = builder.component; - value = ValidationSupport.requireNonNull(builder.value, "value"); - ValidationSupport.requireValueOrChildren(this); + value = builder.value; } /** @@ -2730,7 +2774,17 @@ public Builder value(String value) { */ @Override public Version build() { - return new Version(this); + Version version = new Version(this); + if (validating) { + validate(version); + } + return version; + } + + protected void validate(Version version) { + super.validate(version); + ValidationSupport.requireNonNull(version.value, "value"); + ValidationSupport.requireValueOrChildren(version); } protected Builder from(Version version) { @@ -2754,10 +2808,9 @@ public static class Property extends BackboneElement { private Property(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); - valueQuantity = Collections.unmodifiableList(ValidationSupport.checkList(builder.valueQuantity, "valueQuantity", Quantity.class)); - valueCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.valueCode, "valueCode", CodeableConcept.class)); - ValidationSupport.requireValueOrChildren(this); + type = builder.type; + valueQuantity = Collections.unmodifiableList(builder.valueQuantity); + valueCode = Collections.unmodifiableList(builder.valueCode); } /** @@ -3069,7 +3122,19 @@ public Builder valueCode(Collection valueCode) { */ @Override public Property build() { - return new Property(this); + Property property = new Property(this); + if (validating) { + validate(property); + } + return property; + } + + protected void validate(Property property) { + super.validate(property); + ValidationSupport.requireNonNull(property.type, "type"); + ValidationSupport.checkList(property.valueQuantity, "valueQuantity", Quantity.class); + ValidationSupport.checkList(property.valueCode, "valueCode", CodeableConcept.class); + ValidationSupport.requireValueOrChildren(property); } protected Builder from(Property property) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceDefinition.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceDefinition.java index 1948497a812..bf1efe95b89 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceDefinition.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceDefinition.java @@ -96,31 +96,28 @@ public class DeviceDefinition extends DomainResource { private DeviceDefinition(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - udiDeviceIdentifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.udiDeviceIdentifier, "udiDeviceIdentifier", UdiDeviceIdentifier.class)); - manufacturer = ValidationSupport.choiceElement(builder.manufacturer, "manufacturer", String.class, Reference.class); - deviceName = Collections.unmodifiableList(ValidationSupport.checkList(builder.deviceName, "deviceName", DeviceName.class)); + identifier = Collections.unmodifiableList(builder.identifier); + udiDeviceIdentifier = Collections.unmodifiableList(builder.udiDeviceIdentifier); + manufacturer = builder.manufacturer; + deviceName = Collections.unmodifiableList(builder.deviceName); modelNumber = builder.modelNumber; type = builder.type; - specialization = Collections.unmodifiableList(ValidationSupport.checkList(builder.specialization, "specialization", Specialization.class)); - version = Collections.unmodifiableList(ValidationSupport.checkList(builder.version, "version", String.class)); - safety = Collections.unmodifiableList(ValidationSupport.checkList(builder.safety, "safety", CodeableConcept.class)); - shelfLifeStorage = Collections.unmodifiableList(ValidationSupport.checkList(builder.shelfLifeStorage, "shelfLifeStorage", ProductShelfLife.class)); + specialization = Collections.unmodifiableList(builder.specialization); + version = Collections.unmodifiableList(builder.version); + safety = Collections.unmodifiableList(builder.safety); + shelfLifeStorage = Collections.unmodifiableList(builder.shelfLifeStorage); physicalCharacteristics = builder.physicalCharacteristics; - languageCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.languageCode, "languageCode", CodeableConcept.class)); - capability = Collections.unmodifiableList(ValidationSupport.checkList(builder.capability, "capability", Capability.class)); - property = Collections.unmodifiableList(ValidationSupport.checkList(builder.property, "property", Property.class)); + languageCode = Collections.unmodifiableList(builder.languageCode); + capability = Collections.unmodifiableList(builder.capability); + property = Collections.unmodifiableList(builder.property); owner = builder.owner; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactPoint.class)); + contact = Collections.unmodifiableList(builder.contact); url = builder.url; onlineInformation = builder.onlineInformation; - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); + note = Collections.unmodifiableList(builder.note); quantity = builder.quantity; parentDevice = builder.parentDevice; - material = Collections.unmodifiableList(ValidationSupport.checkList(builder.material, "material", Material.class)); - ValidationSupport.checkReferenceType(manufacturer, "manufacturer", "Organization"); - ValidationSupport.checkReferenceType(owner, "owner", "Organization"); - ValidationSupport.checkReferenceType(parentDevice, "parentDevice", "DeviceDefinition"); + material = Collections.unmodifiableList(builder.material); } /** @@ -1344,7 +1341,32 @@ public Builder material(Collection material) { */ @Override public DeviceDefinition build() { - return new DeviceDefinition(this); + DeviceDefinition deviceDefinition = new DeviceDefinition(this); + if (validating) { + validate(deviceDefinition); + } + return deviceDefinition; + } + + protected void validate(DeviceDefinition deviceDefinition) { + super.validate(deviceDefinition); + ValidationSupport.checkList(deviceDefinition.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(deviceDefinition.udiDeviceIdentifier, "udiDeviceIdentifier", UdiDeviceIdentifier.class); + ValidationSupport.choiceElement(deviceDefinition.manufacturer, "manufacturer", String.class, Reference.class); + ValidationSupport.checkList(deviceDefinition.deviceName, "deviceName", DeviceName.class); + ValidationSupport.checkList(deviceDefinition.specialization, "specialization", Specialization.class); + ValidationSupport.checkList(deviceDefinition.version, "version", String.class); + ValidationSupport.checkList(deviceDefinition.safety, "safety", CodeableConcept.class); + ValidationSupport.checkList(deviceDefinition.shelfLifeStorage, "shelfLifeStorage", ProductShelfLife.class); + ValidationSupport.checkList(deviceDefinition.languageCode, "languageCode", CodeableConcept.class); + ValidationSupport.checkList(deviceDefinition.capability, "capability", Capability.class); + ValidationSupport.checkList(deviceDefinition.property, "property", Property.class); + ValidationSupport.checkList(deviceDefinition.contact, "contact", ContactPoint.class); + ValidationSupport.checkList(deviceDefinition.note, "note", Annotation.class); + ValidationSupport.checkList(deviceDefinition.material, "material", Material.class); + ValidationSupport.checkReferenceType(deviceDefinition.manufacturer, "manufacturer", "Organization"); + ValidationSupport.checkReferenceType(deviceDefinition.owner, "owner", "Organization"); + ValidationSupport.checkReferenceType(deviceDefinition.parentDevice, "parentDevice", "DeviceDefinition"); } protected Builder from(DeviceDefinition deviceDefinition) { @@ -1390,10 +1412,9 @@ public static class UdiDeviceIdentifier extends BackboneElement { private UdiDeviceIdentifier(Builder builder) { super(builder); - deviceIdentifier = ValidationSupport.requireNonNull(builder.deviceIdentifier, "deviceIdentifier"); - issuer = ValidationSupport.requireNonNull(builder.issuer, "issuer"); - jurisdiction = ValidationSupport.requireNonNull(builder.jurisdiction, "jurisdiction"); - ValidationSupport.requireValueOrChildren(this); + deviceIdentifier = builder.deviceIdentifier; + issuer = builder.issuer; + jurisdiction = builder.jurisdiction; } /** @@ -1674,7 +1695,19 @@ public Builder jurisdiction(Uri jurisdiction) { */ @Override public UdiDeviceIdentifier build() { - return new UdiDeviceIdentifier(this); + UdiDeviceIdentifier udiDeviceIdentifier = new UdiDeviceIdentifier(this); + if (validating) { + validate(udiDeviceIdentifier); + } + return udiDeviceIdentifier; + } + + protected void validate(UdiDeviceIdentifier udiDeviceIdentifier) { + super.validate(udiDeviceIdentifier); + ValidationSupport.requireNonNull(udiDeviceIdentifier.deviceIdentifier, "deviceIdentifier"); + ValidationSupport.requireNonNull(udiDeviceIdentifier.issuer, "issuer"); + ValidationSupport.requireNonNull(udiDeviceIdentifier.jurisdiction, "jurisdiction"); + ValidationSupport.requireValueOrChildren(udiDeviceIdentifier); } protected Builder from(UdiDeviceIdentifier udiDeviceIdentifier) { @@ -1704,9 +1737,8 @@ public static class DeviceName extends BackboneElement { private DeviceName(Builder builder) { super(builder); - name = ValidationSupport.requireNonNull(builder.name, "name"); - type = ValidationSupport.requireNonNull(builder.type, "type"); - ValidationSupport.requireValueOrChildren(this); + name = builder.name; + type = builder.type; } /** @@ -1954,7 +1986,18 @@ public Builder type(DeviceNameType type) { */ @Override public DeviceName build() { - return new DeviceName(this); + DeviceName deviceName = new DeviceName(this); + if (validating) { + validate(deviceName); + } + return deviceName; + } + + protected void validate(DeviceName deviceName) { + super.validate(deviceName); + ValidationSupport.requireNonNull(deviceName.name, "name"); + ValidationSupport.requireNonNull(deviceName.type, "type"); + ValidationSupport.requireValueOrChildren(deviceName); } protected Builder from(DeviceName deviceName) { @@ -1977,9 +2020,8 @@ public static class Specialization extends BackboneElement { private Specialization(Builder builder) { super(builder); - systemType = ValidationSupport.requireNonNull(builder.systemType, "systemType"); + systemType = builder.systemType; version = builder.version; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2222,7 +2264,17 @@ public Builder version(String version) { */ @Override public Specialization build() { - return new Specialization(this); + Specialization specialization = new Specialization(this); + if (validating) { + validate(specialization); + } + return specialization; + } + + protected void validate(Specialization specialization) { + super.validate(specialization); + ValidationSupport.requireNonNull(specialization.systemType, "systemType"); + ValidationSupport.requireValueOrChildren(specialization); } protected Builder from(Specialization specialization) { @@ -2244,9 +2296,8 @@ public static class Capability extends BackboneElement { private Capability(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); - description = Collections.unmodifiableList(ValidationSupport.checkList(builder.description, "description", CodeableConcept.class)); - ValidationSupport.requireValueOrChildren(this); + type = builder.type; + description = Collections.unmodifiableList(builder.description); } /** @@ -2509,7 +2560,18 @@ public Builder description(Collection description) { */ @Override public Capability build() { - return new Capability(this); + Capability capability = new Capability(this); + if (validating) { + validate(capability); + } + return capability; + } + + protected void validate(Capability capability) { + super.validate(capability); + ValidationSupport.requireNonNull(capability.type, "type"); + ValidationSupport.checkList(capability.description, "description", CodeableConcept.class); + ValidationSupport.requireValueOrChildren(capability); } protected Builder from(Capability capability) { @@ -2532,10 +2594,9 @@ public static class Property extends BackboneElement { private Property(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); - valueQuantity = Collections.unmodifiableList(ValidationSupport.checkList(builder.valueQuantity, "valueQuantity", Quantity.class)); - valueCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.valueCode, "valueCode", CodeableConcept.class)); - ValidationSupport.requireValueOrChildren(this); + type = builder.type; + valueQuantity = Collections.unmodifiableList(builder.valueQuantity); + valueCode = Collections.unmodifiableList(builder.valueCode); } /** @@ -2847,7 +2908,19 @@ public Builder valueCode(Collection valueCode) { */ @Override public Property build() { - return new Property(this); + Property property = new Property(this); + if (validating) { + validate(property); + } + return property; + } + + protected void validate(Property property) { + super.validate(property); + ValidationSupport.requireNonNull(property.type, "type"); + ValidationSupport.checkList(property.valueQuantity, "valueQuantity", Quantity.class); + ValidationSupport.checkList(property.valueCode, "valueCode", CodeableConcept.class); + ValidationSupport.requireValueOrChildren(property); } protected Builder from(Property property) { @@ -2871,10 +2944,9 @@ public static class Material extends BackboneElement { private Material(Builder builder) { super(builder); - substance = ValidationSupport.requireNonNull(builder.substance, "substance"); + substance = builder.substance; alternate = builder.alternate; allergenicIndicator = builder.allergenicIndicator; - ValidationSupport.requireValueOrChildren(this); } /** @@ -3146,7 +3218,17 @@ public Builder allergenicIndicator(Boolean allergenicIndicator) { */ @Override public Material build() { - return new Material(this); + Material material = new Material(this); + if (validating) { + validate(material); + } + return material; + } + + protected void validate(Material material) { + super.validate(material); + ValidationSupport.requireNonNull(material.substance, "substance"); + ValidationSupport.requireValueOrChildren(material); } protected Builder from(Material material) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceMetric.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceMetric.java index 63eb4ad5ff1..9e886f6ddeb 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceMetric.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceMetric.java @@ -125,18 +125,16 @@ public class DeviceMetric extends DomainResource { private DeviceMetric(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - type = ValidationSupport.requireNonNull(builder.type, "type"); + identifier = Collections.unmodifiableList(builder.identifier); + type = builder.type; unit = builder.unit; source = builder.source; parent = builder.parent; operationalStatus = builder.operationalStatus; color = builder.color; - category = ValidationSupport.requireNonNull(builder.category, "category"); + category = builder.category; measurementPeriod = builder.measurementPeriod; - calibration = Collections.unmodifiableList(ValidationSupport.checkList(builder.calibration, "calibration", Calibration.class)); - ValidationSupport.checkReferenceType(source, "source", "Device"); - ValidationSupport.checkReferenceType(parent, "parent", "Device"); + calibration = Collections.unmodifiableList(builder.calibration); } /** @@ -799,7 +797,21 @@ public Builder calibration(Collection calibration) { */ @Override public DeviceMetric build() { - return new DeviceMetric(this); + DeviceMetric deviceMetric = new DeviceMetric(this); + if (validating) { + validate(deviceMetric); + } + return deviceMetric; + } + + protected void validate(DeviceMetric deviceMetric) { + super.validate(deviceMetric); + ValidationSupport.checkList(deviceMetric.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(deviceMetric.type, "type"); + ValidationSupport.requireNonNull(deviceMetric.category, "category"); + ValidationSupport.checkList(deviceMetric.calibration, "calibration", Calibration.class); + ValidationSupport.checkReferenceType(deviceMetric.source, "source", "Device"); + ValidationSupport.checkReferenceType(deviceMetric.parent, "parent", "Device"); } protected Builder from(DeviceMetric deviceMetric) { @@ -846,7 +858,6 @@ private Calibration(Builder builder) { type = builder.type; state = builder.state; time = builder.time; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1111,7 +1122,16 @@ public Builder time(Instant time) { */ @Override public Calibration build() { - return new Calibration(this); + Calibration calibration = new Calibration(this); + if (validating) { + validate(calibration); + } + return calibration; + } + + protected void validate(Calibration calibration) { + super.validate(calibration); + ValidationSupport.requireValueOrChildren(calibration); } protected Builder from(Calibration calibration) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceRequest.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceRequest.java index 8914b5765d5..0a28e98385c 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceRequest.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceRequest.java @@ -153,38 +153,30 @@ public class DeviceRequest extends DomainResource { private DeviceRequest(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - instantiatesCanonical = Collections.unmodifiableList(ValidationSupport.checkList(builder.instantiatesCanonical, "instantiatesCanonical", Canonical.class)); - instantiatesUri = Collections.unmodifiableList(ValidationSupport.checkList(builder.instantiatesUri, "instantiatesUri", Uri.class)); - basedOn = Collections.unmodifiableList(ValidationSupport.checkList(builder.basedOn, "basedOn", Reference.class)); - priorRequest = Collections.unmodifiableList(ValidationSupport.checkList(builder.priorRequest, "priorRequest", Reference.class)); + identifier = Collections.unmodifiableList(builder.identifier); + instantiatesCanonical = Collections.unmodifiableList(builder.instantiatesCanonical); + instantiatesUri = Collections.unmodifiableList(builder.instantiatesUri); + basedOn = Collections.unmodifiableList(builder.basedOn); + priorRequest = Collections.unmodifiableList(builder.priorRequest); groupIdentifier = builder.groupIdentifier; status = builder.status; - intent = ValidationSupport.requireNonNull(builder.intent, "intent"); + intent = builder.intent; priority = builder.priority; - code = ValidationSupport.requireChoiceElement(builder.code, "code", Reference.class, CodeableConcept.class); - parameter = Collections.unmodifiableList(ValidationSupport.checkList(builder.parameter, "parameter", Parameter.class)); - subject = ValidationSupport.requireNonNull(builder.subject, "subject"); + code = builder.code; + parameter = Collections.unmodifiableList(builder.parameter); + subject = builder.subject; encounter = builder.encounter; - occurrence = ValidationSupport.choiceElement(builder.occurrence, "occurrence", DateTime.class, Period.class, Timing.class); + occurrence = builder.occurrence; authoredOn = builder.authoredOn; requester = builder.requester; performerType = builder.performerType; performer = builder.performer; - reasonCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonCode, "reasonCode", CodeableConcept.class)); - reasonReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonReference, "reasonReference", Reference.class)); - insurance = Collections.unmodifiableList(ValidationSupport.checkList(builder.insurance, "insurance", Reference.class)); - supportingInfo = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportingInfo, "supportingInfo", Reference.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - relevantHistory = Collections.unmodifiableList(ValidationSupport.checkList(builder.relevantHistory, "relevantHistory", Reference.class)); - ValidationSupport.checkReferenceType(code, "code", "Device"); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group", "Location", "Device"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(requester, "requester", "Device", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.checkReferenceType(performer, "performer", "Practitioner", "PractitionerRole", "Organization", "CareTeam", "HealthcareService", "Patient", "Device", "RelatedPerson"); - ValidationSupport.checkReferenceType(reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference"); - ValidationSupport.checkReferenceType(insurance, "insurance", "Coverage", "ClaimResponse"); - ValidationSupport.checkReferenceType(relevantHistory, "relevantHistory", "Provenance"); + reasonCode = Collections.unmodifiableList(builder.reasonCode); + reasonReference = Collections.unmodifiableList(builder.reasonReference); + insurance = Collections.unmodifiableList(builder.insurance); + supportingInfo = Collections.unmodifiableList(builder.supportingInfo); + note = Collections.unmodifiableList(builder.note); + relevantHistory = Collections.unmodifiableList(builder.relevantHistory); } /** @@ -1529,7 +1521,39 @@ public Builder relevantHistory(Collection relevantHistory) { */ @Override public DeviceRequest build() { - return new DeviceRequest(this); + DeviceRequest deviceRequest = new DeviceRequest(this); + if (validating) { + validate(deviceRequest); + } + return deviceRequest; + } + + protected void validate(DeviceRequest deviceRequest) { + super.validate(deviceRequest); + ValidationSupport.checkList(deviceRequest.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(deviceRequest.instantiatesCanonical, "instantiatesCanonical", Canonical.class); + ValidationSupport.checkList(deviceRequest.instantiatesUri, "instantiatesUri", Uri.class); + ValidationSupport.checkList(deviceRequest.basedOn, "basedOn", Reference.class); + ValidationSupport.checkList(deviceRequest.priorRequest, "priorRequest", Reference.class); + ValidationSupport.requireNonNull(deviceRequest.intent, "intent"); + ValidationSupport.requireChoiceElement(deviceRequest.code, "code", Reference.class, CodeableConcept.class); + ValidationSupport.checkList(deviceRequest.parameter, "parameter", Parameter.class); + ValidationSupport.requireNonNull(deviceRequest.subject, "subject"); + ValidationSupport.choiceElement(deviceRequest.occurrence, "occurrence", DateTime.class, Period.class, Timing.class); + ValidationSupport.checkList(deviceRequest.reasonCode, "reasonCode", CodeableConcept.class); + ValidationSupport.checkList(deviceRequest.reasonReference, "reasonReference", Reference.class); + ValidationSupport.checkList(deviceRequest.insurance, "insurance", Reference.class); + ValidationSupport.checkList(deviceRequest.supportingInfo, "supportingInfo", Reference.class); + ValidationSupport.checkList(deviceRequest.note, "note", Annotation.class); + ValidationSupport.checkList(deviceRequest.relevantHistory, "relevantHistory", Reference.class); + ValidationSupport.checkReferenceType(deviceRequest.code, "code", "Device"); + ValidationSupport.checkReferenceType(deviceRequest.subject, "subject", "Patient", "Group", "Location", "Device"); + ValidationSupport.checkReferenceType(deviceRequest.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(deviceRequest.requester, "requester", "Device", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.checkReferenceType(deviceRequest.performer, "performer", "Practitioner", "PractitionerRole", "Organization", "CareTeam", "HealthcareService", "Patient", "Device", "RelatedPerson"); + ValidationSupport.checkReferenceType(deviceRequest.reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference"); + ValidationSupport.checkReferenceType(deviceRequest.insurance, "insurance", "Coverage", "ClaimResponse"); + ValidationSupport.checkReferenceType(deviceRequest.relevantHistory, "relevantHistory", "Provenance"); } protected Builder from(DeviceRequest deviceRequest) { @@ -1578,8 +1602,7 @@ public static class Parameter extends BackboneElement { private Parameter(Builder builder) { super(builder); code = builder.code; - value = ValidationSupport.choiceElement(builder.value, "value", CodeableConcept.class, Quantity.class, Range.class, Boolean.class); - ValidationSupport.requireValueOrChildren(this); + value = builder.value; } /** @@ -1823,7 +1846,17 @@ public Builder value(Element value) { */ @Override public Parameter build() { - return new Parameter(this); + Parameter parameter = new Parameter(this); + if (validating) { + validate(parameter); + } + return parameter; + } + + protected void validate(Parameter parameter) { + super.validate(parameter); + ValidationSupport.choiceElement(parameter.value, "value", CodeableConcept.class, Quantity.class, Range.class, Boolean.class); + ValidationSupport.requireValueOrChildren(parameter); } protected Builder from(Parameter parameter) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceUseStatement.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceUseStatement.java index f66ff8797a5..741bf9989d6 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceUseStatement.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DeviceUseStatement.java @@ -101,25 +101,19 @@ public class DeviceUseStatement extends DomainResource { private DeviceUseStatement(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - basedOn = Collections.unmodifiableList(ValidationSupport.checkList(builder.basedOn, "basedOn", Reference.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - subject = ValidationSupport.requireNonNull(builder.subject, "subject"); - derivedFrom = Collections.unmodifiableList(ValidationSupport.checkList(builder.derivedFrom, "derivedFrom", Reference.class)); - timing = ValidationSupport.choiceElement(builder.timing, "timing", Timing.class, Period.class, DateTime.class); + identifier = Collections.unmodifiableList(builder.identifier); + basedOn = Collections.unmodifiableList(builder.basedOn); + status = builder.status; + subject = builder.subject; + derivedFrom = Collections.unmodifiableList(builder.derivedFrom); + timing = builder.timing; recordedOn = builder.recordedOn; source = builder.source; - device = ValidationSupport.requireNonNull(builder.device, "device"); - reasonCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonCode, "reasonCode", CodeableConcept.class)); - reasonReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonReference, "reasonReference", Reference.class)); + device = builder.device; + reasonCode = Collections.unmodifiableList(builder.reasonCode); + reasonReference = Collections.unmodifiableList(builder.reasonReference); bodySite = builder.bodySite; - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - ValidationSupport.checkReferenceType(basedOn, "basedOn", "ServiceRequest"); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group"); - ValidationSupport.checkReferenceType(derivedFrom, "derivedFrom", "ServiceRequest", "Procedure", "Claim", "Observation", "QuestionnaireResponse", "DocumentReference"); - ValidationSupport.checkReferenceType(source, "source", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson"); - ValidationSupport.checkReferenceType(device, "device", "Device"); - ValidationSupport.checkReferenceType(reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference", "Media"); + note = Collections.unmodifiableList(builder.note); } /** @@ -999,7 +993,31 @@ public Builder note(Collection note) { */ @Override public DeviceUseStatement build() { - return new DeviceUseStatement(this); + DeviceUseStatement deviceUseStatement = new DeviceUseStatement(this); + if (validating) { + validate(deviceUseStatement); + } + return deviceUseStatement; + } + + protected void validate(DeviceUseStatement deviceUseStatement) { + super.validate(deviceUseStatement); + ValidationSupport.checkList(deviceUseStatement.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(deviceUseStatement.basedOn, "basedOn", Reference.class); + ValidationSupport.requireNonNull(deviceUseStatement.status, "status"); + ValidationSupport.requireNonNull(deviceUseStatement.subject, "subject"); + ValidationSupport.checkList(deviceUseStatement.derivedFrom, "derivedFrom", Reference.class); + ValidationSupport.choiceElement(deviceUseStatement.timing, "timing", Timing.class, Period.class, DateTime.class); + ValidationSupport.requireNonNull(deviceUseStatement.device, "device"); + ValidationSupport.checkList(deviceUseStatement.reasonCode, "reasonCode", CodeableConcept.class); + ValidationSupport.checkList(deviceUseStatement.reasonReference, "reasonReference", Reference.class); + ValidationSupport.checkList(deviceUseStatement.note, "note", Annotation.class); + ValidationSupport.checkReferenceType(deviceUseStatement.basedOn, "basedOn", "ServiceRequest"); + ValidationSupport.checkReferenceType(deviceUseStatement.subject, "subject", "Patient", "Group"); + ValidationSupport.checkReferenceType(deviceUseStatement.derivedFrom, "derivedFrom", "ServiceRequest", "Procedure", "Claim", "Observation", "QuestionnaireResponse", "DocumentReference"); + ValidationSupport.checkReferenceType(deviceUseStatement.source, "source", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson"); + ValidationSupport.checkReferenceType(deviceUseStatement.device, "device", "Device"); + ValidationSupport.checkReferenceType(deviceUseStatement.reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference", "Media"); } protected Builder from(DeviceUseStatement deviceUseStatement) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DiagnosticReport.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DiagnosticReport.java index 1c74cca1450..035283313f9 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DiagnosticReport.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DiagnosticReport.java @@ -131,32 +131,24 @@ public class DiagnosticReport extends DomainResource { private DiagnosticReport(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - basedOn = Collections.unmodifiableList(ValidationSupport.checkList(builder.basedOn, "basedOn", Reference.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", CodeableConcept.class)); - code = ValidationSupport.requireNonNull(builder.code, "code"); + identifier = Collections.unmodifiableList(builder.identifier); + basedOn = Collections.unmodifiableList(builder.basedOn); + status = builder.status; + category = Collections.unmodifiableList(builder.category); + code = builder.code; subject = builder.subject; encounter = builder.encounter; - effective = ValidationSupport.choiceElement(builder.effective, "effective", DateTime.class, Period.class); + effective = builder.effective; issued = builder.issued; - performer = Collections.unmodifiableList(ValidationSupport.checkList(builder.performer, "performer", Reference.class)); - resultsInterpreter = Collections.unmodifiableList(ValidationSupport.checkList(builder.resultsInterpreter, "resultsInterpreter", Reference.class)); - specimen = Collections.unmodifiableList(ValidationSupport.checkList(builder.specimen, "specimen", Reference.class)); - result = Collections.unmodifiableList(ValidationSupport.checkList(builder.result, "result", Reference.class)); - imagingStudy = Collections.unmodifiableList(ValidationSupport.checkList(builder.imagingStudy, "imagingStudy", Reference.class)); - media = Collections.unmodifiableList(ValidationSupport.checkList(builder.media, "media", Media.class)); + performer = Collections.unmodifiableList(builder.performer); + resultsInterpreter = Collections.unmodifiableList(builder.resultsInterpreter); + specimen = Collections.unmodifiableList(builder.specimen); + result = Collections.unmodifiableList(builder.result); + imagingStudy = Collections.unmodifiableList(builder.imagingStudy); + media = Collections.unmodifiableList(builder.media); conclusion = builder.conclusion; - conclusionCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.conclusionCode, "conclusionCode", CodeableConcept.class)); - presentedForm = Collections.unmodifiableList(ValidationSupport.checkList(builder.presentedForm, "presentedForm", Attachment.class)); - ValidationSupport.checkReferenceType(basedOn, "basedOn", "CarePlan", "ImmunizationRecommendation", "MedicationRequest", "NutritionOrder", "ServiceRequest"); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group", "Device", "Location"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(performer, "performer", "Practitioner", "PractitionerRole", "Organization", "CareTeam"); - ValidationSupport.checkReferenceType(resultsInterpreter, "resultsInterpreter", "Practitioner", "PractitionerRole", "Organization", "CareTeam"); - ValidationSupport.checkReferenceType(specimen, "specimen", "Specimen"); - ValidationSupport.checkReferenceType(result, "result", "Observation"); - ValidationSupport.checkReferenceType(imagingStudy, "imagingStudy", "ImagingStudy"); + conclusionCode = Collections.unmodifiableList(builder.conclusionCode); + presentedForm = Collections.unmodifiableList(builder.presentedForm); } /** @@ -1318,7 +1310,37 @@ public Builder presentedForm(Collection presentedForm) { */ @Override public DiagnosticReport build() { - return new DiagnosticReport(this); + DiagnosticReport diagnosticReport = new DiagnosticReport(this); + if (validating) { + validate(diagnosticReport); + } + return diagnosticReport; + } + + protected void validate(DiagnosticReport diagnosticReport) { + super.validate(diagnosticReport); + ValidationSupport.checkList(diagnosticReport.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(diagnosticReport.basedOn, "basedOn", Reference.class); + ValidationSupport.requireNonNull(diagnosticReport.status, "status"); + ValidationSupport.checkList(diagnosticReport.category, "category", CodeableConcept.class); + ValidationSupport.requireNonNull(diagnosticReport.code, "code"); + ValidationSupport.choiceElement(diagnosticReport.effective, "effective", DateTime.class, Period.class); + ValidationSupport.checkList(diagnosticReport.performer, "performer", Reference.class); + ValidationSupport.checkList(diagnosticReport.resultsInterpreter, "resultsInterpreter", Reference.class); + ValidationSupport.checkList(diagnosticReport.specimen, "specimen", Reference.class); + ValidationSupport.checkList(diagnosticReport.result, "result", Reference.class); + ValidationSupport.checkList(diagnosticReport.imagingStudy, "imagingStudy", Reference.class); + ValidationSupport.checkList(diagnosticReport.media, "media", Media.class); + ValidationSupport.checkList(diagnosticReport.conclusionCode, "conclusionCode", CodeableConcept.class); + ValidationSupport.checkList(diagnosticReport.presentedForm, "presentedForm", Attachment.class); + ValidationSupport.checkReferenceType(diagnosticReport.basedOn, "basedOn", "CarePlan", "ImmunizationRecommendation", "MedicationRequest", "NutritionOrder", "ServiceRequest"); + ValidationSupport.checkReferenceType(diagnosticReport.subject, "subject", "Patient", "Group", "Device", "Location"); + ValidationSupport.checkReferenceType(diagnosticReport.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(diagnosticReport.performer, "performer", "Practitioner", "PractitionerRole", "Organization", "CareTeam"); + ValidationSupport.checkReferenceType(diagnosticReport.resultsInterpreter, "resultsInterpreter", "Practitioner", "PractitionerRole", "Organization", "CareTeam"); + ValidationSupport.checkReferenceType(diagnosticReport.specimen, "specimen", "Specimen"); + ValidationSupport.checkReferenceType(diagnosticReport.result, "result", "Observation"); + ValidationSupport.checkReferenceType(diagnosticReport.imagingStudy, "imagingStudy", "ImagingStudy"); } protected Builder from(DiagnosticReport diagnosticReport) { @@ -1359,9 +1381,7 @@ public static class Media extends BackboneElement { private Media(Builder builder) { super(builder); comment = builder.comment; - link = ValidationSupport.requireNonNull(builder.link, "link"); - ValidationSupport.checkReferenceType(link, "link", "Media"); - ValidationSupport.requireValueOrChildren(this); + link = builder.link; } /** @@ -1611,7 +1631,18 @@ public Builder link(Reference link) { */ @Override public Media build() { - return new Media(this); + Media media = new Media(this); + if (validating) { + validate(media); + } + return media; + } + + protected void validate(Media media) { + super.validate(media); + ValidationSupport.requireNonNull(media.link, "link"); + ValidationSupport.checkReferenceType(media.link, "link", "Media"); + ValidationSupport.requireValueOrChildren(media); } protected Builder from(Media media) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DocumentManifest.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DocumentManifest.java index c4b3777bc89..5510e5d9f99 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DocumentManifest.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DocumentManifest.java @@ -88,20 +88,17 @@ public class DocumentManifest extends DomainResource { private DocumentManifest(Builder builder) { super(builder); masterIdentifier = builder.masterIdentifier; - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; type = builder.type; subject = builder.subject; created = builder.created; - author = Collections.unmodifiableList(ValidationSupport.checkList(builder.author, "author", Reference.class)); - recipient = Collections.unmodifiableList(ValidationSupport.checkList(builder.recipient, "recipient", Reference.class)); + author = Collections.unmodifiableList(builder.author); + recipient = Collections.unmodifiableList(builder.recipient); source = builder.source; description = builder.description; - content = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.content, "content", Reference.class)); - related = Collections.unmodifiableList(ValidationSupport.checkList(builder.related, "related", Related.class)); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Practitioner", "Group", "Device"); - ValidationSupport.checkReferenceType(author, "author", "Practitioner", "PractitionerRole", "Organization", "Device", "Patient", "RelatedPerson"); - ValidationSupport.checkReferenceType(recipient, "recipient", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "Organization"); + content = Collections.unmodifiableList(builder.content); + related = Collections.unmodifiableList(builder.related); } /** @@ -907,7 +904,24 @@ public Builder related(Collection related) { */ @Override public DocumentManifest build() { - return new DocumentManifest(this); + DocumentManifest documentManifest = new DocumentManifest(this); + if (validating) { + validate(documentManifest); + } + return documentManifest; + } + + protected void validate(DocumentManifest documentManifest) { + super.validate(documentManifest); + ValidationSupport.checkList(documentManifest.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(documentManifest.status, "status"); + ValidationSupport.checkList(documentManifest.author, "author", Reference.class); + ValidationSupport.checkList(documentManifest.recipient, "recipient", Reference.class); + ValidationSupport.checkNonEmptyList(documentManifest.content, "content", Reference.class); + ValidationSupport.checkList(documentManifest.related, "related", Related.class); + ValidationSupport.checkReferenceType(documentManifest.subject, "subject", "Patient", "Practitioner", "Group", "Device"); + ValidationSupport.checkReferenceType(documentManifest.author, "author", "Practitioner", "PractitionerRole", "Organization", "Device", "Patient", "RelatedPerson"); + ValidationSupport.checkReferenceType(documentManifest.recipient, "recipient", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson", "Organization"); } protected Builder from(DocumentManifest documentManifest) { @@ -939,7 +953,6 @@ private Related(Builder builder) { super(builder); identifier = builder.identifier; ref = builder.ref; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1175,7 +1188,16 @@ public Builder ref(Reference ref) { */ @Override public Related build() { - return new Related(this); + Related related = new Related(this); + if (validating) { + validate(related); + } + return related; + } + + protected void validate(Related related) { + super.validate(related); + ValidationSupport.requireValueOrChildren(related); } protected Builder from(Related related) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DocumentReference.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DocumentReference.java index 8f3c99b4c5b..e3baf4b5bb0 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DocumentReference.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DocumentReference.java @@ -149,25 +149,21 @@ public class DocumentReference extends DomainResource { private DocumentReference(Builder builder) { super(builder); masterIdentifier = builder.masterIdentifier; - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; docStatus = builder.docStatus; type = builder.type; - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", CodeableConcept.class)); + category = Collections.unmodifiableList(builder.category); subject = builder.subject; date = builder.date; - author = Collections.unmodifiableList(ValidationSupport.checkList(builder.author, "author", Reference.class)); + author = Collections.unmodifiableList(builder.author); authenticator = builder.authenticator; custodian = builder.custodian; - relatesTo = Collections.unmodifiableList(ValidationSupport.checkList(builder.relatesTo, "relatesTo", RelatesTo.class)); + relatesTo = Collections.unmodifiableList(builder.relatesTo); description = builder.description; - securityLabel = Collections.unmodifiableList(ValidationSupport.checkList(builder.securityLabel, "securityLabel", CodeableConcept.class)); - content = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.content, "content", Content.class)); + securityLabel = Collections.unmodifiableList(builder.securityLabel); + content = Collections.unmodifiableList(builder.content); context = builder.context; - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Practitioner", "Group", "Device"); - ValidationSupport.checkReferenceType(author, "author", "Practitioner", "PractitionerRole", "Organization", "Device", "Patient", "RelatedPerson"); - ValidationSupport.checkReferenceType(authenticator, "authenticator", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.checkReferenceType(custodian, "custodian", "Organization"); } /** @@ -1108,7 +1104,26 @@ public Builder context(Context context) { */ @Override public DocumentReference build() { - return new DocumentReference(this); + DocumentReference documentReference = new DocumentReference(this); + if (validating) { + validate(documentReference); + } + return documentReference; + } + + protected void validate(DocumentReference documentReference) { + super.validate(documentReference); + ValidationSupport.checkList(documentReference.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(documentReference.status, "status"); + ValidationSupport.checkList(documentReference.category, "category", CodeableConcept.class); + ValidationSupport.checkList(documentReference.author, "author", Reference.class); + ValidationSupport.checkList(documentReference.relatesTo, "relatesTo", RelatesTo.class); + ValidationSupport.checkList(documentReference.securityLabel, "securityLabel", CodeableConcept.class); + ValidationSupport.checkNonEmptyList(documentReference.content, "content", Content.class); + ValidationSupport.checkReferenceType(documentReference.subject, "subject", "Patient", "Practitioner", "Group", "Device"); + ValidationSupport.checkReferenceType(documentReference.author, "author", "Practitioner", "PractitionerRole", "Organization", "Device", "Patient", "RelatedPerson"); + ValidationSupport.checkReferenceType(documentReference.authenticator, "authenticator", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.checkReferenceType(documentReference.custodian, "custodian", "Organization"); } protected Builder from(DocumentReference documentReference) { @@ -1153,10 +1168,8 @@ public static class RelatesTo extends BackboneElement { private RelatesTo(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); - target = ValidationSupport.requireNonNull(builder.target, "target"); - ValidationSupport.checkReferenceType(target, "target", "DocumentReference"); - ValidationSupport.requireValueOrChildren(this); + code = builder.code; + target = builder.target; } /** @@ -1407,7 +1420,19 @@ public Builder target(Reference target) { */ @Override public RelatesTo build() { - return new RelatesTo(this); + RelatesTo relatesTo = new RelatesTo(this); + if (validating) { + validate(relatesTo); + } + return relatesTo; + } + + protected void validate(RelatesTo relatesTo) { + super.validate(relatesTo); + ValidationSupport.requireNonNull(relatesTo.code, "code"); + ValidationSupport.requireNonNull(relatesTo.target, "target"); + ValidationSupport.checkReferenceType(relatesTo.target, "target", "DocumentReference"); + ValidationSupport.requireValueOrChildren(relatesTo); } protected Builder from(RelatesTo relatesTo) { @@ -1437,9 +1462,8 @@ public static class Content extends BackboneElement { private Content(Builder builder) { super(builder); - attachment = ValidationSupport.requireNonNull(builder.attachment, "attachment"); + attachment = builder.attachment; format = builder.format; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1684,7 +1708,17 @@ public Builder format(Coding format) { */ @Override public Content build() { - return new Content(this); + Content content = new Content(this); + if (validating) { + validate(content); + } + return content; + } + + protected void validate(Content content) { + super.validate(content); + ValidationSupport.requireNonNull(content.attachment, "attachment"); + ValidationSupport.requireValueOrChildren(content); } protected Builder from(Content content) { @@ -1731,16 +1765,13 @@ public static class Context extends BackboneElement { private Context(Builder builder) { super(builder); - encounter = Collections.unmodifiableList(ValidationSupport.checkList(builder.encounter, "encounter", Reference.class)); - event = Collections.unmodifiableList(ValidationSupport.checkList(builder.event, "event", CodeableConcept.class)); + encounter = Collections.unmodifiableList(builder.encounter); + event = Collections.unmodifiableList(builder.event); period = builder.period; facilityType = builder.facilityType; practiceSetting = builder.practiceSetting; sourcePatientInfo = builder.sourcePatientInfo; - related = Collections.unmodifiableList(ValidationSupport.checkList(builder.related, "related", Reference.class)); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter", "EpisodeOfCare"); - ValidationSupport.checkReferenceType(sourcePatientInfo, "sourcePatientInfo", "Patient"); - ValidationSupport.requireValueOrChildren(this); + related = Collections.unmodifiableList(builder.related); } /** @@ -2208,7 +2239,21 @@ public Builder related(Collection related) { */ @Override public Context build() { - return new Context(this); + Context context = new Context(this); + if (validating) { + validate(context); + } + return context; + } + + protected void validate(Context context) { + super.validate(context); + ValidationSupport.checkList(context.encounter, "encounter", Reference.class); + ValidationSupport.checkList(context.event, "event", CodeableConcept.class); + ValidationSupport.checkList(context.related, "related", Reference.class); + ValidationSupport.checkReferenceType(context.encounter, "encounter", "Encounter", "EpisodeOfCare"); + ValidationSupport.checkReferenceType(context.sourcePatientInfo, "sourcePatientInfo", "Patient"); + ValidationSupport.requireValueOrChildren(context); } protected Builder from(Context context) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DomainResource.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DomainResource.java index e79b43748a0..92168a7cf72 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/DomainResource.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/DomainResource.java @@ -77,9 +77,9 @@ public abstract class DomainResource extends Resource { protected DomainResource(Builder builder) { super(builder); text = builder.text; - contained = Collections.unmodifiableList(ValidationSupport.checkList(builder.contained, "contained", Resource.class)); - extension = Collections.unmodifiableList(ValidationSupport.checkList(builder.extension, "extension", Extension.class)); - modifierExtension = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifierExtension, "modifierExtension", Extension.class)); + contained = Collections.unmodifiableList(builder.contained); + extension = Collections.unmodifiableList(builder.extension); + modifierExtension = Collections.unmodifiableList(builder.modifierExtension); } /** @@ -364,6 +364,13 @@ public Builder modifierExtension(Collection modifierExtension) { @Override public abstract DomainResource build(); + protected void validate(DomainResource domainResource) { + super.validate(domainResource); + ValidationSupport.checkList(domainResource.contained, "contained", Resource.class); + ValidationSupport.checkList(domainResource.extension, "extension", Extension.class); + ValidationSupport.checkList(domainResource.modifierExtension, "modifierExtension", Extension.class); + } + protected Builder from(DomainResource domainResource) { super.from(domainResource); text = domainResource.text; diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/EffectEvidenceSynthesis.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/EffectEvidenceSynthesis.java index 7e6d8a98aa2..3cee9617d12 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/EffectEvidenceSynthesis.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/EffectEvidenceSynthesis.java @@ -240,42 +240,38 @@ public class EffectEvidenceSynthesis extends DomainResource { private EffectEvidenceSynthesis(Builder builder) { super(builder); url = builder.url; - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); version = builder.version; name = builder.name; title = builder.title; - status = ValidationSupport.requireNonNull(builder.status, "status"); + status = builder.status; date = builder.date; publisher = builder.publisher; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactDetail.class)); + contact = Collections.unmodifiableList(builder.contact); description = builder.description; - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - useContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.useContext, "useContext", UsageContext.class)); - jurisdiction = Collections.unmodifiableList(ValidationSupport.checkList(builder.jurisdiction, "jurisdiction", CodeableConcept.class)); + note = Collections.unmodifiableList(builder.note); + useContext = Collections.unmodifiableList(builder.useContext); + jurisdiction = Collections.unmodifiableList(builder.jurisdiction); copyright = builder.copyright; approvalDate = builder.approvalDate; lastReviewDate = builder.lastReviewDate; effectivePeriod = builder.effectivePeriod; - topic = Collections.unmodifiableList(ValidationSupport.checkList(builder.topic, "topic", CodeableConcept.class)); - author = Collections.unmodifiableList(ValidationSupport.checkList(builder.author, "author", ContactDetail.class)); - editor = Collections.unmodifiableList(ValidationSupport.checkList(builder.editor, "editor", ContactDetail.class)); - reviewer = Collections.unmodifiableList(ValidationSupport.checkList(builder.reviewer, "reviewer", ContactDetail.class)); - endorser = Collections.unmodifiableList(ValidationSupport.checkList(builder.endorser, "endorser", ContactDetail.class)); - relatedArtifact = Collections.unmodifiableList(ValidationSupport.checkList(builder.relatedArtifact, "relatedArtifact", RelatedArtifact.class)); + topic = Collections.unmodifiableList(builder.topic); + author = Collections.unmodifiableList(builder.author); + editor = Collections.unmodifiableList(builder.editor); + reviewer = Collections.unmodifiableList(builder.reviewer); + endorser = Collections.unmodifiableList(builder.endorser); + relatedArtifact = Collections.unmodifiableList(builder.relatedArtifact); synthesisType = builder.synthesisType; studyType = builder.studyType; - population = ValidationSupport.requireNonNull(builder.population, "population"); - exposure = ValidationSupport.requireNonNull(builder.exposure, "exposure"); - exposureAlternative = ValidationSupport.requireNonNull(builder.exposureAlternative, "exposureAlternative"); - outcome = ValidationSupport.requireNonNull(builder.outcome, "outcome"); + population = builder.population; + exposure = builder.exposure; + exposureAlternative = builder.exposureAlternative; + outcome = builder.outcome; sampleSize = builder.sampleSize; - resultsByExposure = Collections.unmodifiableList(ValidationSupport.checkList(builder.resultsByExposure, "resultsByExposure", ResultsByExposure.class)); - effectEstimate = Collections.unmodifiableList(ValidationSupport.checkList(builder.effectEstimate, "effectEstimate", EffectEstimate.class)); - certainty = Collections.unmodifiableList(ValidationSupport.checkList(builder.certainty, "certainty", Certainty.class)); - ValidationSupport.checkReferenceType(population, "population", "EvidenceVariable"); - ValidationSupport.checkReferenceType(exposure, "exposure", "EvidenceVariable"); - ValidationSupport.checkReferenceType(exposureAlternative, "exposureAlternative", "EvidenceVariable"); - ValidationSupport.checkReferenceType(outcome, "outcome", "EvidenceVariable"); + resultsByExposure = Collections.unmodifiableList(builder.resultsByExposure); + effectEstimate = Collections.unmodifiableList(builder.effectEstimate); + certainty = Collections.unmodifiableList(builder.certainty); } /** @@ -1877,7 +1873,38 @@ public Builder certainty(Collection certainty) { */ @Override public EffectEvidenceSynthesis build() { - return new EffectEvidenceSynthesis(this); + EffectEvidenceSynthesis effectEvidenceSynthesis = new EffectEvidenceSynthesis(this); + if (validating) { + validate(effectEvidenceSynthesis); + } + return effectEvidenceSynthesis; + } + + protected void validate(EffectEvidenceSynthesis effectEvidenceSynthesis) { + super.validate(effectEvidenceSynthesis); + ValidationSupport.checkList(effectEvidenceSynthesis.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(effectEvidenceSynthesis.status, "status"); + ValidationSupport.checkList(effectEvidenceSynthesis.contact, "contact", ContactDetail.class); + ValidationSupport.checkList(effectEvidenceSynthesis.note, "note", Annotation.class); + ValidationSupport.checkList(effectEvidenceSynthesis.useContext, "useContext", UsageContext.class); + ValidationSupport.checkList(effectEvidenceSynthesis.jurisdiction, "jurisdiction", CodeableConcept.class); + ValidationSupport.checkList(effectEvidenceSynthesis.topic, "topic", CodeableConcept.class); + ValidationSupport.checkList(effectEvidenceSynthesis.author, "author", ContactDetail.class); + ValidationSupport.checkList(effectEvidenceSynthesis.editor, "editor", ContactDetail.class); + ValidationSupport.checkList(effectEvidenceSynthesis.reviewer, "reviewer", ContactDetail.class); + ValidationSupport.checkList(effectEvidenceSynthesis.endorser, "endorser", ContactDetail.class); + ValidationSupport.checkList(effectEvidenceSynthesis.relatedArtifact, "relatedArtifact", RelatedArtifact.class); + ValidationSupport.requireNonNull(effectEvidenceSynthesis.population, "population"); + ValidationSupport.requireNonNull(effectEvidenceSynthesis.exposure, "exposure"); + ValidationSupport.requireNonNull(effectEvidenceSynthesis.exposureAlternative, "exposureAlternative"); + ValidationSupport.requireNonNull(effectEvidenceSynthesis.outcome, "outcome"); + ValidationSupport.checkList(effectEvidenceSynthesis.resultsByExposure, "resultsByExposure", ResultsByExposure.class); + ValidationSupport.checkList(effectEvidenceSynthesis.effectEstimate, "effectEstimate", EffectEstimate.class); + ValidationSupport.checkList(effectEvidenceSynthesis.certainty, "certainty", Certainty.class); + ValidationSupport.checkReferenceType(effectEvidenceSynthesis.population, "population", "EvidenceVariable"); + ValidationSupport.checkReferenceType(effectEvidenceSynthesis.exposure, "exposure", "EvidenceVariable"); + ValidationSupport.checkReferenceType(effectEvidenceSynthesis.exposureAlternative, "exposureAlternative", "EvidenceVariable"); + ValidationSupport.checkReferenceType(effectEvidenceSynthesis.outcome, "outcome", "EvidenceVariable"); } protected Builder from(EffectEvidenceSynthesis effectEvidenceSynthesis) { @@ -1932,7 +1959,6 @@ private SampleSize(Builder builder) { description = builder.description; numberOfStudies = builder.numberOfStudies; numberOfParticipants = builder.numberOfParticipants; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2197,7 +2223,16 @@ public Builder numberOfParticipants(Integer numberOfParticipants) { */ @Override public SampleSize build() { - return new SampleSize(this); + SampleSize sampleSize = new SampleSize(this); + if (validating) { + validate(sampleSize); + } + return sampleSize; + } + + protected void validate(SampleSize sampleSize) { + super.validate(sampleSize); + ValidationSupport.requireValueOrChildren(sampleSize); } protected Builder from(SampleSize sampleSize) { @@ -2238,9 +2273,7 @@ private ResultsByExposure(Builder builder) { description = builder.description; exposureState = builder.exposureState; variantState = builder.variantState; - riskEvidenceSynthesis = ValidationSupport.requireNonNull(builder.riskEvidenceSynthesis, "riskEvidenceSynthesis"); - ValidationSupport.checkReferenceType(riskEvidenceSynthesis, "riskEvidenceSynthesis", "RiskEvidenceSynthesis"); - ValidationSupport.requireValueOrChildren(this); + riskEvidenceSynthesis = builder.riskEvidenceSynthesis; } /** @@ -2546,7 +2579,18 @@ public Builder riskEvidenceSynthesis(Reference riskEvidenceSynthesis) { */ @Override public ResultsByExposure build() { - return new ResultsByExposure(this); + ResultsByExposure resultsByExposure = new ResultsByExposure(this); + if (validating) { + validate(resultsByExposure); + } + return resultsByExposure; + } + + protected void validate(ResultsByExposure resultsByExposure) { + super.validate(resultsByExposure); + ValidationSupport.requireNonNull(resultsByExposure.riskEvidenceSynthesis, "riskEvidenceSynthesis"); + ValidationSupport.checkReferenceType(resultsByExposure.riskEvidenceSynthesis, "riskEvidenceSynthesis", "RiskEvidenceSynthesis"); + ValidationSupport.requireValueOrChildren(resultsByExposure); } protected Builder from(ResultsByExposure resultsByExposure) { @@ -2596,9 +2640,7 @@ private EffectEstimate(Builder builder) { variantState = builder.variantState; value = builder.value; unitOfMeasure = builder.unitOfMeasure; - precisionEstimate = Collections.unmodifiableList(ValidationSupport.checkList(builder.precisionEstimate, "precisionEstimate", PrecisionEstimate.class)); - ValidationSupport.checkValueSetBinding(unitOfMeasure, "unitOfMeasure", "http://hl7.org/fhir/ValueSet/ucum-units", "http://unitsofmeasure.org"); - ValidationSupport.requireValueOrChildren(this); + precisionEstimate = Collections.unmodifiableList(builder.precisionEstimate); } /** @@ -2970,7 +3012,18 @@ public Builder precisionEstimate(Collection precisionEstimate */ @Override public EffectEstimate build() { - return new EffectEstimate(this); + EffectEstimate effectEstimate = new EffectEstimate(this); + if (validating) { + validate(effectEstimate); + } + return effectEstimate; + } + + protected void validate(EffectEstimate effectEstimate) { + super.validate(effectEstimate); + ValidationSupport.checkList(effectEstimate.precisionEstimate, "precisionEstimate", PrecisionEstimate.class); + ValidationSupport.checkValueSetBinding(effectEstimate.unitOfMeasure, "unitOfMeasure", "http://hl7.org/fhir/ValueSet/ucum-units", "http://unitsofmeasure.org"); + ValidationSupport.requireValueOrChildren(effectEstimate); } protected Builder from(EffectEstimate effectEstimate) { @@ -3006,7 +3059,6 @@ private PrecisionEstimate(Builder builder) { level = builder.level; from = builder.from; to = builder.to; - ValidationSupport.requireValueOrChildren(this); } /** @@ -3300,7 +3352,16 @@ public Builder to(Decimal to) { */ @Override public PrecisionEstimate build() { - return new PrecisionEstimate(this); + PrecisionEstimate precisionEstimate = new PrecisionEstimate(this); + if (validating) { + validate(precisionEstimate); + } + return precisionEstimate; + } + + protected void validate(PrecisionEstimate precisionEstimate) { + super.validate(precisionEstimate); + ValidationSupport.requireValueOrChildren(precisionEstimate); } protected Builder from(PrecisionEstimate precisionEstimate) { @@ -3331,10 +3392,9 @@ public static class Certainty extends BackboneElement { private Certainty(Builder builder) { super(builder); - rating = Collections.unmodifiableList(ValidationSupport.checkList(builder.rating, "rating", CodeableConcept.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - certaintySubcomponent = Collections.unmodifiableList(ValidationSupport.checkList(builder.certaintySubcomponent, "certaintySubcomponent", CertaintySubcomponent.class)); - ValidationSupport.requireValueOrChildren(this); + rating = Collections.unmodifiableList(builder.rating); + note = Collections.unmodifiableList(builder.note); + certaintySubcomponent = Collections.unmodifiableList(builder.certaintySubcomponent); } /** @@ -3659,7 +3719,19 @@ public Builder certaintySubcomponent(Collection certainty */ @Override public Certainty build() { - return new Certainty(this); + Certainty certainty = new Certainty(this); + if (validating) { + validate(certainty); + } + return certainty; + } + + protected void validate(Certainty certainty) { + super.validate(certainty); + ValidationSupport.checkList(certainty.rating, "rating", CodeableConcept.class); + ValidationSupport.checkList(certainty.note, "note", Annotation.class); + ValidationSupport.checkList(certainty.certaintySubcomponent, "certaintySubcomponent", CertaintySubcomponent.class); + ValidationSupport.requireValueOrChildren(certainty); } protected Builder from(Certainty certainty) { @@ -3694,9 +3766,8 @@ public static class CertaintySubcomponent extends BackboneElement { private CertaintySubcomponent(Builder builder) { super(builder); type = builder.type; - rating = Collections.unmodifiableList(ValidationSupport.checkList(builder.rating, "rating", CodeableConcept.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - ValidationSupport.requireValueOrChildren(this); + rating = Collections.unmodifiableList(builder.rating); + note = Collections.unmodifiableList(builder.note); } /** @@ -4001,7 +4072,18 @@ public Builder note(Collection note) { */ @Override public CertaintySubcomponent build() { - return new CertaintySubcomponent(this); + CertaintySubcomponent certaintySubcomponent = new CertaintySubcomponent(this); + if (validating) { + validate(certaintySubcomponent); + } + return certaintySubcomponent; + } + + protected void validate(CertaintySubcomponent certaintySubcomponent) { + super.validate(certaintySubcomponent); + ValidationSupport.checkList(certaintySubcomponent.rating, "rating", CodeableConcept.class); + ValidationSupport.checkList(certaintySubcomponent.note, "note", Annotation.class); + ValidationSupport.requireValueOrChildren(certaintySubcomponent); } protected Builder from(CertaintySubcomponent certaintySubcomponent) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Encounter.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Encounter.java index 3d471bf8feb..763bc37577a 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Encounter.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Encounter.java @@ -200,37 +200,29 @@ public class Encounter extends DomainResource { private Encounter(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - statusHistory = Collections.unmodifiableList(ValidationSupport.checkList(builder.statusHistory, "statusHistory", StatusHistory.class)); - clazz = ValidationSupport.requireNonNull(builder.clazz, "class"); - classHistory = Collections.unmodifiableList(ValidationSupport.checkList(builder.classHistory, "classHistory", ClassHistory.class)); - type = Collections.unmodifiableList(ValidationSupport.checkList(builder.type, "type", CodeableConcept.class)); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; + statusHistory = Collections.unmodifiableList(builder.statusHistory); + clazz = builder.clazz; + classHistory = Collections.unmodifiableList(builder.classHistory); + type = Collections.unmodifiableList(builder.type); serviceType = builder.serviceType; priority = builder.priority; subject = builder.subject; - episodeOfCare = Collections.unmodifiableList(ValidationSupport.checkList(builder.episodeOfCare, "episodeOfCare", Reference.class)); - basedOn = Collections.unmodifiableList(ValidationSupport.checkList(builder.basedOn, "basedOn", Reference.class)); - participant = Collections.unmodifiableList(ValidationSupport.checkList(builder.participant, "participant", Participant.class)); - appointment = Collections.unmodifiableList(ValidationSupport.checkList(builder.appointment, "appointment", Reference.class)); + episodeOfCare = Collections.unmodifiableList(builder.episodeOfCare); + basedOn = Collections.unmodifiableList(builder.basedOn); + participant = Collections.unmodifiableList(builder.participant); + appointment = Collections.unmodifiableList(builder.appointment); period = builder.period; length = builder.length; - reasonCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonCode, "reasonCode", CodeableConcept.class)); - reasonReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonReference, "reasonReference", Reference.class)); - diagnosis = Collections.unmodifiableList(ValidationSupport.checkList(builder.diagnosis, "diagnosis", Diagnosis.class)); - account = Collections.unmodifiableList(ValidationSupport.checkList(builder.account, "account", Reference.class)); + reasonCode = Collections.unmodifiableList(builder.reasonCode); + reasonReference = Collections.unmodifiableList(builder.reasonReference); + diagnosis = Collections.unmodifiableList(builder.diagnosis); + account = Collections.unmodifiableList(builder.account); hospitalization = builder.hospitalization; - location = Collections.unmodifiableList(ValidationSupport.checkList(builder.location, "location", Location.class)); + location = Collections.unmodifiableList(builder.location); serviceProvider = builder.serviceProvider; partOf = builder.partOf; - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group"); - ValidationSupport.checkReferenceType(episodeOfCare, "episodeOfCare", "EpisodeOfCare"); - ValidationSupport.checkReferenceType(basedOn, "basedOn", "ServiceRequest"); - ValidationSupport.checkReferenceType(appointment, "appointment", "Appointment"); - ValidationSupport.checkReferenceType(reasonReference, "reasonReference", "Condition", "Procedure", "Observation", "ImmunizationRecommendation"); - ValidationSupport.checkReferenceType(account, "account", "Account"); - ValidationSupport.checkReferenceType(serviceProvider, "serviceProvider", "Organization"); - ValidationSupport.checkReferenceType(partOf, "partOf", "Encounter"); } /** @@ -1568,7 +1560,38 @@ public Builder partOf(Reference partOf) { */ @Override public Encounter build() { - return new Encounter(this); + Encounter encounter = new Encounter(this); + if (validating) { + validate(encounter); + } + return encounter; + } + + protected void validate(Encounter encounter) { + super.validate(encounter); + ValidationSupport.checkList(encounter.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(encounter.status, "status"); + ValidationSupport.checkList(encounter.statusHistory, "statusHistory", StatusHistory.class); + ValidationSupport.requireNonNull(encounter.clazz, "class"); + ValidationSupport.checkList(encounter.classHistory, "classHistory", ClassHistory.class); + ValidationSupport.checkList(encounter.type, "type", CodeableConcept.class); + ValidationSupport.checkList(encounter.episodeOfCare, "episodeOfCare", Reference.class); + ValidationSupport.checkList(encounter.basedOn, "basedOn", Reference.class); + ValidationSupport.checkList(encounter.participant, "participant", Participant.class); + ValidationSupport.checkList(encounter.appointment, "appointment", Reference.class); + ValidationSupport.checkList(encounter.reasonCode, "reasonCode", CodeableConcept.class); + ValidationSupport.checkList(encounter.reasonReference, "reasonReference", Reference.class); + ValidationSupport.checkList(encounter.diagnosis, "diagnosis", Diagnosis.class); + ValidationSupport.checkList(encounter.account, "account", Reference.class); + ValidationSupport.checkList(encounter.location, "location", Location.class); + ValidationSupport.checkReferenceType(encounter.subject, "subject", "Patient", "Group"); + ValidationSupport.checkReferenceType(encounter.episodeOfCare, "episodeOfCare", "EpisodeOfCare"); + ValidationSupport.checkReferenceType(encounter.basedOn, "basedOn", "ServiceRequest"); + ValidationSupport.checkReferenceType(encounter.appointment, "appointment", "Appointment"); + ValidationSupport.checkReferenceType(encounter.reasonReference, "reasonReference", "Condition", "Procedure", "Observation", "ImmunizationRecommendation"); + ValidationSupport.checkReferenceType(encounter.account, "account", "Account"); + ValidationSupport.checkReferenceType(encounter.serviceProvider, "serviceProvider", "Organization"); + ValidationSupport.checkReferenceType(encounter.partOf, "partOf", "Encounter"); } protected Builder from(Encounter encounter) { @@ -1618,9 +1641,8 @@ public static class StatusHistory extends BackboneElement { private StatusHistory(Builder builder) { super(builder); - status = ValidationSupport.requireNonNull(builder.status, "status"); - period = ValidationSupport.requireNonNull(builder.period, "period"); - ValidationSupport.requireValueOrChildren(this); + status = builder.status; + period = builder.period; } /** @@ -1866,7 +1888,18 @@ public Builder period(Period period) { */ @Override public StatusHistory build() { - return new StatusHistory(this); + StatusHistory statusHistory = new StatusHistory(this); + if (validating) { + validate(statusHistory); + } + return statusHistory; + } + + protected void validate(StatusHistory statusHistory) { + super.validate(statusHistory); + ValidationSupport.requireNonNull(statusHistory.status, "status"); + ValidationSupport.requireNonNull(statusHistory.period, "period"); + ValidationSupport.requireValueOrChildren(statusHistory); } protected Builder from(StatusHistory statusHistory) { @@ -1899,9 +1932,8 @@ public static class ClassHistory extends BackboneElement { private ClassHistory(Builder builder) { super(builder); - clazz = ValidationSupport.requireNonNull(builder.clazz, "class"); - period = ValidationSupport.requireNonNull(builder.period, "period"); - ValidationSupport.requireValueOrChildren(this); + clazz = builder.clazz; + period = builder.period; } /** @@ -2147,7 +2179,18 @@ public Builder period(Period period) { */ @Override public ClassHistory build() { - return new ClassHistory(this); + ClassHistory classHistory = new ClassHistory(this); + if (validating) { + validate(classHistory); + } + return classHistory; + } + + protected void validate(ClassHistory classHistory) { + super.validate(classHistory); + ValidationSupport.requireNonNull(classHistory.clazz, "class"); + ValidationSupport.requireNonNull(classHistory.period, "period"); + ValidationSupport.requireValueOrChildren(classHistory); } protected Builder from(ClassHistory classHistory) { @@ -2178,11 +2221,9 @@ public static class Participant extends BackboneElement { private Participant(Builder builder) { super(builder); - type = Collections.unmodifiableList(ValidationSupport.checkList(builder.type, "type", CodeableConcept.class)); + type = Collections.unmodifiableList(builder.type); period = builder.period; individual = builder.individual; - ValidationSupport.checkReferenceType(individual, "individual", "Practitioner", "PractitionerRole", "RelatedPerson"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -2476,7 +2517,18 @@ public Builder individual(Reference individual) { */ @Override public Participant build() { - return new Participant(this); + Participant participant = new Participant(this); + if (validating) { + validate(participant); + } + return participant; + } + + protected void validate(Participant participant) { + super.validate(participant); + ValidationSupport.checkList(participant.type, "type", CodeableConcept.class); + ValidationSupport.checkReferenceType(participant.individual, "individual", "Practitioner", "PractitionerRole", "RelatedPerson"); + ValidationSupport.requireValueOrChildren(participant); } protected Builder from(Participant participant) { @@ -2508,11 +2560,9 @@ public static class Diagnosis extends BackboneElement { private Diagnosis(Builder builder) { super(builder); - condition = ValidationSupport.requireNonNull(builder.condition, "condition"); + condition = builder.condition; use = builder.use; rank = builder.rank; - ValidationSupport.checkReferenceType(condition, "condition", "Condition", "Procedure"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -2794,7 +2844,18 @@ public Builder rank(PositiveInt rank) { */ @Override public Diagnosis build() { - return new Diagnosis(this); + Diagnosis diagnosis = new Diagnosis(this); + if (validating) { + validate(diagnosis); + } + return diagnosis; + } + + protected void validate(Diagnosis diagnosis) { + super.validate(diagnosis); + ValidationSupport.requireNonNull(diagnosis.condition, "condition"); + ValidationSupport.checkReferenceType(diagnosis.condition, "condition", "Condition", "Procedure"); + ValidationSupport.requireValueOrChildren(diagnosis); } protected Builder from(Diagnosis diagnosis) { @@ -2865,14 +2926,11 @@ private Hospitalization(Builder builder) { origin = builder.origin; admitSource = builder.admitSource; reAdmission = builder.reAdmission; - dietPreference = Collections.unmodifiableList(ValidationSupport.checkList(builder.dietPreference, "dietPreference", CodeableConcept.class)); - specialCourtesy = Collections.unmodifiableList(ValidationSupport.checkList(builder.specialCourtesy, "specialCourtesy", CodeableConcept.class)); - specialArrangement = Collections.unmodifiableList(ValidationSupport.checkList(builder.specialArrangement, "specialArrangement", CodeableConcept.class)); + dietPreference = Collections.unmodifiableList(builder.dietPreference); + specialCourtesy = Collections.unmodifiableList(builder.specialCourtesy); + specialArrangement = Collections.unmodifiableList(builder.specialArrangement); destination = builder.destination; dischargeDisposition = builder.dischargeDisposition; - ValidationSupport.checkReferenceType(origin, "origin", "Location", "Organization"); - ValidationSupport.checkReferenceType(destination, "destination", "Location", "Organization"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -3387,7 +3445,21 @@ public Builder dischargeDisposition(CodeableConcept dischargeDisposition) { */ @Override public Hospitalization build() { - return new Hospitalization(this); + Hospitalization hospitalization = new Hospitalization(this); + if (validating) { + validate(hospitalization); + } + return hospitalization; + } + + protected void validate(Hospitalization hospitalization) { + super.validate(hospitalization); + ValidationSupport.checkList(hospitalization.dietPreference, "dietPreference", CodeableConcept.class); + ValidationSupport.checkList(hospitalization.specialCourtesy, "specialCourtesy", CodeableConcept.class); + ValidationSupport.checkList(hospitalization.specialArrangement, "specialArrangement", CodeableConcept.class); + ValidationSupport.checkReferenceType(hospitalization.origin, "origin", "Location", "Organization"); + ValidationSupport.checkReferenceType(hospitalization.destination, "destination", "Location", "Organization"); + ValidationSupport.requireValueOrChildren(hospitalization); } protected Builder from(Hospitalization hospitalization) { @@ -3431,12 +3503,10 @@ public static class Location extends BackboneElement { private Location(Builder builder) { super(builder); - location = ValidationSupport.requireNonNull(builder.location, "location"); + location = builder.location; status = builder.status; physicalType = builder.physicalType; period = builder.period; - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -3746,7 +3816,18 @@ public Builder period(Period period) { */ @Override public Location build() { - return new Location(this); + Location location = new Location(this); + if (validating) { + validate(location); + } + return location; + } + + protected void validate(Location location) { + super.validate(location); + ValidationSupport.requireNonNull(location.location, "location"); + ValidationSupport.checkReferenceType(location.location, "location", "Location"); + ValidationSupport.requireValueOrChildren(location); } protected Builder from(Location location) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Endpoint.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Endpoint.java index a0136b3eb26..bfca402e1d6 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Endpoint.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Endpoint.java @@ -109,18 +109,17 @@ public class Endpoint extends DomainResource { private Endpoint(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - connectionType = ValidationSupport.requireNonNull(builder.connectionType, "connectionType"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; + connectionType = builder.connectionType; name = builder.name; managingOrganization = builder.managingOrganization; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactPoint.class)); + contact = Collections.unmodifiableList(builder.contact); period = builder.period; - payloadType = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.payloadType, "payloadType", CodeableConcept.class)); - payloadMimeType = Collections.unmodifiableList(ValidationSupport.checkList(builder.payloadMimeType, "payloadMimeType", Code.class)); - address = ValidationSupport.requireNonNull(builder.address, "address"); - header = Collections.unmodifiableList(ValidationSupport.checkList(builder.header, "header", String.class)); - ValidationSupport.checkReferenceType(managingOrganization, "managingOrganization", "Organization"); + payloadType = Collections.unmodifiableList(builder.payloadType); + payloadMimeType = Collections.unmodifiableList(builder.payloadMimeType); + address = builder.address; + header = Collections.unmodifiableList(builder.header); } /** @@ -862,7 +861,24 @@ public Builder header(Collection header) { */ @Override public Endpoint build() { - return new Endpoint(this); + Endpoint endpoint = new Endpoint(this); + if (validating) { + validate(endpoint); + } + return endpoint; + } + + protected void validate(Endpoint endpoint) { + super.validate(endpoint); + ValidationSupport.checkList(endpoint.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(endpoint.status, "status"); + ValidationSupport.requireNonNull(endpoint.connectionType, "connectionType"); + ValidationSupport.checkList(endpoint.contact, "contact", ContactPoint.class); + ValidationSupport.checkNonEmptyList(endpoint.payloadType, "payloadType", CodeableConcept.class); + ValidationSupport.checkList(endpoint.payloadMimeType, "payloadMimeType", Code.class); + ValidationSupport.requireNonNull(endpoint.address, "address"); + ValidationSupport.checkList(endpoint.header, "header", String.class); + ValidationSupport.checkReferenceType(endpoint.managingOrganization, "managingOrganization", "Organization"); } protected Builder from(Endpoint endpoint) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/EnrollmentRequest.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/EnrollmentRequest.java index cffb67909e2..e9396ef35ca 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/EnrollmentRequest.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/EnrollmentRequest.java @@ -64,17 +64,13 @@ public class EnrollmentRequest extends DomainResource { private EnrollmentRequest(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); status = builder.status; created = builder.created; insurer = builder.insurer; provider = builder.provider; candidate = builder.candidate; coverage = builder.coverage; - ValidationSupport.checkReferenceType(insurer, "insurer", "Organization"); - ValidationSupport.checkReferenceType(provider, "provider", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.checkReferenceType(candidate, "candidate", "Patient"); - ValidationSupport.checkReferenceType(coverage, "coverage", "Coverage"); } /** @@ -607,7 +603,20 @@ public Builder coverage(Reference coverage) { */ @Override public EnrollmentRequest build() { - return new EnrollmentRequest(this); + EnrollmentRequest enrollmentRequest = new EnrollmentRequest(this); + if (validating) { + validate(enrollmentRequest); + } + return enrollmentRequest; + } + + protected void validate(EnrollmentRequest enrollmentRequest) { + super.validate(enrollmentRequest); + ValidationSupport.checkList(enrollmentRequest.identifier, "identifier", Identifier.class); + ValidationSupport.checkReferenceType(enrollmentRequest.insurer, "insurer", "Organization"); + ValidationSupport.checkReferenceType(enrollmentRequest.provider, "provider", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.checkReferenceType(enrollmentRequest.candidate, "candidate", "Patient"); + ValidationSupport.checkReferenceType(enrollmentRequest.coverage, "coverage", "Coverage"); } protected Builder from(EnrollmentRequest enrollmentRequest) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/EnrollmentResponse.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/EnrollmentResponse.java index 86bc768f759..d972e4e59c7 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/EnrollmentResponse.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/EnrollmentResponse.java @@ -72,7 +72,7 @@ public class EnrollmentResponse extends DomainResource { private EnrollmentResponse(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); status = builder.status; request = builder.request; outcome = builder.outcome; @@ -80,9 +80,6 @@ private EnrollmentResponse(Builder builder) { created = builder.created; organization = builder.organization; requestProvider = builder.requestProvider; - ValidationSupport.checkReferenceType(request, "request", "EnrollmentRequest"); - ValidationSupport.checkReferenceType(organization, "organization", "Organization"); - ValidationSupport.checkReferenceType(requestProvider, "requestProvider", "Practitioner", "PractitionerRole", "Organization"); } /** @@ -639,7 +636,19 @@ public Builder requestProvider(Reference requestProvider) { */ @Override public EnrollmentResponse build() { - return new EnrollmentResponse(this); + EnrollmentResponse enrollmentResponse = new EnrollmentResponse(this); + if (validating) { + validate(enrollmentResponse); + } + return enrollmentResponse; + } + + protected void validate(EnrollmentResponse enrollmentResponse) { + super.validate(enrollmentResponse); + ValidationSupport.checkList(enrollmentResponse.identifier, "identifier", Identifier.class); + ValidationSupport.checkReferenceType(enrollmentResponse.request, "request", "EnrollmentRequest"); + ValidationSupport.checkReferenceType(enrollmentResponse.organization, "organization", "Organization"); + ValidationSupport.checkReferenceType(enrollmentResponse.requestProvider, "requestProvider", "Practitioner", "PractitionerRole", "Organization"); } protected Builder from(EnrollmentResponse enrollmentResponse) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/EpisodeOfCare.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/EpisodeOfCare.java index 87b21a68eb2..6db70b2dd8d 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/EpisodeOfCare.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/EpisodeOfCare.java @@ -98,24 +98,18 @@ public class EpisodeOfCare extends DomainResource { private EpisodeOfCare(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - statusHistory = Collections.unmodifiableList(ValidationSupport.checkList(builder.statusHistory, "statusHistory", StatusHistory.class)); - type = Collections.unmodifiableList(ValidationSupport.checkList(builder.type, "type", CodeableConcept.class)); - diagnosis = Collections.unmodifiableList(ValidationSupport.checkList(builder.diagnosis, "diagnosis", Diagnosis.class)); - patient = ValidationSupport.requireNonNull(builder.patient, "patient"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; + statusHistory = Collections.unmodifiableList(builder.statusHistory); + type = Collections.unmodifiableList(builder.type); + diagnosis = Collections.unmodifiableList(builder.diagnosis); + patient = builder.patient; managingOrganization = builder.managingOrganization; period = builder.period; - referralRequest = Collections.unmodifiableList(ValidationSupport.checkList(builder.referralRequest, "referralRequest", Reference.class)); + referralRequest = Collections.unmodifiableList(builder.referralRequest); careManager = builder.careManager; - team = Collections.unmodifiableList(ValidationSupport.checkList(builder.team, "team", Reference.class)); - account = Collections.unmodifiableList(ValidationSupport.checkList(builder.account, "account", Reference.class)); - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(managingOrganization, "managingOrganization", "Organization"); - ValidationSupport.checkReferenceType(referralRequest, "referralRequest", "ServiceRequest"); - ValidationSupport.checkReferenceType(careManager, "careManager", "Practitioner", "PractitionerRole"); - ValidationSupport.checkReferenceType(team, "team", "CareTeam"); - ValidationSupport.checkReferenceType(account, "account", "Account"); + team = Collections.unmodifiableList(builder.team); + account = Collections.unmodifiableList(builder.account); } /** @@ -953,7 +947,30 @@ public Builder account(Collection account) { */ @Override public EpisodeOfCare build() { - return new EpisodeOfCare(this); + EpisodeOfCare episodeOfCare = new EpisodeOfCare(this); + if (validating) { + validate(episodeOfCare); + } + return episodeOfCare; + } + + protected void validate(EpisodeOfCare episodeOfCare) { + super.validate(episodeOfCare); + ValidationSupport.checkList(episodeOfCare.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(episodeOfCare.status, "status"); + ValidationSupport.checkList(episodeOfCare.statusHistory, "statusHistory", StatusHistory.class); + ValidationSupport.checkList(episodeOfCare.type, "type", CodeableConcept.class); + ValidationSupport.checkList(episodeOfCare.diagnosis, "diagnosis", Diagnosis.class); + ValidationSupport.requireNonNull(episodeOfCare.patient, "patient"); + ValidationSupport.checkList(episodeOfCare.referralRequest, "referralRequest", Reference.class); + ValidationSupport.checkList(episodeOfCare.team, "team", Reference.class); + ValidationSupport.checkList(episodeOfCare.account, "account", Reference.class); + ValidationSupport.checkReferenceType(episodeOfCare.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(episodeOfCare.managingOrganization, "managingOrganization", "Organization"); + ValidationSupport.checkReferenceType(episodeOfCare.referralRequest, "referralRequest", "ServiceRequest"); + ValidationSupport.checkReferenceType(episodeOfCare.careManager, "careManager", "Practitioner", "PractitionerRole"); + ValidationSupport.checkReferenceType(episodeOfCare.team, "team", "CareTeam"); + ValidationSupport.checkReferenceType(episodeOfCare.account, "account", "Account"); } protected Builder from(EpisodeOfCare episodeOfCare) { @@ -992,9 +1009,8 @@ public static class StatusHistory extends BackboneElement { private StatusHistory(Builder builder) { super(builder); - status = ValidationSupport.requireNonNull(builder.status, "status"); - period = ValidationSupport.requireNonNull(builder.period, "period"); - ValidationSupport.requireValueOrChildren(this); + status = builder.status; + period = builder.period; } /** @@ -1240,7 +1256,18 @@ public Builder period(Period period) { */ @Override public StatusHistory build() { - return new StatusHistory(this); + StatusHistory statusHistory = new StatusHistory(this); + if (validating) { + validate(statusHistory); + } + return statusHistory; + } + + protected void validate(StatusHistory statusHistory) { + super.validate(statusHistory); + ValidationSupport.requireNonNull(statusHistory.status, "status"); + ValidationSupport.requireNonNull(statusHistory.period, "period"); + ValidationSupport.requireValueOrChildren(statusHistory); } protected Builder from(StatusHistory statusHistory) { @@ -1273,11 +1300,9 @@ public static class Diagnosis extends BackboneElement { private Diagnosis(Builder builder) { super(builder); - condition = ValidationSupport.requireNonNull(builder.condition, "condition"); + condition = builder.condition; role = builder.role; rank = builder.rank; - ValidationSupport.checkReferenceType(condition, "condition", "Condition"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1554,7 +1579,18 @@ public Builder rank(PositiveInt rank) { */ @Override public Diagnosis build() { - return new Diagnosis(this); + Diagnosis diagnosis = new Diagnosis(this); + if (validating) { + validate(diagnosis); + } + return diagnosis; + } + + protected void validate(Diagnosis diagnosis) { + super.validate(diagnosis); + ValidationSupport.requireNonNull(diagnosis.condition, "condition"); + ValidationSupport.checkReferenceType(diagnosis.condition, "condition", "Condition"); + ValidationSupport.requireValueOrChildren(diagnosis); } protected Builder from(Diagnosis diagnosis) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/EventDefinition.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/EventDefinition.java index 3553d34f925..02c54278575 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/EventDefinition.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/EventDefinition.java @@ -156,34 +156,33 @@ public class EventDefinition extends DomainResource { private EventDefinition(Builder builder) { super(builder); url = builder.url; - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); version = builder.version; name = builder.name; title = builder.title; subtitle = builder.subtitle; - status = ValidationSupport.requireNonNull(builder.status, "status"); + status = builder.status; experimental = builder.experimental; - subject = ValidationSupport.choiceElement(builder.subject, "subject", CodeableConcept.class, Reference.class); + subject = builder.subject; date = builder.date; publisher = builder.publisher; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactDetail.class)); + contact = Collections.unmodifiableList(builder.contact); description = builder.description; - useContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.useContext, "useContext", UsageContext.class)); - jurisdiction = Collections.unmodifiableList(ValidationSupport.checkList(builder.jurisdiction, "jurisdiction", CodeableConcept.class)); + useContext = Collections.unmodifiableList(builder.useContext); + jurisdiction = Collections.unmodifiableList(builder.jurisdiction); purpose = builder.purpose; usage = builder.usage; copyright = builder.copyright; approvalDate = builder.approvalDate; lastReviewDate = builder.lastReviewDate; effectivePeriod = builder.effectivePeriod; - topic = Collections.unmodifiableList(ValidationSupport.checkList(builder.topic, "topic", CodeableConcept.class)); - author = Collections.unmodifiableList(ValidationSupport.checkList(builder.author, "author", ContactDetail.class)); - editor = Collections.unmodifiableList(ValidationSupport.checkList(builder.editor, "editor", ContactDetail.class)); - reviewer = Collections.unmodifiableList(ValidationSupport.checkList(builder.reviewer, "reviewer", ContactDetail.class)); - endorser = Collections.unmodifiableList(ValidationSupport.checkList(builder.endorser, "endorser", ContactDetail.class)); - relatedArtifact = Collections.unmodifiableList(ValidationSupport.checkList(builder.relatedArtifact, "relatedArtifact", RelatedArtifact.class)); - trigger = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.trigger, "trigger", TriggerDefinition.class)); - ValidationSupport.checkReferenceType(subject, "subject", "Group"); + topic = Collections.unmodifiableList(builder.topic); + author = Collections.unmodifiableList(builder.author); + editor = Collections.unmodifiableList(builder.editor); + reviewer = Collections.unmodifiableList(builder.reviewer); + endorser = Collections.unmodifiableList(builder.endorser); + relatedArtifact = Collections.unmodifiableList(builder.relatedArtifact); + trigger = Collections.unmodifiableList(builder.trigger); } /** @@ -1567,7 +1566,29 @@ public Builder trigger(Collection trigger) { */ @Override public EventDefinition build() { - return new EventDefinition(this); + EventDefinition eventDefinition = new EventDefinition(this); + if (validating) { + validate(eventDefinition); + } + return eventDefinition; + } + + protected void validate(EventDefinition eventDefinition) { + super.validate(eventDefinition); + ValidationSupport.checkList(eventDefinition.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(eventDefinition.status, "status"); + ValidationSupport.choiceElement(eventDefinition.subject, "subject", CodeableConcept.class, Reference.class); + ValidationSupport.checkList(eventDefinition.contact, "contact", ContactDetail.class); + ValidationSupport.checkList(eventDefinition.useContext, "useContext", UsageContext.class); + ValidationSupport.checkList(eventDefinition.jurisdiction, "jurisdiction", CodeableConcept.class); + ValidationSupport.checkList(eventDefinition.topic, "topic", CodeableConcept.class); + ValidationSupport.checkList(eventDefinition.author, "author", ContactDetail.class); + ValidationSupport.checkList(eventDefinition.editor, "editor", ContactDetail.class); + ValidationSupport.checkList(eventDefinition.reviewer, "reviewer", ContactDetail.class); + ValidationSupport.checkList(eventDefinition.endorser, "endorser", ContactDetail.class); + ValidationSupport.checkList(eventDefinition.relatedArtifact, "relatedArtifact", RelatedArtifact.class); + ValidationSupport.checkNonEmptyList(eventDefinition.trigger, "trigger", TriggerDefinition.class); + ValidationSupport.checkReferenceType(eventDefinition.subject, "subject", "Group"); } protected Builder from(EventDefinition eventDefinition) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Evidence.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Evidence.java index a3e3366028d..2e75bcc85d5 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Evidence.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Evidence.java @@ -141,36 +141,33 @@ public class Evidence extends DomainResource { private Evidence(Builder builder) { super(builder); url = builder.url; - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); version = builder.version; name = builder.name; title = builder.title; shortTitle = builder.shortTitle; subtitle = builder.subtitle; - status = ValidationSupport.requireNonNull(builder.status, "status"); + status = builder.status; date = builder.date; publisher = builder.publisher; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactDetail.class)); + contact = Collections.unmodifiableList(builder.contact); description = builder.description; - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - useContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.useContext, "useContext", UsageContext.class)); - jurisdiction = Collections.unmodifiableList(ValidationSupport.checkList(builder.jurisdiction, "jurisdiction", CodeableConcept.class)); + note = Collections.unmodifiableList(builder.note); + useContext = Collections.unmodifiableList(builder.useContext); + jurisdiction = Collections.unmodifiableList(builder.jurisdiction); copyright = builder.copyright; approvalDate = builder.approvalDate; lastReviewDate = builder.lastReviewDate; effectivePeriod = builder.effectivePeriod; - topic = Collections.unmodifiableList(ValidationSupport.checkList(builder.topic, "topic", CodeableConcept.class)); - author = Collections.unmodifiableList(ValidationSupport.checkList(builder.author, "author", ContactDetail.class)); - editor = Collections.unmodifiableList(ValidationSupport.checkList(builder.editor, "editor", ContactDetail.class)); - reviewer = Collections.unmodifiableList(ValidationSupport.checkList(builder.reviewer, "reviewer", ContactDetail.class)); - endorser = Collections.unmodifiableList(ValidationSupport.checkList(builder.endorser, "endorser", ContactDetail.class)); - relatedArtifact = Collections.unmodifiableList(ValidationSupport.checkList(builder.relatedArtifact, "relatedArtifact", RelatedArtifact.class)); - exposureBackground = ValidationSupport.requireNonNull(builder.exposureBackground, "exposureBackground"); - exposureVariant = Collections.unmodifiableList(ValidationSupport.checkList(builder.exposureVariant, "exposureVariant", Reference.class)); - outcome = Collections.unmodifiableList(ValidationSupport.checkList(builder.outcome, "outcome", Reference.class)); - ValidationSupport.checkReferenceType(exposureBackground, "exposureBackground", "EvidenceVariable"); - ValidationSupport.checkReferenceType(exposureVariant, "exposureVariant", "EvidenceVariable"); - ValidationSupport.checkReferenceType(outcome, "outcome", "EvidenceVariable"); + topic = Collections.unmodifiableList(builder.topic); + author = Collections.unmodifiableList(builder.author); + editor = Collections.unmodifiableList(builder.editor); + reviewer = Collections.unmodifiableList(builder.reviewer); + endorser = Collections.unmodifiableList(builder.endorser); + relatedArtifact = Collections.unmodifiableList(builder.relatedArtifact); + exposureBackground = builder.exposureBackground; + exposureVariant = Collections.unmodifiableList(builder.exposureVariant); + outcome = Collections.unmodifiableList(builder.outcome); } /** @@ -1609,7 +1606,33 @@ public Builder outcome(Collection outcome) { */ @Override public Evidence build() { - return new Evidence(this); + Evidence evidence = new Evidence(this); + if (validating) { + validate(evidence); + } + return evidence; + } + + protected void validate(Evidence evidence) { + super.validate(evidence); + ValidationSupport.checkList(evidence.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(evidence.status, "status"); + ValidationSupport.checkList(evidence.contact, "contact", ContactDetail.class); + ValidationSupport.checkList(evidence.note, "note", Annotation.class); + ValidationSupport.checkList(evidence.useContext, "useContext", UsageContext.class); + ValidationSupport.checkList(evidence.jurisdiction, "jurisdiction", CodeableConcept.class); + ValidationSupport.checkList(evidence.topic, "topic", CodeableConcept.class); + ValidationSupport.checkList(evidence.author, "author", ContactDetail.class); + ValidationSupport.checkList(evidence.editor, "editor", ContactDetail.class); + ValidationSupport.checkList(evidence.reviewer, "reviewer", ContactDetail.class); + ValidationSupport.checkList(evidence.endorser, "endorser", ContactDetail.class); + ValidationSupport.checkList(evidence.relatedArtifact, "relatedArtifact", RelatedArtifact.class); + ValidationSupport.requireNonNull(evidence.exposureBackground, "exposureBackground"); + ValidationSupport.checkList(evidence.exposureVariant, "exposureVariant", Reference.class); + ValidationSupport.checkList(evidence.outcome, "outcome", Reference.class); + ValidationSupport.checkReferenceType(evidence.exposureBackground, "exposureBackground", "EvidenceVariable"); + ValidationSupport.checkReferenceType(evidence.exposureVariant, "exposureVariant", "EvidenceVariable"); + ValidationSupport.checkReferenceType(evidence.outcome, "outcome", "EvidenceVariable"); } protected Builder from(Evidence evidence) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/EvidenceVariable.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/EvidenceVariable.java index 26ed8acbccf..7d450af59e4 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/EvidenceVariable.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/EvidenceVariable.java @@ -154,32 +154,32 @@ public class EvidenceVariable extends DomainResource { private EvidenceVariable(Builder builder) { super(builder); url = builder.url; - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); version = builder.version; name = builder.name; title = builder.title; shortTitle = builder.shortTitle; subtitle = builder.subtitle; - status = ValidationSupport.requireNonNull(builder.status, "status"); + status = builder.status; date = builder.date; publisher = builder.publisher; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactDetail.class)); + contact = Collections.unmodifiableList(builder.contact); description = builder.description; - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - useContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.useContext, "useContext", UsageContext.class)); - jurisdiction = Collections.unmodifiableList(ValidationSupport.checkList(builder.jurisdiction, "jurisdiction", CodeableConcept.class)); + note = Collections.unmodifiableList(builder.note); + useContext = Collections.unmodifiableList(builder.useContext); + jurisdiction = Collections.unmodifiableList(builder.jurisdiction); copyright = builder.copyright; approvalDate = builder.approvalDate; lastReviewDate = builder.lastReviewDate; effectivePeriod = builder.effectivePeriod; - topic = Collections.unmodifiableList(ValidationSupport.checkList(builder.topic, "topic", CodeableConcept.class)); - author = Collections.unmodifiableList(ValidationSupport.checkList(builder.author, "author", ContactDetail.class)); - editor = Collections.unmodifiableList(ValidationSupport.checkList(builder.editor, "editor", ContactDetail.class)); - reviewer = Collections.unmodifiableList(ValidationSupport.checkList(builder.reviewer, "reviewer", ContactDetail.class)); - endorser = Collections.unmodifiableList(ValidationSupport.checkList(builder.endorser, "endorser", ContactDetail.class)); - relatedArtifact = Collections.unmodifiableList(ValidationSupport.checkList(builder.relatedArtifact, "relatedArtifact", RelatedArtifact.class)); + topic = Collections.unmodifiableList(builder.topic); + author = Collections.unmodifiableList(builder.author); + editor = Collections.unmodifiableList(builder.editor); + reviewer = Collections.unmodifiableList(builder.reviewer); + endorser = Collections.unmodifiableList(builder.endorser); + relatedArtifact = Collections.unmodifiableList(builder.relatedArtifact); type = builder.type; - characteristic = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.characteristic, "characteristic", Characteristic.class)); + characteristic = Collections.unmodifiableList(builder.characteristic); } /** @@ -1551,7 +1551,28 @@ public Builder characteristic(Collection characteristic) { */ @Override public EvidenceVariable build() { - return new EvidenceVariable(this); + EvidenceVariable evidenceVariable = new EvidenceVariable(this); + if (validating) { + validate(evidenceVariable); + } + return evidenceVariable; + } + + protected void validate(EvidenceVariable evidenceVariable) { + super.validate(evidenceVariable); + ValidationSupport.checkList(evidenceVariable.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(evidenceVariable.status, "status"); + ValidationSupport.checkList(evidenceVariable.contact, "contact", ContactDetail.class); + ValidationSupport.checkList(evidenceVariable.note, "note", Annotation.class); + ValidationSupport.checkList(evidenceVariable.useContext, "useContext", UsageContext.class); + ValidationSupport.checkList(evidenceVariable.jurisdiction, "jurisdiction", CodeableConcept.class); + ValidationSupport.checkList(evidenceVariable.topic, "topic", CodeableConcept.class); + ValidationSupport.checkList(evidenceVariable.author, "author", ContactDetail.class); + ValidationSupport.checkList(evidenceVariable.editor, "editor", ContactDetail.class); + ValidationSupport.checkList(evidenceVariable.reviewer, "reviewer", ContactDetail.class); + ValidationSupport.checkList(evidenceVariable.endorser, "endorser", ContactDetail.class); + ValidationSupport.checkList(evidenceVariable.relatedArtifact, "relatedArtifact", RelatedArtifact.class); + ValidationSupport.checkNonEmptyList(evidenceVariable.characteristic, "characteristic", Characteristic.class); } protected Builder from(EvidenceVariable evidenceVariable) { @@ -1614,14 +1635,12 @@ public static class Characteristic extends BackboneElement { private Characteristic(Builder builder) { super(builder); description = builder.description; - definition = ValidationSupport.requireChoiceElement(builder.definition, "definition", Reference.class, Canonical.class, CodeableConcept.class, Expression.class, DataRequirement.class, TriggerDefinition.class); - usageContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.usageContext, "usageContext", UsageContext.class)); + definition = builder.definition; + usageContext = Collections.unmodifiableList(builder.usageContext); exclude = builder.exclude; - participantEffective = ValidationSupport.choiceElement(builder.participantEffective, "participantEffective", DateTime.class, Period.class, Duration.class, Timing.class); + participantEffective = builder.participantEffective; timeFromStart = builder.timeFromStart; groupMeasure = builder.groupMeasure; - ValidationSupport.checkReferenceType(definition, "definition", "Group", "ActivityDefinition"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -2059,7 +2078,20 @@ public Builder groupMeasure(GroupMeasure groupMeasure) { */ @Override public Characteristic build() { - return new Characteristic(this); + Characteristic characteristic = new Characteristic(this); + if (validating) { + validate(characteristic); + } + return characteristic; + } + + protected void validate(Characteristic characteristic) { + super.validate(characteristic); + ValidationSupport.requireChoiceElement(characteristic.definition, "definition", Reference.class, Canonical.class, CodeableConcept.class, Expression.class, DataRequirement.class, TriggerDefinition.class); + ValidationSupport.checkList(characteristic.usageContext, "usageContext", UsageContext.class); + ValidationSupport.choiceElement(characteristic.participantEffective, "participantEffective", DateTime.class, Period.class, Duration.class, Timing.class); + ValidationSupport.checkReferenceType(characteristic.definition, "definition", "Group", "ActivityDefinition"); + ValidationSupport.requireValueOrChildren(characteristic); } protected Builder from(Characteristic characteristic) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ExampleScenario.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ExampleScenario.java index 0043ae328e8..d8a45fbfa39 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ExampleScenario.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ExampleScenario.java @@ -113,22 +113,22 @@ public class ExampleScenario extends DomainResource { private ExampleScenario(Builder builder) { super(builder); url = builder.url; - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); version = builder.version; name = builder.name; - status = ValidationSupport.requireNonNull(builder.status, "status"); + status = builder.status; experimental = builder.experimental; date = builder.date; publisher = builder.publisher; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactDetail.class)); - useContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.useContext, "useContext", UsageContext.class)); - jurisdiction = Collections.unmodifiableList(ValidationSupport.checkList(builder.jurisdiction, "jurisdiction", CodeableConcept.class)); + contact = Collections.unmodifiableList(builder.contact); + useContext = Collections.unmodifiableList(builder.useContext); + jurisdiction = Collections.unmodifiableList(builder.jurisdiction); copyright = builder.copyright; purpose = builder.purpose; - actor = Collections.unmodifiableList(ValidationSupport.checkList(builder.actor, "actor", Actor.class)); - instance = Collections.unmodifiableList(ValidationSupport.checkList(builder.instance, "instance", Instance.class)); - process = Collections.unmodifiableList(ValidationSupport.checkList(builder.process, "process", Process.class)); - workflow = Collections.unmodifiableList(ValidationSupport.checkList(builder.workflow, "workflow", Canonical.class)); + actor = Collections.unmodifiableList(builder.actor); + instance = Collections.unmodifiableList(builder.instance); + process = Collections.unmodifiableList(builder.process); + workflow = Collections.unmodifiableList(builder.workflow); } /** @@ -1109,7 +1109,24 @@ public Builder workflow(Collection workflow) { */ @Override public ExampleScenario build() { - return new ExampleScenario(this); + ExampleScenario exampleScenario = new ExampleScenario(this); + if (validating) { + validate(exampleScenario); + } + return exampleScenario; + } + + protected void validate(ExampleScenario exampleScenario) { + super.validate(exampleScenario); + ValidationSupport.checkList(exampleScenario.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(exampleScenario.status, "status"); + ValidationSupport.checkList(exampleScenario.contact, "contact", ContactDetail.class); + ValidationSupport.checkList(exampleScenario.useContext, "useContext", UsageContext.class); + ValidationSupport.checkList(exampleScenario.jurisdiction, "jurisdiction", CodeableConcept.class); + ValidationSupport.checkList(exampleScenario.actor, "actor", Actor.class); + ValidationSupport.checkList(exampleScenario.instance, "instance", Instance.class); + ValidationSupport.checkList(exampleScenario.process, "process", Process.class); + ValidationSupport.checkList(exampleScenario.workflow, "workflow", Canonical.class); } protected Builder from(ExampleScenario exampleScenario) { @@ -1154,11 +1171,10 @@ public static class Actor extends BackboneElement { private Actor(Builder builder) { super(builder); - actorId = ValidationSupport.requireNonNull(builder.actorId, "actorId"); - type = ValidationSupport.requireNonNull(builder.type, "type"); + actorId = builder.actorId; + type = builder.type; name = builder.name; description = builder.description; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1462,7 +1478,18 @@ public Builder description(Markdown description) { */ @Override public Actor build() { - return new Actor(this); + Actor actor = new Actor(this); + if (validating) { + validate(actor); + } + return actor; + } + + protected void validate(Actor actor) { + super.validate(actor); + ValidationSupport.requireNonNull(actor.actorId, "actorId"); + ValidationSupport.requireNonNull(actor.type, "type"); + ValidationSupport.requireValueOrChildren(actor); } protected Builder from(Actor actor) { @@ -1497,13 +1524,12 @@ public static class Instance extends BackboneElement { private Instance(Builder builder) { super(builder); - resourceId = ValidationSupport.requireNonNull(builder.resourceId, "resourceId"); - resourceType = ValidationSupport.requireNonNull(builder.resourceType, "resourceType"); + resourceId = builder.resourceId; + resourceType = builder.resourceType; name = builder.name; description = builder.description; - version = Collections.unmodifiableList(ValidationSupport.checkList(builder.version, "version", Version.class)); - containedInstance = Collections.unmodifiableList(ValidationSupport.checkList(builder.containedInstance, "containedInstance", ContainedInstance.class)); - ValidationSupport.requireValueOrChildren(this); + version = Collections.unmodifiableList(builder.version); + containedInstance = Collections.unmodifiableList(builder.containedInstance); } /** @@ -1905,7 +1931,20 @@ public Builder containedInstance(Collection containedInstance */ @Override public Instance build() { - return new Instance(this); + Instance instance = new Instance(this); + if (validating) { + validate(instance); + } + return instance; + } + + protected void validate(Instance instance) { + super.validate(instance); + ValidationSupport.requireNonNull(instance.resourceId, "resourceId"); + ValidationSupport.requireNonNull(instance.resourceType, "resourceType"); + ValidationSupport.checkList(instance.version, "version", Version.class); + ValidationSupport.checkList(instance.containedInstance, "containedInstance", ContainedInstance.class); + ValidationSupport.requireValueOrChildren(instance); } protected Builder from(Instance instance) { @@ -1931,9 +1970,8 @@ public static class Version extends BackboneElement { private Version(Builder builder) { super(builder); - versionId = ValidationSupport.requireNonNull(builder.versionId, "versionId"); - description = ValidationSupport.requireNonNull(builder.description, "description"); - ValidationSupport.requireValueOrChildren(this); + versionId = builder.versionId; + description = builder.description; } /** @@ -2179,7 +2217,18 @@ public Builder description(Markdown description) { */ @Override public Version build() { - return new Version(this); + Version version = new Version(this); + if (validating) { + validate(version); + } + return version; + } + + protected void validate(Version version) { + super.validate(version); + ValidationSupport.requireNonNull(version.versionId, "versionId"); + ValidationSupport.requireNonNull(version.description, "description"); + ValidationSupport.requireValueOrChildren(version); } protected Builder from(Version version) { @@ -2201,9 +2250,8 @@ public static class ContainedInstance extends BackboneElement { private ContainedInstance(Builder builder) { super(builder); - resourceId = ValidationSupport.requireNonNull(builder.resourceId, "resourceId"); + resourceId = builder.resourceId; versionId = builder.versionId; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2446,7 +2494,17 @@ public Builder versionId(String versionId) { */ @Override public ContainedInstance build() { - return new ContainedInstance(this); + ContainedInstance containedInstance = new ContainedInstance(this); + if (validating) { + validate(containedInstance); + } + return containedInstance; + } + + protected void validate(ContainedInstance containedInstance) { + super.validate(containedInstance); + ValidationSupport.requireNonNull(containedInstance.resourceId, "resourceId"); + ValidationSupport.requireValueOrChildren(containedInstance); } protected Builder from(ContainedInstance containedInstance) { @@ -2473,12 +2531,11 @@ public static class Process extends BackboneElement { private Process(Builder builder) { super(builder); - title = ValidationSupport.requireNonNull(builder.title, "title"); + title = builder.title; description = builder.description; preConditions = builder.preConditions; postConditions = builder.postConditions; - step = Collections.unmodifiableList(ValidationSupport.checkList(builder.step, "step", Step.class)); - ValidationSupport.requireValueOrChildren(this); + step = Collections.unmodifiableList(builder.step); } /** @@ -2828,7 +2885,18 @@ public Builder step(Collection step) { */ @Override public Process build() { - return new Process(this); + Process process = new Process(this); + if (validating) { + validate(process); + } + return process; + } + + protected void validate(Process process) { + super.validate(process); + ValidationSupport.requireNonNull(process.title, "title"); + ValidationSupport.checkList(process.step, "step", Step.class); + ValidationSupport.requireValueOrChildren(process); } protected Builder from(Process process) { @@ -2853,11 +2921,10 @@ public static class Step extends BackboneElement { private Step(Builder builder) { super(builder); - process = Collections.unmodifiableList(ValidationSupport.checkList(builder.process, "process", ExampleScenario.Process.class)); + process = Collections.unmodifiableList(builder.process); pause = builder.pause; operation = builder.operation; - alternative = Collections.unmodifiableList(ValidationSupport.checkList(builder.alternative, "alternative", Alternative.class)); - ValidationSupport.requireValueOrChildren(this); + alternative = Collections.unmodifiableList(builder.alternative); } /** @@ -3194,7 +3261,18 @@ public Builder alternative(Collection alternative) { */ @Override public Step build() { - return new Step(this); + Step step = new Step(this); + if (validating) { + validate(step); + } + return step; + } + + protected void validate(Step step) { + super.validate(step); + ValidationSupport.checkList(step.process, "process", ExampleScenario.Process.class); + ValidationSupport.checkList(step.alternative, "alternative", Alternative.class); + ValidationSupport.requireValueOrChildren(step); } protected Builder from(Step step) { @@ -3225,7 +3303,7 @@ public static class Operation extends BackboneElement { private Operation(Builder builder) { super(builder); - number = ValidationSupport.requireNonNull(builder.number, "number"); + number = builder.number; type = builder.type; name = builder.name; initiator = builder.initiator; @@ -3235,7 +3313,6 @@ private Operation(Builder builder) { receiverActive = builder.receiverActive; request = builder.request; response = builder.response; - ValidationSupport.requireValueOrChildren(this); } /** @@ -3710,7 +3787,17 @@ public Builder response(ExampleScenario.Instance.ContainedInstance response) { */ @Override public Operation build() { - return new Operation(this); + Operation operation = new Operation(this); + if (validating) { + validate(operation); + } + return operation; + } + + protected void validate(Operation operation) { + super.validate(operation); + ValidationSupport.requireNonNull(operation.number, "number"); + ValidationSupport.requireValueOrChildren(operation); } protected Builder from(Operation operation) { @@ -3742,10 +3829,9 @@ public static class Alternative extends BackboneElement { private Alternative(Builder builder) { super(builder); - title = ValidationSupport.requireNonNull(builder.title, "title"); + title = builder.title; description = builder.description; - step = Collections.unmodifiableList(ValidationSupport.checkList(builder.step, "step", ExampleScenario.Process.Step.class)); - ValidationSupport.requireValueOrChildren(this); + step = Collections.unmodifiableList(builder.step); } /** @@ -4039,7 +4125,18 @@ public Builder step(Collection step) { */ @Override public Alternative build() { - return new Alternative(this); + Alternative alternative = new Alternative(this); + if (validating) { + validate(alternative); + } + return alternative; + } + + protected void validate(Alternative alternative) { + super.validate(alternative); + ValidationSupport.requireNonNull(alternative.title, "title"); + ValidationSupport.checkList(alternative.step, "step", ExampleScenario.Process.Step.class); + ValidationSupport.requireValueOrChildren(alternative); } protected Builder from(Alternative alternative) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ExplanationOfBenefit.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ExplanationOfBenefit.java index 45a29706491..5e1f2fdb522 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ExplanationOfBenefit.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ExplanationOfBenefit.java @@ -220,21 +220,21 @@ public class ExplanationOfBenefit extends DomainResource { private ExplanationOfBenefit(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - type = ValidationSupport.requireNonNull(builder.type, "type"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; + type = builder.type; subType = builder.subType; - use = ValidationSupport.requireNonNull(builder.use, "use"); - patient = ValidationSupport.requireNonNull(builder.patient, "patient"); + use = builder.use; + patient = builder.patient; billablePeriod = builder.billablePeriod; - created = ValidationSupport.requireNonNull(builder.created, "created"); + created = builder.created; enterer = builder.enterer; - insurer = ValidationSupport.requireNonNull(builder.insurer, "insurer"); - provider = ValidationSupport.requireNonNull(builder.provider, "provider"); + insurer = builder.insurer; + provider = builder.provider; priority = builder.priority; fundsReserveRequested = builder.fundsReserveRequested; fundsReserve = builder.fundsReserve; - related = Collections.unmodifiableList(ValidationSupport.checkList(builder.related, "related", Related.class)); + related = Collections.unmodifiableList(builder.related); prescription = builder.prescription; originalPrescription = builder.originalPrescription; payee = builder.payee; @@ -242,37 +242,27 @@ private ExplanationOfBenefit(Builder builder) { facility = builder.facility; claim = builder.claim; claimResponse = builder.claimResponse; - outcome = ValidationSupport.requireNonNull(builder.outcome, "outcome"); + outcome = builder.outcome; disposition = builder.disposition; - preAuthRef = Collections.unmodifiableList(ValidationSupport.checkList(builder.preAuthRef, "preAuthRef", String.class)); - preAuthRefPeriod = Collections.unmodifiableList(ValidationSupport.checkList(builder.preAuthRefPeriod, "preAuthRefPeriod", Period.class)); - careTeam = Collections.unmodifiableList(ValidationSupport.checkList(builder.careTeam, "careTeam", CareTeam.class)); - supportingInfo = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportingInfo, "supportingInfo", SupportingInfo.class)); - diagnosis = Collections.unmodifiableList(ValidationSupport.checkList(builder.diagnosis, "diagnosis", Diagnosis.class)); - procedure = Collections.unmodifiableList(ValidationSupport.checkList(builder.procedure, "procedure", Procedure.class)); + preAuthRef = Collections.unmodifiableList(builder.preAuthRef); + preAuthRefPeriod = Collections.unmodifiableList(builder.preAuthRefPeriod); + careTeam = Collections.unmodifiableList(builder.careTeam); + supportingInfo = Collections.unmodifiableList(builder.supportingInfo); + diagnosis = Collections.unmodifiableList(builder.diagnosis); + procedure = Collections.unmodifiableList(builder.procedure); precedence = builder.precedence; - insurance = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.insurance, "insurance", Insurance.class)); + insurance = Collections.unmodifiableList(builder.insurance); accident = builder.accident; - item = Collections.unmodifiableList(ValidationSupport.checkList(builder.item, "item", Item.class)); - addItem = Collections.unmodifiableList(ValidationSupport.checkList(builder.addItem, "addItem", AddItem.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkList(builder.adjudication, "adjudication", ExplanationOfBenefit.Item.Adjudication.class)); - total = Collections.unmodifiableList(ValidationSupport.checkList(builder.total, "total", Total.class)); + item = Collections.unmodifiableList(builder.item); + addItem = Collections.unmodifiableList(builder.addItem); + adjudication = Collections.unmodifiableList(builder.adjudication); + total = Collections.unmodifiableList(builder.total); payment = builder.payment; formCode = builder.formCode; form = builder.form; - processNote = Collections.unmodifiableList(ValidationSupport.checkList(builder.processNote, "processNote", ProcessNote.class)); + processNote = Collections.unmodifiableList(builder.processNote); benefitPeriod = builder.benefitPeriod; - benefitBalance = Collections.unmodifiableList(ValidationSupport.checkList(builder.benefitBalance, "benefitBalance", BenefitBalance.class)); - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(enterer, "enterer", "Practitioner", "PractitionerRole"); - ValidationSupport.checkReferenceType(insurer, "insurer", "Organization"); - ValidationSupport.checkReferenceType(provider, "provider", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.checkReferenceType(prescription, "prescription", "MedicationRequest", "VisionPrescription"); - ValidationSupport.checkReferenceType(originalPrescription, "originalPrescription", "MedicationRequest"); - ValidationSupport.checkReferenceType(referral, "referral", "ServiceRequest"); - ValidationSupport.checkReferenceType(facility, "facility", "Location"); - ValidationSupport.checkReferenceType(claim, "claim", "Claim"); - ValidationSupport.checkReferenceType(claimResponse, "claimResponse", "ClaimResponse"); + benefitBalance = Collections.unmodifiableList(builder.benefitBalance); } /** @@ -2220,7 +2210,48 @@ public Builder benefitBalance(Collection benefitBalance) { */ @Override public ExplanationOfBenefit build() { - return new ExplanationOfBenefit(this); + ExplanationOfBenefit explanationOfBenefit = new ExplanationOfBenefit(this); + if (validating) { + validate(explanationOfBenefit); + } + return explanationOfBenefit; + } + + protected void validate(ExplanationOfBenefit explanationOfBenefit) { + super.validate(explanationOfBenefit); + ValidationSupport.checkList(explanationOfBenefit.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(explanationOfBenefit.status, "status"); + ValidationSupport.requireNonNull(explanationOfBenefit.type, "type"); + ValidationSupport.requireNonNull(explanationOfBenefit.use, "use"); + ValidationSupport.requireNonNull(explanationOfBenefit.patient, "patient"); + ValidationSupport.requireNonNull(explanationOfBenefit.created, "created"); + ValidationSupport.requireNonNull(explanationOfBenefit.insurer, "insurer"); + ValidationSupport.requireNonNull(explanationOfBenefit.provider, "provider"); + ValidationSupport.checkList(explanationOfBenefit.related, "related", Related.class); + ValidationSupport.requireNonNull(explanationOfBenefit.outcome, "outcome"); + ValidationSupport.checkList(explanationOfBenefit.preAuthRef, "preAuthRef", String.class); + ValidationSupport.checkList(explanationOfBenefit.preAuthRefPeriod, "preAuthRefPeriod", Period.class); + ValidationSupport.checkList(explanationOfBenefit.careTeam, "careTeam", CareTeam.class); + ValidationSupport.checkList(explanationOfBenefit.supportingInfo, "supportingInfo", SupportingInfo.class); + ValidationSupport.checkList(explanationOfBenefit.diagnosis, "diagnosis", Diagnosis.class); + ValidationSupport.checkList(explanationOfBenefit.procedure, "procedure", Procedure.class); + ValidationSupport.checkNonEmptyList(explanationOfBenefit.insurance, "insurance", Insurance.class); + ValidationSupport.checkList(explanationOfBenefit.item, "item", Item.class); + ValidationSupport.checkList(explanationOfBenefit.addItem, "addItem", AddItem.class); + ValidationSupport.checkList(explanationOfBenefit.adjudication, "adjudication", ExplanationOfBenefit.Item.Adjudication.class); + ValidationSupport.checkList(explanationOfBenefit.total, "total", Total.class); + ValidationSupport.checkList(explanationOfBenefit.processNote, "processNote", ProcessNote.class); + ValidationSupport.checkList(explanationOfBenefit.benefitBalance, "benefitBalance", BenefitBalance.class); + ValidationSupport.checkReferenceType(explanationOfBenefit.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(explanationOfBenefit.enterer, "enterer", "Practitioner", "PractitionerRole"); + ValidationSupport.checkReferenceType(explanationOfBenefit.insurer, "insurer", "Organization"); + ValidationSupport.checkReferenceType(explanationOfBenefit.provider, "provider", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.checkReferenceType(explanationOfBenefit.prescription, "prescription", "MedicationRequest", "VisionPrescription"); + ValidationSupport.checkReferenceType(explanationOfBenefit.originalPrescription, "originalPrescription", "MedicationRequest"); + ValidationSupport.checkReferenceType(explanationOfBenefit.referral, "referral", "ServiceRequest"); + ValidationSupport.checkReferenceType(explanationOfBenefit.facility, "facility", "Location"); + ValidationSupport.checkReferenceType(explanationOfBenefit.claim, "claim", "Claim"); + ValidationSupport.checkReferenceType(explanationOfBenefit.claimResponse, "claimResponse", "ClaimResponse"); } protected Builder from(ExplanationOfBenefit explanationOfBenefit) { @@ -2293,8 +2324,6 @@ private Related(Builder builder) { claim = builder.claim; relationship = builder.relationship; reference = builder.reference; - ValidationSupport.checkReferenceType(claim, "claim", "Claim"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -2564,7 +2593,17 @@ public Builder reference(Identifier reference) { */ @Override public Related build() { - return new Related(this); + Related related = new Related(this); + if (validating) { + validate(related); + } + return related; + } + + protected void validate(Related related) { + super.validate(related); + ValidationSupport.checkReferenceType(related.claim, "claim", "Claim"); + ValidationSupport.requireValueOrChildren(related); } protected Builder from(Related related) { @@ -2595,8 +2634,6 @@ private Payee(Builder builder) { super(builder); type = builder.type; party = builder.party; - ValidationSupport.checkReferenceType(party, "party", "Practitioner", "PractitionerRole", "Organization", "Patient", "RelatedPerson"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -2841,7 +2878,17 @@ public Builder party(Reference party) { */ @Override public Payee build() { - return new Payee(this); + Payee payee = new Payee(this); + if (validating) { + validate(payee); + } + return payee; + } + + protected void validate(Payee payee) { + super.validate(payee); + ValidationSupport.checkReferenceType(payee.party, "party", "Practitioner", "PractitionerRole", "Organization", "Patient", "RelatedPerson"); + ValidationSupport.requireValueOrChildren(payee); } protected Builder from(Payee payee) { @@ -2880,13 +2927,11 @@ public static class CareTeam extends BackboneElement { private CareTeam(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); - provider = ValidationSupport.requireNonNull(builder.provider, "provider"); + sequence = builder.sequence; + provider = builder.provider; responsible = builder.responsible; role = builder.role; qualification = builder.qualification; - ValidationSupport.checkReferenceType(provider, "provider", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -3226,7 +3271,19 @@ public Builder qualification(CodeableConcept qualification) { */ @Override public CareTeam build() { - return new CareTeam(this); + CareTeam careTeam = new CareTeam(this); + if (validating) { + validate(careTeam); + } + return careTeam; + } + + protected void validate(CareTeam careTeam) { + super.validate(careTeam); + ValidationSupport.requireNonNull(careTeam.sequence, "sequence"); + ValidationSupport.requireNonNull(careTeam.provider, "provider"); + ValidationSupport.checkReferenceType(careTeam.provider, "provider", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.requireValueOrChildren(careTeam); } protected Builder from(CareTeam careTeam) { @@ -3277,13 +3334,12 @@ public static class SupportingInfo extends BackboneElement { private SupportingInfo(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); - category = ValidationSupport.requireNonNull(builder.category, "category"); + sequence = builder.sequence; + category = builder.category; code = builder.code; - timing = ValidationSupport.choiceElement(builder.timing, "timing", Date.class, Period.class); - value = ValidationSupport.choiceElement(builder.value, "value", Boolean.class, String.class, Quantity.class, Attachment.class, Reference.class); + timing = builder.timing; + value = builder.value; reason = builder.reason; - ValidationSupport.requireValueOrChildren(this); } /** @@ -3664,7 +3720,20 @@ public Builder reason(Coding reason) { */ @Override public SupportingInfo build() { - return new SupportingInfo(this); + SupportingInfo supportingInfo = new SupportingInfo(this); + if (validating) { + validate(supportingInfo); + } + return supportingInfo; + } + + protected void validate(SupportingInfo supportingInfo) { + super.validate(supportingInfo); + ValidationSupport.requireNonNull(supportingInfo.sequence, "sequence"); + ValidationSupport.requireNonNull(supportingInfo.category, "category"); + ValidationSupport.choiceElement(supportingInfo.timing, "timing", Date.class, Period.class); + ValidationSupport.choiceElement(supportingInfo.value, "value", Boolean.class, String.class, Quantity.class, Attachment.class, Reference.class); + ValidationSupport.requireValueOrChildren(supportingInfo); } protected Builder from(SupportingInfo supportingInfo) { @@ -3720,13 +3789,11 @@ public static class Diagnosis extends BackboneElement { private Diagnosis(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); - diagnosis = ValidationSupport.requireChoiceElement(builder.diagnosis, "diagnosis", CodeableConcept.class, Reference.class); - type = Collections.unmodifiableList(ValidationSupport.checkList(builder.type, "type", CodeableConcept.class)); + sequence = builder.sequence; + diagnosis = builder.diagnosis; + type = Collections.unmodifiableList(builder.type); onAdmission = builder.onAdmission; packageCode = builder.packageCode; - ValidationSupport.checkReferenceType(diagnosis, "diagnosis", "Condition"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -4092,7 +4159,20 @@ public Builder packageCode(CodeableConcept packageCode) { */ @Override public Diagnosis build() { - return new Diagnosis(this); + Diagnosis diagnosis = new Diagnosis(this); + if (validating) { + validate(diagnosis); + } + return diagnosis; + } + + protected void validate(Diagnosis diagnosis) { + super.validate(diagnosis); + ValidationSupport.requireNonNull(diagnosis.sequence, "sequence"); + ValidationSupport.requireChoiceElement(diagnosis.diagnosis, "diagnosis", CodeableConcept.class, Reference.class); + ValidationSupport.checkList(diagnosis.type, "type", CodeableConcept.class); + ValidationSupport.checkReferenceType(diagnosis.diagnosis, "diagnosis", "Condition"); + ValidationSupport.requireValueOrChildren(diagnosis); } protected Builder from(Diagnosis diagnosis) { @@ -4136,14 +4216,11 @@ public static class Procedure extends BackboneElement { private Procedure(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); - type = Collections.unmodifiableList(ValidationSupport.checkList(builder.type, "type", CodeableConcept.class)); + sequence = builder.sequence; + type = Collections.unmodifiableList(builder.type); date = builder.date; - procedure = ValidationSupport.requireChoiceElement(builder.procedure, "procedure", CodeableConcept.class, Reference.class); - udi = Collections.unmodifiableList(ValidationSupport.checkList(builder.udi, "udi", Reference.class)); - ValidationSupport.checkReferenceType(procedure, "procedure", "Procedure"); - ValidationSupport.checkReferenceType(udi, "udi", "Device"); - ValidationSupport.requireValueOrChildren(this); + procedure = builder.procedure; + udi = Collections.unmodifiableList(builder.udi); } /** @@ -4537,7 +4614,22 @@ public Builder udi(Collection udi) { */ @Override public Procedure build() { - return new Procedure(this); + Procedure procedure = new Procedure(this); + if (validating) { + validate(procedure); + } + return procedure; + } + + protected void validate(Procedure procedure) { + super.validate(procedure); + ValidationSupport.requireNonNull(procedure.sequence, "sequence"); + ValidationSupport.checkList(procedure.type, "type", CodeableConcept.class); + ValidationSupport.requireChoiceElement(procedure.procedure, "procedure", CodeableConcept.class, Reference.class); + ValidationSupport.checkList(procedure.udi, "udi", Reference.class); + ValidationSupport.checkReferenceType(procedure.procedure, "procedure", "Procedure"); + ValidationSupport.checkReferenceType(procedure.udi, "udi", "Device"); + ValidationSupport.requireValueOrChildren(procedure); } protected Builder from(Procedure procedure) { @@ -4567,11 +4659,9 @@ public static class Insurance extends BackboneElement { private Insurance(Builder builder) { super(builder); - focal = ValidationSupport.requireNonNull(builder.focal, "focal"); - coverage = ValidationSupport.requireNonNull(builder.coverage, "coverage"); - preAuthRef = Collections.unmodifiableList(ValidationSupport.checkList(builder.preAuthRef, "preAuthRef", String.class)); - ValidationSupport.checkReferenceType(coverage, "coverage", "Coverage"); - ValidationSupport.requireValueOrChildren(this); + focal = builder.focal; + coverage = builder.coverage; + preAuthRef = Collections.unmodifiableList(builder.preAuthRef); } /** @@ -4876,7 +4966,20 @@ public Builder preAuthRef(Collection preAuthRef) { */ @Override public Insurance build() { - return new Insurance(this); + Insurance insurance = new Insurance(this); + if (validating) { + validate(insurance); + } + return insurance; + } + + protected void validate(Insurance insurance) { + super.validate(insurance); + ValidationSupport.requireNonNull(insurance.focal, "focal"); + ValidationSupport.requireNonNull(insurance.coverage, "coverage"); + ValidationSupport.checkList(insurance.preAuthRef, "preAuthRef", String.class); + ValidationSupport.checkReferenceType(insurance.coverage, "coverage", "Coverage"); + ValidationSupport.requireValueOrChildren(insurance); } protected Builder from(Insurance insurance) { @@ -4909,9 +5012,7 @@ private Accident(Builder builder) { super(builder); date = builder.date; type = builder.type; - location = ValidationSupport.choiceElement(builder.location, "location", Address.class, Reference.class); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.requireValueOrChildren(this); + location = builder.location; } /** @@ -5189,7 +5290,18 @@ public Builder location(Element location) { */ @Override public Accident build() { - return new Accident(this); + Accident accident = new Accident(this); + if (validating) { + validate(accident); + } + return accident; + } + + protected void validate(Accident accident) { + super.validate(accident); + ValidationSupport.choiceElement(accident.location, "location", Address.class, Reference.class); + ValidationSupport.checkReferenceType(accident.location, "location", "Location"); + ValidationSupport.requireValueOrChildren(accident); } protected Builder from(Accident accident) { @@ -5288,33 +5400,29 @@ public static class Item extends BackboneElement { private Item(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); - careTeamSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.careTeamSequence, "careTeamSequence", PositiveInt.class)); - diagnosisSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.diagnosisSequence, "diagnosisSequence", PositiveInt.class)); - procedureSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.procedureSequence, "procedureSequence", PositiveInt.class)); - informationSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.informationSequence, "informationSequence", PositiveInt.class)); + sequence = builder.sequence; + careTeamSequence = Collections.unmodifiableList(builder.careTeamSequence); + diagnosisSequence = Collections.unmodifiableList(builder.diagnosisSequence); + procedureSequence = Collections.unmodifiableList(builder.procedureSequence); + informationSequence = Collections.unmodifiableList(builder.informationSequence); revenue = builder.revenue; category = builder.category; - productOrService = ValidationSupport.requireNonNull(builder.productOrService, "productOrService"); - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); - programCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.programCode, "programCode", CodeableConcept.class)); - serviced = ValidationSupport.choiceElement(builder.serviced, "serviced", Date.class, Period.class); - location = ValidationSupport.choiceElement(builder.location, "location", CodeableConcept.class, Address.class, Reference.class); + productOrService = builder.productOrService; + modifier = Collections.unmodifiableList(builder.modifier); + programCode = Collections.unmodifiableList(builder.programCode); + serviced = builder.serviced; + location = builder.location; quantity = builder.quantity; unitPrice = builder.unitPrice; factor = builder.factor; net = builder.net; - udi = Collections.unmodifiableList(ValidationSupport.checkList(builder.udi, "udi", Reference.class)); + udi = Collections.unmodifiableList(builder.udi); bodySite = builder.bodySite; - subSite = Collections.unmodifiableList(ValidationSupport.checkList(builder.subSite, "subSite", CodeableConcept.class)); - encounter = Collections.unmodifiableList(ValidationSupport.checkList(builder.encounter, "encounter", Reference.class)); - noteNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.noteNumber, "noteNumber", PositiveInt.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkList(builder.adjudication, "adjudication", Adjudication.class)); - detail = Collections.unmodifiableList(ValidationSupport.checkList(builder.detail, "detail", Detail.class)); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.checkReferenceType(udi, "udi", "Device"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.requireValueOrChildren(this); + subSite = Collections.unmodifiableList(builder.subSite); + encounter = Collections.unmodifiableList(builder.encounter); + noteNumber = Collections.unmodifiableList(builder.noteNumber); + adjudication = Collections.unmodifiableList(builder.adjudication); + detail = Collections.unmodifiableList(builder.detail); } /** @@ -6456,7 +6564,35 @@ public Builder detail(Collection detail) { */ @Override public Item build() { - return new Item(this); + Item item = new Item(this); + if (validating) { + validate(item); + } + return item; + } + + protected void validate(Item item) { + super.validate(item); + ValidationSupport.requireNonNull(item.sequence, "sequence"); + ValidationSupport.checkList(item.careTeamSequence, "careTeamSequence", PositiveInt.class); + ValidationSupport.checkList(item.diagnosisSequence, "diagnosisSequence", PositiveInt.class); + ValidationSupport.checkList(item.procedureSequence, "procedureSequence", PositiveInt.class); + ValidationSupport.checkList(item.informationSequence, "informationSequence", PositiveInt.class); + ValidationSupport.requireNonNull(item.productOrService, "productOrService"); + ValidationSupport.checkList(item.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(item.programCode, "programCode", CodeableConcept.class); + ValidationSupport.choiceElement(item.serviced, "serviced", Date.class, Period.class); + ValidationSupport.choiceElement(item.location, "location", CodeableConcept.class, Address.class, Reference.class); + ValidationSupport.checkList(item.udi, "udi", Reference.class); + ValidationSupport.checkList(item.subSite, "subSite", CodeableConcept.class); + ValidationSupport.checkList(item.encounter, "encounter", Reference.class); + ValidationSupport.checkList(item.noteNumber, "noteNumber", PositiveInt.class); + ValidationSupport.checkList(item.adjudication, "adjudication", Adjudication.class); + ValidationSupport.checkList(item.detail, "detail", Detail.class); + ValidationSupport.checkReferenceType(item.location, "location", "Location"); + ValidationSupport.checkReferenceType(item.udi, "udi", "Device"); + ValidationSupport.checkReferenceType(item.encounter, "encounter", "Encounter"); + ValidationSupport.requireValueOrChildren(item); } protected Builder from(Item item) { @@ -6513,11 +6649,10 @@ public static class Adjudication extends BackboneElement { private Adjudication(Builder builder) { super(builder); - category = ValidationSupport.requireNonNull(builder.category, "category"); + category = builder.category; reason = builder.reason; amount = builder.amount; value = builder.value; - ValidationSupport.requireValueOrChildren(this); } /** @@ -6822,7 +6957,17 @@ public Builder value(Decimal value) { */ @Override public Adjudication build() { - return new Adjudication(this); + Adjudication adjudication = new Adjudication(this); + if (validating) { + validate(adjudication); + } + return adjudication; + } + + protected void validate(Adjudication adjudication) { + super.validate(adjudication); + ValidationSupport.requireNonNull(adjudication.category, "category"); + ValidationSupport.requireValueOrChildren(adjudication); } protected Builder from(Adjudication adjudication) { @@ -6890,22 +7035,20 @@ public static class Detail extends BackboneElement { private Detail(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); + sequence = builder.sequence; revenue = builder.revenue; category = builder.category; - productOrService = ValidationSupport.requireNonNull(builder.productOrService, "productOrService"); - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); - programCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.programCode, "programCode", CodeableConcept.class)); + productOrService = builder.productOrService; + modifier = Collections.unmodifiableList(builder.modifier); + programCode = Collections.unmodifiableList(builder.programCode); quantity = builder.quantity; unitPrice = builder.unitPrice; factor = builder.factor; net = builder.net; - udi = Collections.unmodifiableList(ValidationSupport.checkList(builder.udi, "udi", Reference.class)); - noteNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.noteNumber, "noteNumber", PositiveInt.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkList(builder.adjudication, "adjudication", ExplanationOfBenefit.Item.Adjudication.class)); - subDetail = Collections.unmodifiableList(ValidationSupport.checkList(builder.subDetail, "subDetail", SubDetail.class)); - ValidationSupport.checkReferenceType(udi, "udi", "Device"); - ValidationSupport.requireValueOrChildren(this); + udi = Collections.unmodifiableList(builder.udi); + noteNumber = Collections.unmodifiableList(builder.noteNumber); + adjudication = Collections.unmodifiableList(builder.adjudication); + subDetail = Collections.unmodifiableList(builder.subDetail); } /** @@ -7635,7 +7778,25 @@ public Builder subDetail(Collection subDetail) { */ @Override public Detail build() { - return new Detail(this); + Detail detail = new Detail(this); + if (validating) { + validate(detail); + } + return detail; + } + + protected void validate(Detail detail) { + super.validate(detail); + ValidationSupport.requireNonNull(detail.sequence, "sequence"); + ValidationSupport.requireNonNull(detail.productOrService, "productOrService"); + ValidationSupport.checkList(detail.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(detail.programCode, "programCode", CodeableConcept.class); + ValidationSupport.checkList(detail.udi, "udi", Reference.class); + ValidationSupport.checkList(detail.noteNumber, "noteNumber", PositiveInt.class); + ValidationSupport.checkList(detail.adjudication, "adjudication", ExplanationOfBenefit.Item.Adjudication.class); + ValidationSupport.checkList(detail.subDetail, "subDetail", SubDetail.class); + ValidationSupport.checkReferenceType(detail.udi, "udi", "Device"); + ValidationSupport.requireValueOrChildren(detail); } protected Builder from(Detail detail) { @@ -7711,21 +7872,19 @@ public static class SubDetail extends BackboneElement { private SubDetail(Builder builder) { super(builder); - sequence = ValidationSupport.requireNonNull(builder.sequence, "sequence"); + sequence = builder.sequence; revenue = builder.revenue; category = builder.category; - productOrService = ValidationSupport.requireNonNull(builder.productOrService, "productOrService"); - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); - programCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.programCode, "programCode", CodeableConcept.class)); + productOrService = builder.productOrService; + modifier = Collections.unmodifiableList(builder.modifier); + programCode = Collections.unmodifiableList(builder.programCode); quantity = builder.quantity; unitPrice = builder.unitPrice; factor = builder.factor; net = builder.net; - udi = Collections.unmodifiableList(ValidationSupport.checkList(builder.udi, "udi", Reference.class)); - noteNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.noteNumber, "noteNumber", PositiveInt.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkList(builder.adjudication, "adjudication", ExplanationOfBenefit.Item.Adjudication.class)); - ValidationSupport.checkReferenceType(udi, "udi", "Device"); - ValidationSupport.requireValueOrChildren(this); + udi = Collections.unmodifiableList(builder.udi); + noteNumber = Collections.unmodifiableList(builder.noteNumber); + adjudication = Collections.unmodifiableList(builder.adjudication); } /** @@ -8406,7 +8565,24 @@ public Builder adjudication(Collection a */ @Override public SubDetail build() { - return new SubDetail(this); + SubDetail subDetail = new SubDetail(this); + if (validating) { + validate(subDetail); + } + return subDetail; + } + + protected void validate(SubDetail subDetail) { + super.validate(subDetail); + ValidationSupport.requireNonNull(subDetail.sequence, "sequence"); + ValidationSupport.requireNonNull(subDetail.productOrService, "productOrService"); + ValidationSupport.checkList(subDetail.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(subDetail.programCode, "programCode", CodeableConcept.class); + ValidationSupport.checkList(subDetail.udi, "udi", Reference.class); + ValidationSupport.checkList(subDetail.noteNumber, "noteNumber", PositiveInt.class); + ValidationSupport.checkList(subDetail.adjudication, "adjudication", ExplanationOfBenefit.Item.Adjudication.class); + ValidationSupport.checkReferenceType(subDetail.udi, "udi", "Device"); + ValidationSupport.requireValueOrChildren(subDetail); } protected Builder from(SubDetail subDetail) { @@ -8497,27 +8673,24 @@ public static class AddItem extends BackboneElement { private AddItem(Builder builder) { super(builder); - itemSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.itemSequence, "itemSequence", PositiveInt.class)); - detailSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.detailSequence, "detailSequence", PositiveInt.class)); - subDetailSequence = Collections.unmodifiableList(ValidationSupport.checkList(builder.subDetailSequence, "subDetailSequence", PositiveInt.class)); - provider = Collections.unmodifiableList(ValidationSupport.checkList(builder.provider, "provider", Reference.class)); - productOrService = ValidationSupport.requireNonNull(builder.productOrService, "productOrService"); - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); - programCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.programCode, "programCode", CodeableConcept.class)); - serviced = ValidationSupport.choiceElement(builder.serviced, "serviced", Date.class, Period.class); - location = ValidationSupport.choiceElement(builder.location, "location", CodeableConcept.class, Address.class, Reference.class); + itemSequence = Collections.unmodifiableList(builder.itemSequence); + detailSequence = Collections.unmodifiableList(builder.detailSequence); + subDetailSequence = Collections.unmodifiableList(builder.subDetailSequence); + provider = Collections.unmodifiableList(builder.provider); + productOrService = builder.productOrService; + modifier = Collections.unmodifiableList(builder.modifier); + programCode = Collections.unmodifiableList(builder.programCode); + serviced = builder.serviced; + location = builder.location; quantity = builder.quantity; unitPrice = builder.unitPrice; factor = builder.factor; net = builder.net; bodySite = builder.bodySite; - subSite = Collections.unmodifiableList(ValidationSupport.checkList(builder.subSite, "subSite", CodeableConcept.class)); - noteNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.noteNumber, "noteNumber", PositiveInt.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkList(builder.adjudication, "adjudication", ExplanationOfBenefit.Item.Adjudication.class)); - detail = Collections.unmodifiableList(ValidationSupport.checkList(builder.detail, "detail", Detail.class)); - ValidationSupport.checkReferenceType(provider, "provider", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.requireValueOrChildren(this); + subSite = Collections.unmodifiableList(builder.subSite); + noteNumber = Collections.unmodifiableList(builder.noteNumber); + adjudication = Collections.unmodifiableList(builder.adjudication); + detail = Collections.unmodifiableList(builder.detail); } /** @@ -9465,7 +9638,31 @@ public Builder detail(Collection detail) { */ @Override public AddItem build() { - return new AddItem(this); + AddItem addItem = new AddItem(this); + if (validating) { + validate(addItem); + } + return addItem; + } + + protected void validate(AddItem addItem) { + super.validate(addItem); + ValidationSupport.checkList(addItem.itemSequence, "itemSequence", PositiveInt.class); + ValidationSupport.checkList(addItem.detailSequence, "detailSequence", PositiveInt.class); + ValidationSupport.checkList(addItem.subDetailSequence, "subDetailSequence", PositiveInt.class); + ValidationSupport.checkList(addItem.provider, "provider", Reference.class); + ValidationSupport.requireNonNull(addItem.productOrService, "productOrService"); + ValidationSupport.checkList(addItem.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(addItem.programCode, "programCode", CodeableConcept.class); + ValidationSupport.choiceElement(addItem.serviced, "serviced", Date.class, Period.class); + ValidationSupport.choiceElement(addItem.location, "location", CodeableConcept.class, Address.class, Reference.class); + ValidationSupport.checkList(addItem.subSite, "subSite", CodeableConcept.class); + ValidationSupport.checkList(addItem.noteNumber, "noteNumber", PositiveInt.class); + ValidationSupport.checkList(addItem.adjudication, "adjudication", ExplanationOfBenefit.Item.Adjudication.class); + ValidationSupport.checkList(addItem.detail, "detail", Detail.class); + ValidationSupport.checkReferenceType(addItem.provider, "provider", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.checkReferenceType(addItem.location, "location", "Location"); + ValidationSupport.requireValueOrChildren(addItem); } protected Builder from(AddItem addItem) { @@ -9521,16 +9718,15 @@ public static class Detail extends BackboneElement { private Detail(Builder builder) { super(builder); - productOrService = ValidationSupport.requireNonNull(builder.productOrService, "productOrService"); - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); + productOrService = builder.productOrService; + modifier = Collections.unmodifiableList(builder.modifier); quantity = builder.quantity; unitPrice = builder.unitPrice; factor = builder.factor; net = builder.net; - noteNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.noteNumber, "noteNumber", PositiveInt.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkList(builder.adjudication, "adjudication", ExplanationOfBenefit.Item.Adjudication.class)); - subDetail = Collections.unmodifiableList(ValidationSupport.checkList(builder.subDetail, "subDetail", SubDetail.class)); - ValidationSupport.requireValueOrChildren(this); + noteNumber = Collections.unmodifiableList(builder.noteNumber); + adjudication = Collections.unmodifiableList(builder.adjudication); + subDetail = Collections.unmodifiableList(builder.subDetail); } /** @@ -10062,7 +10258,21 @@ public Builder subDetail(Collection subDetail) { */ @Override public Detail build() { - return new Detail(this); + Detail detail = new Detail(this); + if (validating) { + validate(detail); + } + return detail; + } + + protected void validate(Detail detail) { + super.validate(detail); + ValidationSupport.requireNonNull(detail.productOrService, "productOrService"); + ValidationSupport.checkList(detail.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(detail.noteNumber, "noteNumber", PositiveInt.class); + ValidationSupport.checkList(detail.adjudication, "adjudication", ExplanationOfBenefit.Item.Adjudication.class); + ValidationSupport.checkList(detail.subDetail, "subDetail", SubDetail.class); + ValidationSupport.requireValueOrChildren(detail); } protected Builder from(Detail detail) { @@ -10108,15 +10318,14 @@ public static class SubDetail extends BackboneElement { private SubDetail(Builder builder) { super(builder); - productOrService = ValidationSupport.requireNonNull(builder.productOrService, "productOrService"); - modifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.modifier, "modifier", CodeableConcept.class)); + productOrService = builder.productOrService; + modifier = Collections.unmodifiableList(builder.modifier); quantity = builder.quantity; unitPrice = builder.unitPrice; factor = builder.factor; net = builder.net; - noteNumber = Collections.unmodifiableList(ValidationSupport.checkList(builder.noteNumber, "noteNumber", PositiveInt.class)); - adjudication = Collections.unmodifiableList(ValidationSupport.checkList(builder.adjudication, "adjudication", ExplanationOfBenefit.Item.Adjudication.class)); - ValidationSupport.requireValueOrChildren(this); + noteNumber = Collections.unmodifiableList(builder.noteNumber); + adjudication = Collections.unmodifiableList(builder.adjudication); } /** @@ -10599,7 +10808,20 @@ public Builder adjudication(Collection a */ @Override public SubDetail build() { - return new SubDetail(this); + SubDetail subDetail = new SubDetail(this); + if (validating) { + validate(subDetail); + } + return subDetail; + } + + protected void validate(SubDetail subDetail) { + super.validate(subDetail); + ValidationSupport.requireNonNull(subDetail.productOrService, "productOrService"); + ValidationSupport.checkList(subDetail.modifier, "modifier", CodeableConcept.class); + ValidationSupport.checkList(subDetail.noteNumber, "noteNumber", PositiveInt.class); + ValidationSupport.checkList(subDetail.adjudication, "adjudication", ExplanationOfBenefit.Item.Adjudication.class); + ValidationSupport.requireValueOrChildren(subDetail); } protected Builder from(SubDetail subDetail) { @@ -10638,9 +10860,8 @@ public static class Total extends BackboneElement { private Total(Builder builder) { super(builder); - category = ValidationSupport.requireNonNull(builder.category, "category"); - amount = ValidationSupport.requireNonNull(builder.amount, "amount"); - ValidationSupport.requireValueOrChildren(this); + category = builder.category; + amount = builder.amount; } /** @@ -10890,7 +11111,18 @@ public Builder amount(Money amount) { */ @Override public Total build() { - return new Total(this); + Total total = new Total(this); + if (validating) { + validate(total); + } + return total; + } + + protected void validate(Total total) { + super.validate(total); + ValidationSupport.requireNonNull(total.category, "category"); + ValidationSupport.requireNonNull(total.amount, "amount"); + ValidationSupport.requireValueOrChildren(total); } protected Builder from(Total total) { @@ -10933,7 +11165,6 @@ private Payment(Builder builder) { date = builder.date; amount = builder.amount; identifier = builder.identifier; - ValidationSupport.requireValueOrChildren(this); } /** @@ -11287,7 +11518,16 @@ public Builder identifier(Identifier identifier) { */ @Override public Payment build() { - return new Payment(this); + Payment payment = new Payment(this); + if (validating) { + validate(payment); + } + return payment; + } + + protected void validate(Payment payment) { + super.validate(payment); + ValidationSupport.requireValueOrChildren(payment); } protected Builder from(Payment payment) { @@ -11331,8 +11571,6 @@ private ProcessNote(Builder builder) { type = builder.type; text = builder.text; language = builder.language; - ValidationSupport.checkValueSetBinding(language, "language", "http://hl7.org/fhir/ValueSet/all-languages", "urn:ietf:bcp:47"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -11626,7 +11864,17 @@ public Builder language(CodeableConcept language) { */ @Override public ProcessNote build() { - return new ProcessNote(this); + ProcessNote processNote = new ProcessNote(this); + if (validating) { + validate(processNote); + } + return processNote; + } + + protected void validate(ProcessNote processNote) { + super.validate(processNote); + ValidationSupport.checkValueSetBinding(processNote.language, "language", "http://hl7.org/fhir/ValueSet/all-languages", "urn:ietf:bcp:47"); + ValidationSupport.requireValueOrChildren(processNote); } protected Builder from(ProcessNote processNote) { @@ -11680,15 +11928,14 @@ public static class BenefitBalance extends BackboneElement { private BenefitBalance(Builder builder) { super(builder); - category = ValidationSupport.requireNonNull(builder.category, "category"); + category = builder.category; excluded = builder.excluded; name = builder.name; description = builder.description; network = builder.network; unit = builder.unit; term = builder.term; - financial = Collections.unmodifiableList(ValidationSupport.checkList(builder.financial, "financial", Financial.class)); - ValidationSupport.requireValueOrChildren(this); + financial = Collections.unmodifiableList(builder.financial); } /** @@ -12127,7 +12374,18 @@ public Builder financial(Collection financial) { */ @Override public BenefitBalance build() { - return new BenefitBalance(this); + BenefitBalance benefitBalance = new BenefitBalance(this); + if (validating) { + validate(benefitBalance); + } + return benefitBalance; + } + + protected void validate(BenefitBalance benefitBalance) { + super.validate(benefitBalance); + ValidationSupport.requireNonNull(benefitBalance.category, "category"); + ValidationSupport.checkList(benefitBalance.financial, "financial", Financial.class); + ValidationSupport.requireValueOrChildren(benefitBalance); } protected Builder from(BenefitBalance benefitBalance) { @@ -12163,10 +12421,9 @@ public static class Financial extends BackboneElement { private Financial(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); - allowed = ValidationSupport.choiceElement(builder.allowed, "allowed", UnsignedInt.class, String.class, Money.class); - used = ValidationSupport.choiceElement(builder.used, "used", UnsignedInt.class, Money.class); - ValidationSupport.requireValueOrChildren(this); + type = builder.type; + allowed = builder.allowed; + used = builder.used; } /** @@ -12451,7 +12708,19 @@ public Builder used(Element used) { */ @Override public Financial build() { - return new Financial(this); + Financial financial = new Financial(this); + if (validating) { + validate(financial); + } + return financial; + } + + protected void validate(Financial financial) { + super.validate(financial); + ValidationSupport.requireNonNull(financial.type, "type"); + ValidationSupport.choiceElement(financial.allowed, "allowed", UnsignedInt.class, String.class, Money.class); + ValidationSupport.choiceElement(financial.used, "used", UnsignedInt.class, Money.class); + ValidationSupport.requireValueOrChildren(financial); } protected Builder from(Financial financial) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/FamilyMemberHistory.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/FamilyMemberHistory.java index 3c4b491ffc9..014142c38be 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/FamilyMemberHistory.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/FamilyMemberHistory.java @@ -153,26 +153,24 @@ public class FamilyMemberHistory extends DomainResource { private FamilyMemberHistory(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - instantiatesCanonical = Collections.unmodifiableList(ValidationSupport.checkList(builder.instantiatesCanonical, "instantiatesCanonical", Canonical.class)); - instantiatesUri = Collections.unmodifiableList(ValidationSupport.checkList(builder.instantiatesUri, "instantiatesUri", Uri.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + identifier = Collections.unmodifiableList(builder.identifier); + instantiatesCanonical = Collections.unmodifiableList(builder.instantiatesCanonical); + instantiatesUri = Collections.unmodifiableList(builder.instantiatesUri); + status = builder.status; dataAbsentReason = builder.dataAbsentReason; - patient = ValidationSupport.requireNonNull(builder.patient, "patient"); + patient = builder.patient; date = builder.date; name = builder.name; - relationship = ValidationSupport.requireNonNull(builder.relationship, "relationship"); + relationship = builder.relationship; sex = builder.sex; - born = ValidationSupport.choiceElement(builder.born, "born", Period.class, Date.class, String.class); - age = ValidationSupport.choiceElement(builder.age, "age", Age.class, Range.class, String.class); + born = builder.born; + age = builder.age; estimatedAge = builder.estimatedAge; - deceased = ValidationSupport.choiceElement(builder.deceased, "deceased", Boolean.class, Age.class, Range.class, Date.class, String.class); - reasonCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonCode, "reasonCode", CodeableConcept.class)); - reasonReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonReference, "reasonReference", Reference.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - condition = Collections.unmodifiableList(ValidationSupport.checkList(builder.condition, "condition", Condition.class)); - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(reasonReference, "reasonReference", "Condition", "Observation", "AllergyIntolerance", "QuestionnaireResponse", "DiagnosticReport", "DocumentReference"); + deceased = builder.deceased; + reasonCode = Collections.unmodifiableList(builder.reasonCode); + reasonReference = Collections.unmodifiableList(builder.reasonReference); + note = Collections.unmodifiableList(builder.note); + condition = Collections.unmodifiableList(builder.condition); } /** @@ -1206,7 +1204,30 @@ public Builder condition(Collection condition) { */ @Override public FamilyMemberHistory build() { - return new FamilyMemberHistory(this); + FamilyMemberHistory familyMemberHistory = new FamilyMemberHistory(this); + if (validating) { + validate(familyMemberHistory); + } + return familyMemberHistory; + } + + protected void validate(FamilyMemberHistory familyMemberHistory) { + super.validate(familyMemberHistory); + ValidationSupport.checkList(familyMemberHistory.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(familyMemberHistory.instantiatesCanonical, "instantiatesCanonical", Canonical.class); + ValidationSupport.checkList(familyMemberHistory.instantiatesUri, "instantiatesUri", Uri.class); + ValidationSupport.requireNonNull(familyMemberHistory.status, "status"); + ValidationSupport.requireNonNull(familyMemberHistory.patient, "patient"); + ValidationSupport.requireNonNull(familyMemberHistory.relationship, "relationship"); + ValidationSupport.choiceElement(familyMemberHistory.born, "born", Period.class, Date.class, String.class); + ValidationSupport.choiceElement(familyMemberHistory.age, "age", Age.class, Range.class, String.class); + ValidationSupport.choiceElement(familyMemberHistory.deceased, "deceased", Boolean.class, Age.class, Range.class, Date.class, String.class); + ValidationSupport.checkList(familyMemberHistory.reasonCode, "reasonCode", CodeableConcept.class); + ValidationSupport.checkList(familyMemberHistory.reasonReference, "reasonReference", Reference.class); + ValidationSupport.checkList(familyMemberHistory.note, "note", Annotation.class); + ValidationSupport.checkList(familyMemberHistory.condition, "condition", Condition.class); + ValidationSupport.checkReferenceType(familyMemberHistory.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(familyMemberHistory.reasonReference, "reasonReference", "Condition", "Observation", "AllergyIntolerance", "QuestionnaireResponse", "DiagnosticReport", "DocumentReference"); } protected Builder from(FamilyMemberHistory familyMemberHistory) { @@ -1261,12 +1282,11 @@ public static class Condition extends BackboneElement { private Condition(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); + code = builder.code; outcome = builder.outcome; contributedToDeath = builder.contributedToDeath; - onset = ValidationSupport.choiceElement(builder.onset, "onset", Age.class, Range.class, Period.class, String.class); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - ValidationSupport.requireValueOrChildren(this); + onset = builder.onset; + note = Collections.unmodifiableList(builder.note); } /** @@ -1632,7 +1652,19 @@ public Builder note(Collection note) { */ @Override public Condition build() { - return new Condition(this); + Condition condition = new Condition(this); + if (validating) { + validate(condition); + } + return condition; + } + + protected void validate(Condition condition) { + super.validate(condition); + ValidationSupport.requireNonNull(condition.code, "code"); + ValidationSupport.choiceElement(condition.onset, "onset", Age.class, Range.class, Period.class, String.class); + ValidationSupport.checkList(condition.note, "note", Annotation.class); + ValidationSupport.requireValueOrChildren(condition); } protected Builder from(Condition condition) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Flag.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Flag.java index 726ed938b7a..8b06dc80f35 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Flag.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Flag.java @@ -88,17 +88,14 @@ public class Flag extends DomainResource { private Flag(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", CodeableConcept.class)); - code = ValidationSupport.requireNonNull(builder.code, "code"); - subject = ValidationSupport.requireNonNull(builder.subject, "subject"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; + category = Collections.unmodifiableList(builder.category); + code = builder.code; + subject = builder.subject; period = builder.period; encounter = builder.encounter; author = builder.author; - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Location", "Group", "Organization", "Practitioner", "PlanDefinition", "Medication", "Procedure"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(author, "author", "Device", "Organization", "Patient", "Practitioner", "PractitionerRole"); } /** @@ -705,7 +702,23 @@ public Builder author(Reference author) { */ @Override public Flag build() { - return new Flag(this); + Flag flag = new Flag(this); + if (validating) { + validate(flag); + } + return flag; + } + + protected void validate(Flag flag) { + super.validate(flag); + ValidationSupport.checkList(flag.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(flag.status, "status"); + ValidationSupport.checkList(flag.category, "category", CodeableConcept.class); + ValidationSupport.requireNonNull(flag.code, "code"); + ValidationSupport.requireNonNull(flag.subject, "subject"); + ValidationSupport.checkReferenceType(flag.subject, "subject", "Patient", "Location", "Group", "Organization", "Practitioner", "PlanDefinition", "Medication", "Procedure"); + ValidationSupport.checkReferenceType(flag.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(flag.author, "author", "Device", "Organization", "Patient", "Practitioner", "PractitionerRole"); } protected Builder from(Flag flag) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Goal.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Goal.java index af5b599b893..4691bb8a663 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Goal.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Goal.java @@ -159,26 +159,22 @@ public class Goal extends DomainResource { private Goal(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - lifecycleStatus = ValidationSupport.requireNonNull(builder.lifecycleStatus, "lifecycleStatus"); + identifier = Collections.unmodifiableList(builder.identifier); + lifecycleStatus = builder.lifecycleStatus; achievementStatus = builder.achievementStatus; - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", CodeableConcept.class)); + category = Collections.unmodifiableList(builder.category); priority = builder.priority; - description = ValidationSupport.requireNonNull(builder.description, "description"); - subject = ValidationSupport.requireNonNull(builder.subject, "subject"); - start = ValidationSupport.choiceElement(builder.start, "start", Date.class, CodeableConcept.class); - target = Collections.unmodifiableList(ValidationSupport.checkList(builder.target, "target", Target.class)); + description = builder.description; + subject = builder.subject; + start = builder.start; + target = Collections.unmodifiableList(builder.target); statusDate = builder.statusDate; statusReason = builder.statusReason; expressedBy = builder.expressedBy; - addresses = Collections.unmodifiableList(ValidationSupport.checkList(builder.addresses, "addresses", Reference.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - outcomeCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.outcomeCode, "outcomeCode", CodeableConcept.class)); - outcomeReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.outcomeReference, "outcomeReference", Reference.class)); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group", "Organization"); - ValidationSupport.checkReferenceType(expressedBy, "expressedBy", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson"); - ValidationSupport.checkReferenceType(addresses, "addresses", "Condition", "Observation", "MedicationStatement", "NutritionOrder", "ServiceRequest", "RiskAssessment"); - ValidationSupport.checkReferenceType(outcomeReference, "outcomeReference", "Observation"); + addresses = Collections.unmodifiableList(builder.addresses); + note = Collections.unmodifiableList(builder.note); + outcomeCode = Collections.unmodifiableList(builder.outcomeCode); + outcomeReference = Collections.unmodifiableList(builder.outcomeReference); } /** @@ -1139,7 +1135,30 @@ public Builder outcomeReference(Collection outcomeReference) { */ @Override public Goal build() { - return new Goal(this); + Goal goal = new Goal(this); + if (validating) { + validate(goal); + } + return goal; + } + + protected void validate(Goal goal) { + super.validate(goal); + ValidationSupport.checkList(goal.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(goal.lifecycleStatus, "lifecycleStatus"); + ValidationSupport.checkList(goal.category, "category", CodeableConcept.class); + ValidationSupport.requireNonNull(goal.description, "description"); + ValidationSupport.requireNonNull(goal.subject, "subject"); + ValidationSupport.choiceElement(goal.start, "start", Date.class, CodeableConcept.class); + ValidationSupport.checkList(goal.target, "target", Target.class); + ValidationSupport.checkList(goal.addresses, "addresses", Reference.class); + ValidationSupport.checkList(goal.note, "note", Annotation.class); + ValidationSupport.checkList(goal.outcomeCode, "outcomeCode", CodeableConcept.class); + ValidationSupport.checkList(goal.outcomeReference, "outcomeReference", Reference.class); + ValidationSupport.checkReferenceType(goal.subject, "subject", "Patient", "Group", "Organization"); + ValidationSupport.checkReferenceType(goal.expressedBy, "expressedBy", "Patient", "Practitioner", "PractitionerRole", "RelatedPerson"); + ValidationSupport.checkReferenceType(goal.addresses, "addresses", "Condition", "Observation", "MedicationStatement", "NutritionOrder", "ServiceRequest", "RiskAssessment"); + ValidationSupport.checkReferenceType(goal.outcomeReference, "outcomeReference", "Observation"); } protected Builder from(Goal goal) { @@ -1191,9 +1210,8 @@ public static class Target extends BackboneElement { private Target(Builder builder) { super(builder); measure = builder.measure; - detail = ValidationSupport.choiceElement(builder.detail, "detail", Quantity.class, Range.class, CodeableConcept.class, String.class, Boolean.class, Integer.class, Ratio.class); - due = ValidationSupport.choiceElement(builder.due, "due", Date.class, Duration.class); - ValidationSupport.requireValueOrChildren(this); + detail = builder.detail; + due = builder.due; } /** @@ -1481,7 +1499,18 @@ public Builder due(Element due) { */ @Override public Target build() { - return new Target(this); + Target target = new Target(this); + if (validating) { + validate(target); + } + return target; + } + + protected void validate(Target target) { + super.validate(target); + ValidationSupport.choiceElement(target.detail, "detail", Quantity.class, Range.class, CodeableConcept.class, String.class, Boolean.class, Integer.class, Ratio.class); + ValidationSupport.choiceElement(target.due, "due", Date.class, Duration.class); + ValidationSupport.requireValueOrChildren(target); } protected Builder from(Target target) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/GraphDefinition.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/GraphDefinition.java index 12059ea8164..289af89c87a 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/GraphDefinition.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/GraphDefinition.java @@ -123,19 +123,19 @@ private GraphDefinition(Builder builder) { super(builder); url = builder.url; version = builder.version; - name = ValidationSupport.requireNonNull(builder.name, "name"); - status = ValidationSupport.requireNonNull(builder.status, "status"); + name = builder.name; + status = builder.status; experimental = builder.experimental; date = builder.date; publisher = builder.publisher; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactDetail.class)); + contact = Collections.unmodifiableList(builder.contact); description = builder.description; - useContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.useContext, "useContext", UsageContext.class)); - jurisdiction = Collections.unmodifiableList(ValidationSupport.checkList(builder.jurisdiction, "jurisdiction", CodeableConcept.class)); + useContext = Collections.unmodifiableList(builder.useContext); + jurisdiction = Collections.unmodifiableList(builder.jurisdiction); purpose = builder.purpose; - start = ValidationSupport.requireNonNull(builder.start, "start"); + start = builder.start; profile = builder.profile; - link = Collections.unmodifiableList(ValidationSupport.checkList(builder.link, "link", Link.class)); + link = Collections.unmodifiableList(builder.link); } /** @@ -977,7 +977,22 @@ public Builder link(Collection link) { */ @Override public GraphDefinition build() { - return new GraphDefinition(this); + GraphDefinition graphDefinition = new GraphDefinition(this); + if (validating) { + validate(graphDefinition); + } + return graphDefinition; + } + + protected void validate(GraphDefinition graphDefinition) { + super.validate(graphDefinition); + ValidationSupport.requireNonNull(graphDefinition.name, "name"); + ValidationSupport.requireNonNull(graphDefinition.status, "status"); + ValidationSupport.checkList(graphDefinition.contact, "contact", ContactDetail.class); + ValidationSupport.checkList(graphDefinition.useContext, "useContext", UsageContext.class); + ValidationSupport.checkList(graphDefinition.jurisdiction, "jurisdiction", CodeableConcept.class); + ValidationSupport.requireNonNull(graphDefinition.start, "start"); + ValidationSupport.checkList(graphDefinition.link, "link", Link.class); } protected Builder from(GraphDefinition graphDefinition) { @@ -1019,8 +1034,7 @@ private Link(Builder builder) { min = builder.min; max = builder.max; description = builder.description; - target = Collections.unmodifiableList(ValidationSupport.checkList(builder.target, "target", Target.class)); - ValidationSupport.requireValueOrChildren(this); + target = Collections.unmodifiableList(builder.target); } /** @@ -1392,7 +1406,17 @@ public Builder target(Collection target) { */ @Override public Link build() { - return new Link(this); + Link link = new Link(this); + if (validating) { + validate(link); + } + return link; + } + + protected void validate(Link link) { + super.validate(link); + ValidationSupport.checkList(link.target, "target", Target.class); + ValidationSupport.requireValueOrChildren(link); } protected Builder from(Link link) { @@ -1426,12 +1450,11 @@ public static class Target extends BackboneElement { private Target(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); + type = builder.type; params = builder.params; profile = builder.profile; - compartment = Collections.unmodifiableList(ValidationSupport.checkList(builder.compartment, "compartment", Compartment.class)); - link = Collections.unmodifiableList(ValidationSupport.checkList(builder.link, "link", GraphDefinition.Link.class)); - ValidationSupport.requireValueOrChildren(this); + compartment = Collections.unmodifiableList(builder.compartment); + link = Collections.unmodifiableList(builder.link); } /** @@ -1801,7 +1824,19 @@ public Builder link(Collection link) { */ @Override public Target build() { - return new Target(this); + Target target = new Target(this); + if (validating) { + validate(target); + } + return target; + } + + protected void validate(Target target) { + super.validate(target); + ValidationSupport.requireNonNull(target.type, "type"); + ValidationSupport.checkList(target.compartment, "compartment", Compartment.class); + ValidationSupport.checkList(target.link, "link", GraphDefinition.Link.class); + ValidationSupport.requireValueOrChildren(target); } protected Builder from(Target target) { @@ -1848,12 +1883,11 @@ public static class Compartment extends BackboneElement { private Compartment(Builder builder) { super(builder); - use = ValidationSupport.requireNonNull(builder.use, "use"); - code = ValidationSupport.requireNonNull(builder.code, "code"); - rule = ValidationSupport.requireNonNull(builder.rule, "rule"); + use = builder.use; + code = builder.code; + rule = builder.rule; expression = builder.expression; description = builder.description; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2191,7 +2225,19 @@ public Builder description(String description) { */ @Override public Compartment build() { - return new Compartment(this); + Compartment compartment = new Compartment(this); + if (validating) { + validate(compartment); + } + return compartment; + } + + protected void validate(Compartment compartment) { + super.validate(compartment); + ValidationSupport.requireNonNull(compartment.use, "use"); + ValidationSupport.requireNonNull(compartment.code, "code"); + ValidationSupport.requireNonNull(compartment.rule, "rule"); + ValidationSupport.requireValueOrChildren(compartment); } protected Builder from(Compartment compartment) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Group.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Group.java index 4eb21729197..7a7211bb5cd 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Group.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Group.java @@ -98,17 +98,16 @@ public class Group extends DomainResource { private Group(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); active = builder.active; - type = ValidationSupport.requireNonNull(builder.type, "type"); - actual = ValidationSupport.requireNonNull(builder.actual, "actual"); + type = builder.type; + actual = builder.actual; code = builder.code; name = builder.name; quantity = builder.quantity; managingEntity = builder.managingEntity; - characteristic = Collections.unmodifiableList(ValidationSupport.checkList(builder.characteristic, "characteristic", Characteristic.class)); - member = Collections.unmodifiableList(ValidationSupport.checkList(builder.member, "member", Member.class)); - ValidationSupport.checkReferenceType(managingEntity, "managingEntity", "Organization", "RelatedPerson", "Practitioner", "PractitionerRole"); + characteristic = Collections.unmodifiableList(builder.characteristic); + member = Collections.unmodifiableList(builder.member); } /** @@ -766,7 +765,21 @@ public Builder member(Collection member) { */ @Override public Group build() { - return new Group(this); + Group group = new Group(this); + if (validating) { + validate(group); + } + return group; + } + + protected void validate(Group group) { + super.validate(group); + ValidationSupport.checkList(group.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(group.type, "type"); + ValidationSupport.requireNonNull(group.actual, "actual"); + ValidationSupport.checkList(group.characteristic, "characteristic", Characteristic.class); + ValidationSupport.checkList(group.member, "member", Member.class); + ValidationSupport.checkReferenceType(group.managingEntity, "managingEntity", "Organization", "RelatedPerson", "Practitioner", "PractitionerRole"); } protected Builder from(Group group) { @@ -810,11 +823,10 @@ public static class Characteristic extends BackboneElement { private Characteristic(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); - value = ValidationSupport.requireChoiceElement(builder.value, "value", CodeableConcept.class, Boolean.class, Quantity.class, Range.class, Reference.class); - exclude = ValidationSupport.requireNonNull(builder.exclude, "exclude"); + code = builder.code; + value = builder.value; + exclude = builder.exclude; period = builder.period; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1130,7 +1142,19 @@ public Builder period(Period period) { */ @Override public Characteristic build() { - return new Characteristic(this); + Characteristic characteristic = new Characteristic(this); + if (validating) { + validate(characteristic); + } + return characteristic; + } + + protected void validate(Characteristic characteristic) { + super.validate(characteristic); + ValidationSupport.requireNonNull(characteristic.code, "code"); + ValidationSupport.requireChoiceElement(characteristic.value, "value", CodeableConcept.class, Boolean.class, Quantity.class, Range.class, Reference.class); + ValidationSupport.requireNonNull(characteristic.exclude, "exclude"); + ValidationSupport.requireValueOrChildren(characteristic); } protected Builder from(Characteristic characteristic) { @@ -1156,11 +1180,9 @@ public static class Member extends BackboneElement { private Member(Builder builder) { super(builder); - entity = ValidationSupport.requireNonNull(builder.entity, "entity"); + entity = builder.entity; period = builder.period; inactive = builder.inactive; - ValidationSupport.checkReferenceType(entity, "entity", "Patient", "Practitioner", "PractitionerRole", "Device", "Medication", "Substance", "Group"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -1445,7 +1467,18 @@ public Builder inactive(Boolean inactive) { */ @Override public Member build() { - return new Member(this); + Member member = new Member(this); + if (validating) { + validate(member); + } + return member; + } + + protected void validate(Member member) { + super.validate(member); + ValidationSupport.requireNonNull(member.entity, "entity"); + ValidationSupport.checkReferenceType(member.entity, "entity", "Patient", "Practitioner", "PractitionerRole", "Device", "Medication", "Substance", "Group"); + ValidationSupport.requireValueOrChildren(member); } protected Builder from(Member member) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/GuidanceResponse.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/GuidanceResponse.java index 3cf4452c439..a4cd9aff1d0 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/GuidanceResponse.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/GuidanceResponse.java @@ -90,27 +90,20 @@ public class GuidanceResponse extends DomainResource { private GuidanceResponse(Builder builder) { super(builder); requestIdentifier = builder.requestIdentifier; - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - module = ValidationSupport.requireChoiceElement(builder.module, "module", Uri.class, Canonical.class, CodeableConcept.class); - status = ValidationSupport.requireNonNull(builder.status, "status"); + identifier = Collections.unmodifiableList(builder.identifier); + module = builder.module; + status = builder.status; subject = builder.subject; encounter = builder.encounter; occurrenceDateTime = builder.occurrenceDateTime; performer = builder.performer; - reasonCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonCode, "reasonCode", CodeableConcept.class)); - reasonReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonReference, "reasonReference", Reference.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - evaluationMessage = Collections.unmodifiableList(ValidationSupport.checkList(builder.evaluationMessage, "evaluationMessage", Reference.class)); + reasonCode = Collections.unmodifiableList(builder.reasonCode); + reasonReference = Collections.unmodifiableList(builder.reasonReference); + note = Collections.unmodifiableList(builder.note); + evaluationMessage = Collections.unmodifiableList(builder.evaluationMessage); outputParameters = builder.outputParameters; result = builder.result; - dataRequirement = Collections.unmodifiableList(ValidationSupport.checkList(builder.dataRequirement, "dataRequirement", DataRequirement.class)); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Group"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(performer, "performer", "Device"); - ValidationSupport.checkReferenceType(reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference"); - ValidationSupport.checkReferenceType(evaluationMessage, "evaluationMessage", "OperationOutcome"); - ValidationSupport.checkReferenceType(outputParameters, "outputParameters", "Parameters"); - ValidationSupport.checkReferenceType(result, "result", "CarePlan", "RequestGroup"); + dataRequirement = Collections.unmodifiableList(builder.dataRequirement); } /** @@ -1054,7 +1047,30 @@ public Builder dataRequirement(Collection dataRequirement) { */ @Override public GuidanceResponse build() { - return new GuidanceResponse(this); + GuidanceResponse guidanceResponse = new GuidanceResponse(this); + if (validating) { + validate(guidanceResponse); + } + return guidanceResponse; + } + + protected void validate(GuidanceResponse guidanceResponse) { + super.validate(guidanceResponse); + ValidationSupport.checkList(guidanceResponse.identifier, "identifier", Identifier.class); + ValidationSupport.requireChoiceElement(guidanceResponse.module, "module", Uri.class, Canonical.class, CodeableConcept.class); + ValidationSupport.requireNonNull(guidanceResponse.status, "status"); + ValidationSupport.checkList(guidanceResponse.reasonCode, "reasonCode", CodeableConcept.class); + ValidationSupport.checkList(guidanceResponse.reasonReference, "reasonReference", Reference.class); + ValidationSupport.checkList(guidanceResponse.note, "note", Annotation.class); + ValidationSupport.checkList(guidanceResponse.evaluationMessage, "evaluationMessage", Reference.class); + ValidationSupport.checkList(guidanceResponse.dataRequirement, "dataRequirement", DataRequirement.class); + ValidationSupport.checkReferenceType(guidanceResponse.subject, "subject", "Patient", "Group"); + ValidationSupport.checkReferenceType(guidanceResponse.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(guidanceResponse.performer, "performer", "Device"); + ValidationSupport.checkReferenceType(guidanceResponse.reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport", "DocumentReference"); + ValidationSupport.checkReferenceType(guidanceResponse.evaluationMessage, "evaluationMessage", "OperationOutcome"); + ValidationSupport.checkReferenceType(guidanceResponse.outputParameters, "outputParameters", "Parameters"); + ValidationSupport.checkReferenceType(guidanceResponse.result, "result", "CarePlan", "RequestGroup"); } protected Builder from(GuidanceResponse guidanceResponse) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/HealthcareService.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/HealthcareService.java index 9973c2b89c7..9eb294f7d69 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/HealthcareService.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/HealthcareService.java @@ -158,35 +158,30 @@ public class HealthcareService extends DomainResource { private HealthcareService(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); + identifier = Collections.unmodifiableList(builder.identifier); active = builder.active; providedBy = builder.providedBy; - category = Collections.unmodifiableList(ValidationSupport.checkList(builder.category, "category", CodeableConcept.class)); - type = Collections.unmodifiableList(ValidationSupport.checkList(builder.type, "type", CodeableConcept.class)); - specialty = Collections.unmodifiableList(ValidationSupport.checkList(builder.specialty, "specialty", CodeableConcept.class)); - location = Collections.unmodifiableList(ValidationSupport.checkList(builder.location, "location", Reference.class)); + category = Collections.unmodifiableList(builder.category); + type = Collections.unmodifiableList(builder.type); + specialty = Collections.unmodifiableList(builder.specialty); + location = Collections.unmodifiableList(builder.location); name = builder.name; comment = builder.comment; extraDetails = builder.extraDetails; photo = builder.photo; - telecom = Collections.unmodifiableList(ValidationSupport.checkList(builder.telecom, "telecom", ContactPoint.class)); - coverageArea = Collections.unmodifiableList(ValidationSupport.checkList(builder.coverageArea, "coverageArea", Reference.class)); - serviceProvisionCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.serviceProvisionCode, "serviceProvisionCode", CodeableConcept.class)); - eligibility = Collections.unmodifiableList(ValidationSupport.checkList(builder.eligibility, "eligibility", Eligibility.class)); - program = Collections.unmodifiableList(ValidationSupport.checkList(builder.program, "program", CodeableConcept.class)); - characteristic = Collections.unmodifiableList(ValidationSupport.checkList(builder.characteristic, "characteristic", CodeableConcept.class)); - communication = Collections.unmodifiableList(ValidationSupport.checkList(builder.communication, "communication", CodeableConcept.class)); - referralMethod = Collections.unmodifiableList(ValidationSupport.checkList(builder.referralMethod, "referralMethod", CodeableConcept.class)); + telecom = Collections.unmodifiableList(builder.telecom); + coverageArea = Collections.unmodifiableList(builder.coverageArea); + serviceProvisionCode = Collections.unmodifiableList(builder.serviceProvisionCode); + eligibility = Collections.unmodifiableList(builder.eligibility); + program = Collections.unmodifiableList(builder.program); + characteristic = Collections.unmodifiableList(builder.characteristic); + communication = Collections.unmodifiableList(builder.communication); + referralMethod = Collections.unmodifiableList(builder.referralMethod); appointmentRequired = builder.appointmentRequired; - availableTime = Collections.unmodifiableList(ValidationSupport.checkList(builder.availableTime, "availableTime", AvailableTime.class)); - notAvailable = Collections.unmodifiableList(ValidationSupport.checkList(builder.notAvailable, "notAvailable", NotAvailable.class)); + availableTime = Collections.unmodifiableList(builder.availableTime); + notAvailable = Collections.unmodifiableList(builder.notAvailable); availabilityExceptions = builder.availabilityExceptions; - endpoint = Collections.unmodifiableList(ValidationSupport.checkList(builder.endpoint, "endpoint", Reference.class)); - ValidationSupport.checkValueSetBinding(communication, "communication", "http://hl7.org/fhir/ValueSet/all-languages", "urn:ietf:bcp:47"); - ValidationSupport.checkReferenceType(providedBy, "providedBy", "Organization"); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.checkReferenceType(coverageArea, "coverageArea", "Location"); - ValidationSupport.checkReferenceType(endpoint, "endpoint", "Endpoint"); + endpoint = Collections.unmodifiableList(builder.endpoint); } /** @@ -1544,7 +1539,36 @@ public Builder endpoint(Collection endpoint) { */ @Override public HealthcareService build() { - return new HealthcareService(this); + HealthcareService healthcareService = new HealthcareService(this); + if (validating) { + validate(healthcareService); + } + return healthcareService; + } + + protected void validate(HealthcareService healthcareService) { + super.validate(healthcareService); + ValidationSupport.checkList(healthcareService.identifier, "identifier", Identifier.class); + ValidationSupport.checkList(healthcareService.category, "category", CodeableConcept.class); + ValidationSupport.checkList(healthcareService.type, "type", CodeableConcept.class); + ValidationSupport.checkList(healthcareService.specialty, "specialty", CodeableConcept.class); + ValidationSupport.checkList(healthcareService.location, "location", Reference.class); + ValidationSupport.checkList(healthcareService.telecom, "telecom", ContactPoint.class); + ValidationSupport.checkList(healthcareService.coverageArea, "coverageArea", Reference.class); + ValidationSupport.checkList(healthcareService.serviceProvisionCode, "serviceProvisionCode", CodeableConcept.class); + ValidationSupport.checkList(healthcareService.eligibility, "eligibility", Eligibility.class); + ValidationSupport.checkList(healthcareService.program, "program", CodeableConcept.class); + ValidationSupport.checkList(healthcareService.characteristic, "characteristic", CodeableConcept.class); + ValidationSupport.checkList(healthcareService.communication, "communication", CodeableConcept.class); + ValidationSupport.checkList(healthcareService.referralMethod, "referralMethod", CodeableConcept.class); + ValidationSupport.checkList(healthcareService.availableTime, "availableTime", AvailableTime.class); + ValidationSupport.checkList(healthcareService.notAvailable, "notAvailable", NotAvailable.class); + ValidationSupport.checkList(healthcareService.endpoint, "endpoint", Reference.class); + ValidationSupport.checkValueSetBinding(healthcareService.communication, "communication", "http://hl7.org/fhir/ValueSet/all-languages", "urn:ietf:bcp:47"); + ValidationSupport.checkReferenceType(healthcareService.providedBy, "providedBy", "Organization"); + ValidationSupport.checkReferenceType(healthcareService.location, "location", "Location"); + ValidationSupport.checkReferenceType(healthcareService.coverageArea, "coverageArea", "Location"); + ValidationSupport.checkReferenceType(healthcareService.endpoint, "endpoint", "Endpoint"); } protected Builder from(HealthcareService healthcareService) { @@ -1593,7 +1617,6 @@ private Eligibility(Builder builder) { super(builder); code = builder.code; comment = builder.comment; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1829,7 +1852,16 @@ public Builder comment(Markdown comment) { */ @Override public Eligibility build() { - return new Eligibility(this); + Eligibility eligibility = new Eligibility(this); + if (validating) { + validate(eligibility); + } + return eligibility; + } + + protected void validate(Eligibility eligibility) { + super.validate(eligibility); + ValidationSupport.requireValueOrChildren(eligibility); } protected Builder from(Eligibility eligibility) { @@ -1858,11 +1890,10 @@ public static class AvailableTime extends BackboneElement { private AvailableTime(Builder builder) { super(builder); - daysOfWeek = Collections.unmodifiableList(ValidationSupport.checkList(builder.daysOfWeek, "daysOfWeek", DaysOfWeek.class)); + daysOfWeek = Collections.unmodifiableList(builder.daysOfWeek); allDay = builder.allDay; availableStartTime = builder.availableStartTime; availableEndTime = builder.availableEndTime; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2176,7 +2207,17 @@ public Builder availableEndTime(Time availableEndTime) { */ @Override public AvailableTime build() { - return new AvailableTime(this); + AvailableTime availableTime = new AvailableTime(this); + if (validating) { + validate(availableTime); + } + return availableTime; + } + + protected void validate(AvailableTime availableTime) { + super.validate(availableTime); + ValidationSupport.checkList(availableTime.daysOfWeek, "daysOfWeek", DaysOfWeek.class); + ValidationSupport.requireValueOrChildren(availableTime); } protected Builder from(AvailableTime availableTime) { @@ -2200,9 +2241,8 @@ public static class NotAvailable extends BackboneElement { private NotAvailable(Builder builder) { super(builder); - description = ValidationSupport.requireNonNull(builder.description, "description"); + description = builder.description; during = builder.during; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2445,7 +2485,17 @@ public Builder during(Period during) { */ @Override public NotAvailable build() { - return new NotAvailable(this); + NotAvailable notAvailable = new NotAvailable(this); + if (validating) { + validate(notAvailable); + } + return notAvailable; + } + + protected void validate(NotAvailable notAvailable) { + super.validate(notAvailable); + ValidationSupport.requireNonNull(notAvailable.description, "description"); + ValidationSupport.requireValueOrChildren(notAvailable); } protected Builder from(NotAvailable notAvailable) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImagingStudy.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImagingStudy.java index cb0ea239744..a3b2a236cf2 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImagingStudy.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImagingStudy.java @@ -173,35 +173,26 @@ public class ImagingStudy extends DomainResource { private ImagingStudy(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - modality = Collections.unmodifiableList(ValidationSupport.checkList(builder.modality, "modality", Coding.class)); - subject = ValidationSupport.requireNonNull(builder.subject, "subject"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; + modality = Collections.unmodifiableList(builder.modality); + subject = builder.subject; encounter = builder.encounter; started = builder.started; - basedOn = Collections.unmodifiableList(ValidationSupport.checkList(builder.basedOn, "basedOn", Reference.class)); + basedOn = Collections.unmodifiableList(builder.basedOn); referrer = builder.referrer; - interpreter = Collections.unmodifiableList(ValidationSupport.checkList(builder.interpreter, "interpreter", Reference.class)); - endpoint = Collections.unmodifiableList(ValidationSupport.checkList(builder.endpoint, "endpoint", Reference.class)); + interpreter = Collections.unmodifiableList(builder.interpreter); + endpoint = Collections.unmodifiableList(builder.endpoint); numberOfSeries = builder.numberOfSeries; numberOfInstances = builder.numberOfInstances; procedureReference = builder.procedureReference; - procedureCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.procedureCode, "procedureCode", CodeableConcept.class)); + procedureCode = Collections.unmodifiableList(builder.procedureCode); location = builder.location; - reasonCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonCode, "reasonCode", CodeableConcept.class)); - reasonReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonReference, "reasonReference", Reference.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); + reasonCode = Collections.unmodifiableList(builder.reasonCode); + reasonReference = Collections.unmodifiableList(builder.reasonReference); + note = Collections.unmodifiableList(builder.note); description = builder.description; - series = Collections.unmodifiableList(ValidationSupport.checkList(builder.series, "series", Series.class)); - ValidationSupport.checkReferenceType(subject, "subject", "Patient", "Device", "Group"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(basedOn, "basedOn", "CarePlan", "ServiceRequest", "Appointment", "AppointmentResponse", "Task"); - ValidationSupport.checkReferenceType(referrer, "referrer", "Practitioner", "PractitionerRole"); - ValidationSupport.checkReferenceType(interpreter, "interpreter", "Practitioner", "PractitionerRole"); - ValidationSupport.checkReferenceType(endpoint, "endpoint", "Endpoint"); - ValidationSupport.checkReferenceType(procedureReference, "procedureReference", "Procedure"); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.checkReferenceType(reasonReference, "reasonReference", "Condition", "Observation", "Media", "DiagnosticReport", "DocumentReference"); + series = Collections.unmodifiableList(builder.series); } /** @@ -1390,7 +1381,36 @@ public Builder series(Collection series) { */ @Override public ImagingStudy build() { - return new ImagingStudy(this); + ImagingStudy imagingStudy = new ImagingStudy(this); + if (validating) { + validate(imagingStudy); + } + return imagingStudy; + } + + protected void validate(ImagingStudy imagingStudy) { + super.validate(imagingStudy); + ValidationSupport.checkList(imagingStudy.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(imagingStudy.status, "status"); + ValidationSupport.checkList(imagingStudy.modality, "modality", Coding.class); + ValidationSupport.requireNonNull(imagingStudy.subject, "subject"); + ValidationSupport.checkList(imagingStudy.basedOn, "basedOn", Reference.class); + ValidationSupport.checkList(imagingStudy.interpreter, "interpreter", Reference.class); + ValidationSupport.checkList(imagingStudy.endpoint, "endpoint", Reference.class); + ValidationSupport.checkList(imagingStudy.procedureCode, "procedureCode", CodeableConcept.class); + ValidationSupport.checkList(imagingStudy.reasonCode, "reasonCode", CodeableConcept.class); + ValidationSupport.checkList(imagingStudy.reasonReference, "reasonReference", Reference.class); + ValidationSupport.checkList(imagingStudy.note, "note", Annotation.class); + ValidationSupport.checkList(imagingStudy.series, "series", Series.class); + ValidationSupport.checkReferenceType(imagingStudy.subject, "subject", "Patient", "Device", "Group"); + ValidationSupport.checkReferenceType(imagingStudy.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(imagingStudy.basedOn, "basedOn", "CarePlan", "ServiceRequest", "Appointment", "AppointmentResponse", "Task"); + ValidationSupport.checkReferenceType(imagingStudy.referrer, "referrer", "Practitioner", "PractitionerRole"); + ValidationSupport.checkReferenceType(imagingStudy.interpreter, "interpreter", "Practitioner", "PractitionerRole"); + ValidationSupport.checkReferenceType(imagingStudy.endpoint, "endpoint", "Endpoint"); + ValidationSupport.checkReferenceType(imagingStudy.procedureReference, "procedureReference", "Procedure"); + ValidationSupport.checkReferenceType(imagingStudy.location, "location", "Location"); + ValidationSupport.checkReferenceType(imagingStudy.reasonReference, "reasonReference", "Condition", "Observation", "Media", "DiagnosticReport", "DocumentReference"); } protected Builder from(ImagingStudy imagingStudy) { @@ -1471,21 +1491,18 @@ public static class Series extends BackboneElement { private Series(Builder builder) { super(builder); - uid = ValidationSupport.requireNonNull(builder.uid, "uid"); + uid = builder.uid; number = builder.number; - modality = ValidationSupport.requireNonNull(builder.modality, "modality"); + modality = builder.modality; description = builder.description; numberOfInstances = builder.numberOfInstances; - endpoint = Collections.unmodifiableList(ValidationSupport.checkList(builder.endpoint, "endpoint", Reference.class)); + endpoint = Collections.unmodifiableList(builder.endpoint); bodySite = builder.bodySite; laterality = builder.laterality; - specimen = Collections.unmodifiableList(ValidationSupport.checkList(builder.specimen, "specimen", Reference.class)); + specimen = Collections.unmodifiableList(builder.specimen); started = builder.started; - performer = Collections.unmodifiableList(ValidationSupport.checkList(builder.performer, "performer", Performer.class)); - instance = Collections.unmodifiableList(ValidationSupport.checkList(builder.instance, "instance", Instance.class)); - ValidationSupport.checkReferenceType(endpoint, "endpoint", "Endpoint"); - ValidationSupport.checkReferenceType(specimen, "specimen", "Specimen"); - ValidationSupport.requireValueOrChildren(this); + performer = Collections.unmodifiableList(builder.performer); + instance = Collections.unmodifiableList(builder.instance); } /** @@ -2139,7 +2156,24 @@ public Builder instance(Collection instance) { */ @Override public Series build() { - return new Series(this); + Series series = new Series(this); + if (validating) { + validate(series); + } + return series; + } + + protected void validate(Series series) { + super.validate(series); + ValidationSupport.requireNonNull(series.uid, "uid"); + ValidationSupport.requireNonNull(series.modality, "modality"); + ValidationSupport.checkList(series.endpoint, "endpoint", Reference.class); + ValidationSupport.checkList(series.specimen, "specimen", Reference.class); + ValidationSupport.checkList(series.performer, "performer", Performer.class); + ValidationSupport.checkList(series.instance, "instance", Instance.class); + ValidationSupport.checkReferenceType(series.endpoint, "endpoint", "Endpoint"); + ValidationSupport.checkReferenceType(series.specimen, "specimen", "Specimen"); + ValidationSupport.requireValueOrChildren(series); } protected Builder from(Series series) { @@ -2180,9 +2214,7 @@ public static class Performer extends BackboneElement { private Performer(Builder builder) { super(builder); function = builder.function; - actor = ValidationSupport.requireNonNull(builder.actor, "actor"); - ValidationSupport.checkReferenceType(actor, "actor", "Practitioner", "PractitionerRole", "Organization", "CareTeam", "Patient", "Device", "RelatedPerson"); - ValidationSupport.requireValueOrChildren(this); + actor = builder.actor; } /** @@ -2436,7 +2468,18 @@ public Builder actor(Reference actor) { */ @Override public Performer build() { - return new Performer(this); + Performer performer = new Performer(this); + if (validating) { + validate(performer); + } + return performer; + } + + protected void validate(Performer performer) { + super.validate(performer); + ValidationSupport.requireNonNull(performer.actor, "actor"); + ValidationSupport.checkReferenceType(performer.actor, "actor", "Practitioner", "PractitionerRole", "Organization", "CareTeam", "Patient", "Device", "RelatedPerson"); + ValidationSupport.requireValueOrChildren(performer); } protected Builder from(Performer performer) { @@ -2467,11 +2510,10 @@ public static class Instance extends BackboneElement { private Instance(Builder builder) { super(builder); - uid = ValidationSupport.requireNonNull(builder.uid, "uid"); - sopClass = ValidationSupport.requireNonNull(builder.sopClass, "sopClass"); + uid = builder.uid; + sopClass = builder.sopClass; number = builder.number; title = builder.title; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2775,7 +2817,18 @@ public Builder title(String title) { */ @Override public Instance build() { - return new Instance(this); + Instance instance = new Instance(this); + if (validating) { + validate(instance); + } + return instance; + } + + protected void validate(Instance instance) { + super.validate(instance); + ValidationSupport.requireNonNull(instance.uid, "uid"); + ValidationSupport.requireNonNull(instance.sopClass, "sopClass"); + ValidationSupport.requireValueOrChildren(instance); } protected Builder from(Instance instance) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Immunization.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Immunization.java index 288753da65c..82174b0a8b4 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/Immunization.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/Immunization.java @@ -180,13 +180,13 @@ public class Immunization extends DomainResource { private Immunization(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; statusReason = builder.statusReason; - vaccineCode = ValidationSupport.requireNonNull(builder.vaccineCode, "vaccineCode"); - patient = ValidationSupport.requireNonNull(builder.patient, "patient"); + vaccineCode = builder.vaccineCode; + patient = builder.patient; encounter = builder.encounter; - occurrence = ValidationSupport.requireChoiceElement(builder.occurrence, "occurrence", DateTime.class, String.class); + occurrence = builder.occurrence; recorded = builder.recorded; primarySource = builder.primarySource; reportOrigin = builder.reportOrigin; @@ -197,22 +197,17 @@ private Immunization(Builder builder) { site = builder.site; route = builder.route; doseQuantity = builder.doseQuantity; - performer = Collections.unmodifiableList(ValidationSupport.checkList(builder.performer, "performer", Performer.class)); - note = Collections.unmodifiableList(ValidationSupport.checkList(builder.note, "note", Annotation.class)); - reasonCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonCode, "reasonCode", CodeableConcept.class)); - reasonReference = Collections.unmodifiableList(ValidationSupport.checkList(builder.reasonReference, "reasonReference", Reference.class)); + performer = Collections.unmodifiableList(builder.performer); + note = Collections.unmodifiableList(builder.note); + reasonCode = Collections.unmodifiableList(builder.reasonCode); + reasonReference = Collections.unmodifiableList(builder.reasonReference); isSubpotent = builder.isSubpotent; - subpotentReason = Collections.unmodifiableList(ValidationSupport.checkList(builder.subpotentReason, "subpotentReason", CodeableConcept.class)); - education = Collections.unmodifiableList(ValidationSupport.checkList(builder.education, "education", Education.class)); - programEligibility = Collections.unmodifiableList(ValidationSupport.checkList(builder.programEligibility, "programEligibility", CodeableConcept.class)); + subpotentReason = Collections.unmodifiableList(builder.subpotentReason); + education = Collections.unmodifiableList(builder.education); + programEligibility = Collections.unmodifiableList(builder.programEligibility); fundingSource = builder.fundingSource; - reaction = Collections.unmodifiableList(ValidationSupport.checkList(builder.reaction, "reaction", Reaction.class)); - protocolApplied = Collections.unmodifiableList(ValidationSupport.checkList(builder.protocolApplied, "protocolApplied", ProtocolApplied.class)); - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(encounter, "encounter", "Encounter"); - ValidationSupport.checkReferenceType(location, "location", "Location"); - ValidationSupport.checkReferenceType(manufacturer, "manufacturer", "Organization"); - ValidationSupport.checkReferenceType(reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport"); + reaction = Collections.unmodifiableList(builder.reaction); + protocolApplied = Collections.unmodifiableList(builder.protocolApplied); } /** @@ -1580,7 +1575,34 @@ public Builder protocolApplied(Collection protocolApplied) { */ @Override public Immunization build() { - return new Immunization(this); + Immunization immunization = new Immunization(this); + if (validating) { + validate(immunization); + } + return immunization; + } + + protected void validate(Immunization immunization) { + super.validate(immunization); + ValidationSupport.checkList(immunization.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(immunization.status, "status"); + ValidationSupport.requireNonNull(immunization.vaccineCode, "vaccineCode"); + ValidationSupport.requireNonNull(immunization.patient, "patient"); + ValidationSupport.requireChoiceElement(immunization.occurrence, "occurrence", DateTime.class, String.class); + ValidationSupport.checkList(immunization.performer, "performer", Performer.class); + ValidationSupport.checkList(immunization.note, "note", Annotation.class); + ValidationSupport.checkList(immunization.reasonCode, "reasonCode", CodeableConcept.class); + ValidationSupport.checkList(immunization.reasonReference, "reasonReference", Reference.class); + ValidationSupport.checkList(immunization.subpotentReason, "subpotentReason", CodeableConcept.class); + ValidationSupport.checkList(immunization.education, "education", Education.class); + ValidationSupport.checkList(immunization.programEligibility, "programEligibility", CodeableConcept.class); + ValidationSupport.checkList(immunization.reaction, "reaction", Reaction.class); + ValidationSupport.checkList(immunization.protocolApplied, "protocolApplied", ProtocolApplied.class); + ValidationSupport.checkReferenceType(immunization.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(immunization.encounter, "encounter", "Encounter"); + ValidationSupport.checkReferenceType(immunization.location, "location", "Location"); + ValidationSupport.checkReferenceType(immunization.manufacturer, "manufacturer", "Organization"); + ValidationSupport.checkReferenceType(immunization.reasonReference, "reasonReference", "Condition", "Observation", "DiagnosticReport"); } protected Builder from(Immunization immunization) { @@ -1637,9 +1659,7 @@ public static class Performer extends BackboneElement { private Performer(Builder builder) { super(builder); function = builder.function; - actor = ValidationSupport.requireNonNull(builder.actor, "actor"); - ValidationSupport.checkReferenceType(actor, "actor", "Practitioner", "PractitionerRole", "Organization"); - ValidationSupport.requireValueOrChildren(this); + actor = builder.actor; } /** @@ -1889,7 +1909,18 @@ public Builder actor(Reference actor) { */ @Override public Performer build() { - return new Performer(this); + Performer performer = new Performer(this); + if (validating) { + validate(performer); + } + return performer; + } + + protected void validate(Performer performer) { + super.validate(performer); + ValidationSupport.requireNonNull(performer.actor, "actor"); + ValidationSupport.checkReferenceType(performer.actor, "actor", "Practitioner", "PractitionerRole", "Organization"); + ValidationSupport.requireValueOrChildren(performer); } protected Builder from(Performer performer) { @@ -1916,7 +1947,6 @@ private Education(Builder builder) { reference = builder.reference; publicationDate = builder.publicationDate; presentationDate = builder.presentationDate; - ValidationSupport.requireValueOrChildren(this); } /** @@ -2210,7 +2240,16 @@ public Builder presentationDate(DateTime presentationDate) { */ @Override public Education build() { - return new Education(this); + Education education = new Education(this); + if (validating) { + validate(education); + } + return education; + } + + protected void validate(Education education) { + super.validate(education); + ValidationSupport.requireValueOrChildren(education); } protected Builder from(Education education) { @@ -2238,8 +2277,6 @@ private Reaction(Builder builder) { date = builder.date; detail = builder.detail; reported = builder.reported; - ValidationSupport.checkReferenceType(detail, "detail", "Observation"); - ValidationSupport.requireValueOrChildren(this); } /** @@ -2509,7 +2546,17 @@ public Builder reported(Boolean reported) { */ @Override public Reaction build() { - return new Reaction(this); + Reaction reaction = new Reaction(this); + if (validating) { + validate(reaction); + } + return reaction; + } + + protected void validate(Reaction reaction) { + super.validate(reaction); + ValidationSupport.checkReferenceType(reaction.detail, "detail", "Observation"); + ValidationSupport.requireValueOrChildren(reaction); } protected Builder from(Reaction reaction) { @@ -2546,11 +2593,9 @@ private ProtocolApplied(Builder builder) { super(builder); series = builder.series; authority = builder.authority; - targetDisease = Collections.unmodifiableList(ValidationSupport.checkList(builder.targetDisease, "targetDisease", CodeableConcept.class)); - doseNumber = ValidationSupport.requireChoiceElement(builder.doseNumber, "doseNumber", PositiveInt.class, String.class); - seriesDoses = ValidationSupport.choiceElement(builder.seriesDoses, "seriesDoses", PositiveInt.class, String.class); - ValidationSupport.checkReferenceType(authority, "authority", "Organization"); - ValidationSupport.requireValueOrChildren(this); + targetDisease = Collections.unmodifiableList(builder.targetDisease); + doseNumber = builder.doseNumber; + seriesDoses = builder.seriesDoses; } /** @@ -2917,7 +2962,20 @@ public Builder seriesDoses(Element seriesDoses) { */ @Override public ProtocolApplied build() { - return new ProtocolApplied(this); + ProtocolApplied protocolApplied = new ProtocolApplied(this); + if (validating) { + validate(protocolApplied); + } + return protocolApplied; + } + + protected void validate(ProtocolApplied protocolApplied) { + super.validate(protocolApplied); + ValidationSupport.checkList(protocolApplied.targetDisease, "targetDisease", CodeableConcept.class); + ValidationSupport.requireChoiceElement(protocolApplied.doseNumber, "doseNumber", PositiveInt.class, String.class); + ValidationSupport.choiceElement(protocolApplied.seriesDoses, "seriesDoses", PositiveInt.class, String.class); + ValidationSupport.checkReferenceType(protocolApplied.authority, "authority", "Organization"); + ValidationSupport.requireValueOrChildren(protocolApplied); } protected Builder from(ProtocolApplied protocolApplied) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImmunizationEvaluation.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImmunizationEvaluation.java index e2420994da2..90a57326544 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImmunizationEvaluation.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImmunizationEvaluation.java @@ -105,22 +105,19 @@ public class ImmunizationEvaluation extends DomainResource { private ImmunizationEvaluation(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - status = ValidationSupport.requireNonNull(builder.status, "status"); - patient = ValidationSupport.requireNonNull(builder.patient, "patient"); + identifier = Collections.unmodifiableList(builder.identifier); + status = builder.status; + patient = builder.patient; date = builder.date; authority = builder.authority; - targetDisease = ValidationSupport.requireNonNull(builder.targetDisease, "targetDisease"); - immunizationEvent = ValidationSupport.requireNonNull(builder.immunizationEvent, "immunizationEvent"); - doseStatus = ValidationSupport.requireNonNull(builder.doseStatus, "doseStatus"); - doseStatusReason = Collections.unmodifiableList(ValidationSupport.checkList(builder.doseStatusReason, "doseStatusReason", CodeableConcept.class)); + targetDisease = builder.targetDisease; + immunizationEvent = builder.immunizationEvent; + doseStatus = builder.doseStatus; + doseStatusReason = Collections.unmodifiableList(builder.doseStatusReason); description = builder.description; series = builder.series; - doseNumber = ValidationSupport.choiceElement(builder.doseNumber, "doseNumber", PositiveInt.class, String.class); - seriesDoses = ValidationSupport.choiceElement(builder.seriesDoses, "seriesDoses", PositiveInt.class, String.class); - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(authority, "authority", "Organization"); - ValidationSupport.checkReferenceType(immunizationEvent, "immunizationEvent", "Immunization"); + doseNumber = builder.doseNumber; + seriesDoses = builder.seriesDoses; } /** @@ -874,7 +871,27 @@ public Builder seriesDoses(Element seriesDoses) { */ @Override public ImmunizationEvaluation build() { - return new ImmunizationEvaluation(this); + ImmunizationEvaluation immunizationEvaluation = new ImmunizationEvaluation(this); + if (validating) { + validate(immunizationEvaluation); + } + return immunizationEvaluation; + } + + protected void validate(ImmunizationEvaluation immunizationEvaluation) { + super.validate(immunizationEvaluation); + ValidationSupport.checkList(immunizationEvaluation.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(immunizationEvaluation.status, "status"); + ValidationSupport.requireNonNull(immunizationEvaluation.patient, "patient"); + ValidationSupport.requireNonNull(immunizationEvaluation.targetDisease, "targetDisease"); + ValidationSupport.requireNonNull(immunizationEvaluation.immunizationEvent, "immunizationEvent"); + ValidationSupport.requireNonNull(immunizationEvaluation.doseStatus, "doseStatus"); + ValidationSupport.checkList(immunizationEvaluation.doseStatusReason, "doseStatusReason", CodeableConcept.class); + ValidationSupport.choiceElement(immunizationEvaluation.doseNumber, "doseNumber", PositiveInt.class, String.class); + ValidationSupport.choiceElement(immunizationEvaluation.seriesDoses, "seriesDoses", PositiveInt.class, String.class); + ValidationSupport.checkReferenceType(immunizationEvaluation.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(immunizationEvaluation.authority, "authority", "Organization"); + ValidationSupport.checkReferenceType(immunizationEvaluation.immunizationEvent, "immunizationEvent", "Immunization"); } protected Builder from(ImmunizationEvaluation immunizationEvaluation) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImmunizationRecommendation.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImmunizationRecommendation.java index 5329a26efbf..45b74cce531 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImmunizationRecommendation.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImmunizationRecommendation.java @@ -75,13 +75,11 @@ public class ImmunizationRecommendation extends DomainResource { private ImmunizationRecommendation(Builder builder) { super(builder); - identifier = Collections.unmodifiableList(ValidationSupport.checkList(builder.identifier, "identifier", Identifier.class)); - patient = ValidationSupport.requireNonNull(builder.patient, "patient"); - date = ValidationSupport.requireNonNull(builder.date, "date"); + identifier = Collections.unmodifiableList(builder.identifier); + patient = builder.patient; + date = builder.date; authority = builder.authority; - recommendation = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.recommendation, "recommendation", Recommendation.class)); - ValidationSupport.checkReferenceType(patient, "patient", "Patient"); - ValidationSupport.checkReferenceType(authority, "authority", "Organization"); + recommendation = Collections.unmodifiableList(builder.recommendation); } /** @@ -579,7 +577,21 @@ public Builder recommendation(Collection recommendation) { */ @Override public ImmunizationRecommendation build() { - return new ImmunizationRecommendation(this); + ImmunizationRecommendation immunizationRecommendation = new ImmunizationRecommendation(this); + if (validating) { + validate(immunizationRecommendation); + } + return immunizationRecommendation; + } + + protected void validate(ImmunizationRecommendation immunizationRecommendation) { + super.validate(immunizationRecommendation); + ValidationSupport.checkList(immunizationRecommendation.identifier, "identifier", Identifier.class); + ValidationSupport.requireNonNull(immunizationRecommendation.patient, "patient"); + ValidationSupport.requireNonNull(immunizationRecommendation.date, "date"); + ValidationSupport.checkNonEmptyList(immunizationRecommendation.recommendation, "recommendation", Recommendation.class); + ValidationSupport.checkReferenceType(immunizationRecommendation.patient, "patient", "Patient"); + ValidationSupport.checkReferenceType(immunizationRecommendation.authority, "authority", "Organization"); } protected Builder from(ImmunizationRecommendation immunizationRecommendation) { @@ -652,20 +664,18 @@ public static class Recommendation extends BackboneElement { private Recommendation(Builder builder) { super(builder); - vaccineCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.vaccineCode, "vaccineCode", CodeableConcept.class)); + vaccineCode = Collections.unmodifiableList(builder.vaccineCode); targetDisease = builder.targetDisease; - contraindicatedVaccineCode = Collections.unmodifiableList(ValidationSupport.checkList(builder.contraindicatedVaccineCode, "contraindicatedVaccineCode", CodeableConcept.class)); - forecastStatus = ValidationSupport.requireNonNull(builder.forecastStatus, "forecastStatus"); - forecastReason = Collections.unmodifiableList(ValidationSupport.checkList(builder.forecastReason, "forecastReason", CodeableConcept.class)); - dateCriterion = Collections.unmodifiableList(ValidationSupport.checkList(builder.dateCriterion, "dateCriterion", DateCriterion.class)); + contraindicatedVaccineCode = Collections.unmodifiableList(builder.contraindicatedVaccineCode); + forecastStatus = builder.forecastStatus; + forecastReason = Collections.unmodifiableList(builder.forecastReason); + dateCriterion = Collections.unmodifiableList(builder.dateCriterion); description = builder.description; series = builder.series; - doseNumber = ValidationSupport.choiceElement(builder.doseNumber, "doseNumber", PositiveInt.class, String.class); - seriesDoses = ValidationSupport.choiceElement(builder.seriesDoses, "seriesDoses", PositiveInt.class, String.class); - supportingImmunization = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportingImmunization, "supportingImmunization", Reference.class)); - supportingPatientInformation = Collections.unmodifiableList(ValidationSupport.checkList(builder.supportingPatientInformation, "supportingPatientInformation", Reference.class)); - ValidationSupport.checkReferenceType(supportingImmunization, "supportingImmunization", "Immunization", "ImmunizationEvaluation"); - ValidationSupport.requireValueOrChildren(this); + doseNumber = builder.doseNumber; + seriesDoses = builder.seriesDoses; + supportingImmunization = Collections.unmodifiableList(builder.supportingImmunization); + supportingPatientInformation = Collections.unmodifiableList(builder.supportingPatientInformation); } /** @@ -1345,7 +1355,26 @@ public Builder supportingPatientInformation(Collection supportingPati */ @Override public Recommendation build() { - return new Recommendation(this); + Recommendation recommendation = new Recommendation(this); + if (validating) { + validate(recommendation); + } + return recommendation; + } + + protected void validate(Recommendation recommendation) { + super.validate(recommendation); + ValidationSupport.checkList(recommendation.vaccineCode, "vaccineCode", CodeableConcept.class); + ValidationSupport.checkList(recommendation.contraindicatedVaccineCode, "contraindicatedVaccineCode", CodeableConcept.class); + ValidationSupport.requireNonNull(recommendation.forecastStatus, "forecastStatus"); + ValidationSupport.checkList(recommendation.forecastReason, "forecastReason", CodeableConcept.class); + ValidationSupport.checkList(recommendation.dateCriterion, "dateCriterion", DateCriterion.class); + ValidationSupport.choiceElement(recommendation.doseNumber, "doseNumber", PositiveInt.class, String.class); + ValidationSupport.choiceElement(recommendation.seriesDoses, "seriesDoses", PositiveInt.class, String.class); + ValidationSupport.checkList(recommendation.supportingImmunization, "supportingImmunization", Reference.class); + ValidationSupport.checkList(recommendation.supportingPatientInformation, "supportingPatientInformation", Reference.class); + ValidationSupport.checkReferenceType(recommendation.supportingImmunization, "supportingImmunization", "Immunization", "ImmunizationEvaluation"); + ValidationSupport.requireValueOrChildren(recommendation); } protected Builder from(Recommendation recommendation) { @@ -1383,9 +1412,8 @@ public static class DateCriterion extends BackboneElement { private DateCriterion(Builder builder) { super(builder); - code = ValidationSupport.requireNonNull(builder.code, "code"); - value = ValidationSupport.requireNonNull(builder.value, "value"); - ValidationSupport.requireValueOrChildren(this); + code = builder.code; + value = builder.value; } /** @@ -1631,7 +1659,18 @@ public Builder value(DateTime value) { */ @Override public DateCriterion build() { - return new DateCriterion(this); + DateCriterion dateCriterion = new DateCriterion(this); + if (validating) { + validate(dateCriterion); + } + return dateCriterion; + } + + protected void validate(DateCriterion dateCriterion) { + super.validate(dateCriterion); + ValidationSupport.requireNonNull(dateCriterion.code, "code"); + ValidationSupport.requireNonNull(dateCriterion.value, "value"); + ValidationSupport.requireValueOrChildren(dateCriterion); } protected Builder from(DateCriterion dateCriterion) { diff --git a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImplementationGuide.java b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImplementationGuide.java index e09cc91e5c8..fd8e13edf49 100644 --- a/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImplementationGuide.java +++ b/fhir-model/src/main/java/com/ibm/fhir/model/resource/ImplementationGuide.java @@ -160,24 +160,24 @@ public class ImplementationGuide extends DomainResource { private ImplementationGuide(Builder builder) { super(builder); - url = ValidationSupport.requireNonNull(builder.url, "url"); + url = builder.url; version = builder.version; - name = ValidationSupport.requireNonNull(builder.name, "name"); + name = builder.name; title = builder.title; - status = ValidationSupport.requireNonNull(builder.status, "status"); + status = builder.status; experimental = builder.experimental; date = builder.date; publisher = builder.publisher; - contact = Collections.unmodifiableList(ValidationSupport.checkList(builder.contact, "contact", ContactDetail.class)); + contact = Collections.unmodifiableList(builder.contact); description = builder.description; - useContext = Collections.unmodifiableList(ValidationSupport.checkList(builder.useContext, "useContext", UsageContext.class)); - jurisdiction = Collections.unmodifiableList(ValidationSupport.checkList(builder.jurisdiction, "jurisdiction", CodeableConcept.class)); + useContext = Collections.unmodifiableList(builder.useContext); + jurisdiction = Collections.unmodifiableList(builder.jurisdiction); copyright = builder.copyright; - packageId = ValidationSupport.requireNonNull(builder.packageId, "packageId"); + packageId = builder.packageId; license = builder.license; - fhirVersion = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.fhirVersion, "fhirVersion", FHIRVersion.class)); - dependsOn = Collections.unmodifiableList(ValidationSupport.checkList(builder.dependsOn, "dependsOn", DependsOn.class)); - global = Collections.unmodifiableList(ValidationSupport.checkList(builder.global, "global", Global.class)); + fhirVersion = Collections.unmodifiableList(builder.fhirVersion); + dependsOn = Collections.unmodifiableList(builder.dependsOn); + global = Collections.unmodifiableList(builder.global); definition = builder.definition; manifest = builder.manifest; } @@ -1231,7 +1231,25 @@ public Builder manifest(Manifest manifest) { */ @Override public ImplementationGuide build() { - return new ImplementationGuide(this); + ImplementationGuide implementationGuide = new ImplementationGuide(this); + if (validating) { + validate(implementationGuide); + } + return implementationGuide; + } + + protected void validate(ImplementationGuide implementationGuide) { + super.validate(implementationGuide); + ValidationSupport.requireNonNull(implementationGuide.url, "url"); + ValidationSupport.requireNonNull(implementationGuide.name, "name"); + ValidationSupport.requireNonNull(implementationGuide.status, "status"); + ValidationSupport.checkList(implementationGuide.contact, "contact", ContactDetail.class); + ValidationSupport.checkList(implementationGuide.useContext, "useContext", UsageContext.class); + ValidationSupport.checkList(implementationGuide.jurisdiction, "jurisdiction", CodeableConcept.class); + ValidationSupport.requireNonNull(implementationGuide.packageId, "packageId"); + ValidationSupport.checkNonEmptyList(implementationGuide.fhirVersion, "fhirVersion", FHIRVersion.class); + ValidationSupport.checkList(implementationGuide.dependsOn, "dependsOn", DependsOn.class); + ValidationSupport.checkList(implementationGuide.global, "global", Global.class); } protected Builder from(ImplementationGuide implementationGuide) { @@ -1275,10 +1293,9 @@ public static class DependsOn extends BackboneElement { private DependsOn(Builder builder) { super(builder); - uri = ValidationSupport.requireNonNull(builder.uri, "uri"); + uri = builder.uri; packageId = builder.packageId; version = builder.version; - ValidationSupport.requireValueOrChildren(this); } /** @@ -1550,7 +1567,17 @@ public Builder version(String version) { */ @Override public DependsOn build() { - return new DependsOn(this); + DependsOn dependsOn = new DependsOn(this); + if (validating) { + validate(dependsOn); + } + return dependsOn; + } + + protected void validate(DependsOn dependsOn) { + super.validate(dependsOn); + ValidationSupport.requireNonNull(dependsOn.uri, "uri"); + ValidationSupport.requireValueOrChildren(dependsOn); } protected Builder from(DependsOn dependsOn) { @@ -1582,9 +1609,8 @@ public static class Global extends BackboneElement { private Global(Builder builder) { super(builder); - type = ValidationSupport.requireNonNull(builder.type, "type"); - profile = ValidationSupport.requireNonNull(builder.profile, "profile"); - ValidationSupport.requireValueOrChildren(this); + type = builder.type; + profile = builder.profile; } /** @@ -1830,7 +1856,18 @@ public Builder profile(Canonical profile) { */ @Override public Global build() { - return new Global(this); + Global global = new Global(this); + if (validating) { + validate(global); + } + return global; + } + + protected void validate(Global global) { + super.validate(global); + ValidationSupport.requireNonNull(global.type, "type"); + ValidationSupport.requireNonNull(global.profile, "profile"); + ValidationSupport.requireValueOrChildren(global); } protected Builder from(Global global) { @@ -1855,12 +1892,11 @@ public static class Definition extends BackboneElement { private Definition(Builder builder) { super(builder); - grouping = Collections.unmodifiableList(ValidationSupport.checkList(builder.grouping, "grouping", Grouping.class)); - resource = Collections.unmodifiableList(ValidationSupport.checkNonEmptyList(builder.resource, "resource", Resource.class)); + grouping = Collections.unmodifiableList(builder.grouping); + resource = Collections.unmodifiableList(builder.resource); page = builder.page; - parameter = Collections.unmodifiableList(ValidationSupport.checkList(builder.parameter, "parameter", Parameter.class)); - template = Collections.unmodifiableList(ValidationSupport.checkList(builder.template, "template", Template.class)); - ValidationSupport.requireValueOrChildren(this); + parameter = Collections.unmodifiableList(builder.parameter); + template = Collections.unmodifiableList(builder.template); } /** @@ -2278,7 +2314,20 @@ public Builder template(Collection