FHIR Terminology Ecosystem IG
1.9.5-SNAPSHOT - Release International flag

FHIR Terminology Ecosystem IG, published by HL7 FHIR Product Director. This guide is not an authorized publication; it is the continuous build for version 1.9.5-SNAPSHOT built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/fhir-tx-ecosystem-ig/ and changes regularly. See the Directory of published versions

Test Case Registry

Test cases

The tests assume that the server can accept code systems on the fly. If servers do not accept code systems on the fly, server authors will have to consult the FHIR product director. Either way, servers that do SHOULD pass all the tests, but the FHIR product director will review the test outcomes in order to approve a server.

The test cases are in version R5, but the tests will run against either an R4 or an R5 server. See R4 and the Test Cases

Note that the test cases will be migrated to use TestPlan+matchetypes at some stage.

Running the tests

The tests can be run by any runner that processes the tests correctly, but the easiest way to execute the tests is to use the standard Java FHIR Validator. You do not download the tests yourself - the runner fetches the published test package for you:

java -jar validator_cli.jar txTests -tx {server} [-test-version {version}] [-output {folder}] 
    [-externals {file}] [-mode {mode},{mode}] [-suite {suite}] [-filter {text}] [-input {folder}]

The parameters are:

  • -tx: the URL of the server to test for conformance. This is the only required parameter
  • -test-version: which published version of these test cases to run - see Versions of the test cases below. It defaults to current
  • -output: the folder to write the results to; defaults to your temporary directory. It contains test-results.json, and the actual response for each failed test, which you can compare against the expected response in the /tests directory of this IG's package with a comparison tool of your choice (winmerge, beyondCompare, etc)
  • -externals: a file that allows the server to use its own messages - they don't have to match the tx.fhir.org messages. Copy tests/messages-tx.fhir.org.json for the format
  • -mode: see Modes below. Several modes can be passed, separated by commas, or by repeating the parameter
  • -suite: run only the named suite, rather than all of them
  • -filter: run only the tests whose name contains this text
  • -input: an additional folder of test cases to run as well as the published ones

Note that the FHIR version to test is not a parameter: the runner asks the server which version of FHIR it speaks, and runs the R4 or the R5 form of each test accordingly. See R4 and the Test Cases.

Test Output

The runner writes a running commentary to the console. It starts with a header that records what is actually being run - the source of the tests and their version, the output directory, the server URL, whether an externals file is in use, and the modes - and it is worth reading, because most surprising results turn out to be a test version or a mode that isn't what you thought it was. Then, for each suite, a Group {name} line followed by one line per test:

Group expansions
   -- expand-simple: Pass (0.21sec)
   -- expand-filter-regex: Fail (0.19sec)
    Excluded code not found: http://hl7.org/fhir/test#code2

A failing test is followed by an error line with the reason - the first difference the runner found between the expected response and the actual one, or, if the test threw rather than compared, the exception and its stack trace. At the end, a summary line:

[name] passed all 1631 HL7 terminology service tests (modes general+snomed+icd-11, tests v1.9.4, runner v6.10.4)

or, if there were failures, failed {n} of {m} ... followed by a Failed Tests: line listing them as {suite}/{test}, comma separated. The summary names the modes, the version of the test cases, and the version of the runner, because a result means nothing without all three.

Note that the name is taken from the CapabilityStatement

The output directory (-output, defaulting to your temporary directory) contains:

  • test.log: everything that went to the console, in the output folder where the rest of the results are, so that a run is still readable after you have closed the terminal (validator 6.10.5 and later)
  • test-results.json: the date of the run, and every suite and test with its status and, for failures, the message
  • report.json: the same run as a FHIR TestReport, with a score and an overall pass/fail
  • expected/ and actual/: for each failing test, the expected response and the response the server actually gave, written as a pair of files with the same name so that they can be compared with a comparison tool of your choice (winmerge, beyondCompare, etc). Both sides are scrubbed and sorted the same way before they are written, so the diff shows the difference the runner objected to and not incidental ones. Passing tests write nothing - if a test passes, there is nothing to look at
  • actual/$versions.json: the server's response to $versions, recorded on connection, whether or not anything failed
  • conversions/: only when testing an R4 server. For each operation, the R5 resource and the R4 resource that was actually sent or received, as conversions/{r4|r5}/{suite}/{test}.{mode}.json, so that a failure caused by the version conversion can be told apart from one caused by the server. See R4 and the Test Cases

Note that the same test writes to the same file names every time it fails. If you run the tests several ways - R4 and R5, with and without server caching - each run overwrites the last one's diffs, and a test that fails in only one of them can leave no evidence behind. Use a different output directory for each variant, or, in server mode, the label parameter described below.

Running the tests in a pipeline

The simplest way to run the tests in a build is the command line above: it exits with 0 if every test passed and 1 if any test failed, so a CI step needs no output parsing. Always pass -test-version in a pipeline. The default is current, which is the ci-build of this IG and changes whenever its master branch changes - a build that uses it can go red because the tests moved, not because your server did. Pin a released version, and change it deliberately. Pass -output as well, and keep the directory as a build artefact: when the step fails, the expected/ and actual/ pair for each failing test is the only thing that tells you what went wrong, and it is gone with the build container otherwise.

The drawback of the command line is that the whole run is a single result. If you want your own test framework to report one result per test - to see which tests are newly failing, to track them over time, or just to get a useful failure message next to the test that produced it - use the validator's server mode instead. Start the validator once as an HTTP server, and ask it to run one test at a time:

java -jar validator_cli.jar server {port} -version 5.0

GET http://localhost:{port}/txTest?server={url}&suite={suite}&test={test}&modes={modes}&folder={folder}&label={label}

Each call runs one test and returns an OperationOutcome. If it has no issue with a severity of error, the test passed; otherwise details.text is the failure message - the same message the command line would have logged. The test cases and the server's setup resources are loaded once, on the first call for a given server, and reused, so the cost of starting a JVM and loading the test package is paid once, not once per test. Drive it from whatever test framework you already use: enumerate the suites and tests from test-cases.json in this IG's package, and make one call per test.

Two of the parameters matter more in server mode than they look. modes replaces the runner's mode set for that call: pass every mode your server supports, exactly as you would on the command line, because a test gated on a mode you did not ask for does not run, and a test that did not run is reported as neither a pass nor a failure but as an explanation of which mode would have run it. Sending no modes at all gets a default set that may not match your server. folder and label (validator 6.10.5 and later) control where the output goes: folder names the run's folder inside the validator's temporary directory - a simple name, not a path, defaulting to the server's host name - and label names a subfolder of it for that one test. Give each variant of a run its own label (r4, r5, r5-cached) and the diffs for a test that fails in only one of them survive.

Versions of the test cases

The test cases change: tests are added, and corrected, as servers and the specification develop. So this IG is released periodically, and each release is a fixed set of test cases that you can test against repeatedly and compare results over time. The releases are listed on the history page, and you choose one with -test-version:

java -jar validator_cli.jar txTests -tx http://localhost:8080/fhir -test-version 1.9.3 -output ./results

-test-version names a version of this IG - a version like 1.9.3. It is not a FHIR version, and passing a FHIR version (-test-version 4.0.1) will fail, because there is no such release of the test cases.

If you do not pass -test-version, the runner uses current: the tests as they stand in the ci-build of the master branch, which changes whenever master changes. That is the right choice when you are working with the FHIR product director on new tests, and the wrong one when you need a stable measure of your server's conformance.

Test Suites and Test Cases

All the tests are registered in tests/test-cases.json, which contains a list of suites, each of which contains a list of tests. A suite may have:

  • name: the name of the suite (used in the test output, and to run a single suite)
  • description: what the suite is for
  • setup: a list of files containing the resources (code systems, value sets, concept maps) that the server needs in order to run the tests in the suite. Servers that cannot accept resources on the fly have to load these some other way
  • mode / modes: the suite only runs when the runner is in that mode (see below)
  • version: the suite only runs against servers of that FHIR version (see below)
  • disabled: if true, the suite is not run at all

A test may have:

  • name: the name of the test, unique within the suite
  • description: what the test is checking. This is the documentation for the requirement the test enforces, so it should say why the expected response is the correct one
  • operation: one of expand, validate-code, cs-validate-code, lookup, translate, compare, batch, batch-validate, metadata, term-caps
  • request: the file containing the request parameters (not used by metadata / term-caps)
  • response: the file containing the expected response
  • request:{mode} / response:{mode}: an alternative request or response used when the runner is in that mode - e.g. response:flat for servers that return a flat expansion
  • mode / modes, version, disabled: as for suites
  • http-code: the expected HTTP status code, where it isn't 200 (e.g. 422, or 4xx)
  • lenient-display: sets the lenient-display-validation parameter on a validate-code or cs-validate-code request, so that the same request can be tested both ways
  • profile: a file containing a Parameters resource with the expansion parameters to use
  • Accept-Language: the language to ask for
  • header: an additional HTTP header to send ( name, value, and optionally mode)

FHIR Versions

The test cases are written in R5, and most of them are the same for an R4 server, but some questions have different answers in different versions of FHIR. Where a test only makes sense for particular versions, the version property says which:

  • "version" : "4.0": only run this against an R4 server (matches 4.0, and any version starting 4.0., so 4.0.1 matches)
  • "version" : "!4.0": run this against anything except an R4 server

Where the same test applies to all versions but the response differs, the difference is marked in the expected response with $optional$ or $only$ (see below).

Test Templates

Expected responses are not compared literally - they are templates. A string in an expected response may be one of:

  • $$: any value
  • $id$, $uuid$, $url$, $token$, $string$, $date$, $instant$, $semver$: any value of that kind. ($string$ means any string that has no leading or trailing whitespace)
  • $version$: the FHIR version of the server being tested. $version$ is also substituted into longer strings, so "...|$version$" works
  • $choice:a|b|c$: any one of the listed values
  • $fragments:a|b$: any string that contains all of the listed fragments (case insensitive). This is how messages are checked where the exact wording is not fixed
  • $external:N$: the string registered as N in the externals file, which lets a server provide its own wording for a message. See tests/messages-tx.fhir.org.json for the format. $external:N:a|b$ also gives fragments to use when no externals file is provided

An object in an expected response may carry:

  • $optional-properties$: an array of the names of properties that the server is allowed to omit. * means all of them
  • $count-arrays$: an array of the names of properties whose content is not checked - only the number of entries in them
  • $optional$: this object may be omitted (see below)
  • $only$: this object is required in some versions or modes, and prohibited in the rest (see below)

$optional$ and $only$

$optional$ marks an entry in an array that the server does not have to return. It is either a boolean, or a filter that says when it is optional:

  • "$optional$" : true: always optional. Note that this must be a boolean - "true" as a string is read as a mode name, and does nothing
  • "$optional$" : "{mode}": optional unless the runner is in that mode
  • "$optional$" : "!{mode}": optional only when the runner is not in that mode. e.g. "!tx.fhir.org" means "every server except tx.fhir.org may leave this out"
  • "$optional$" : "version:4": optional when the server's FHIR version starts with 4
  • "$optional$" : "warning:{message}": always optional, but the runner reports the message when the content is missing

$only$ is the counterpart: where $optional$ only ever relaxes a requirement, $only$ says that the entry belongs to exactly one version or mode. When its filter passes the entry is required, and when it does not, the entry must not be present at all. The filter grammar is the same as $optional$'s. So "$only$" : "version:4" marks content that an R4 server must return and an R5 server must not.

Modes

Some tests, and some parts of expected responses, only apply to servers with particular characteristics, or to a particular server. These are marked with a mode, and only run when that mode is passed to the runner with the -mode parameter. general is always on unless it is turned off with -mode !general. The modes in use are:

  • general: the tests every server is expected to pass. This is the default
  • snomed: servers that support SNOMED CT, loaded with the test subontology described in tx-source/readme.md
  • omop: servers that support OMOP
  • icd-11: servers that support ICD-11
  • mimetypes: servers that support the mime types code system (BCP 13, urn:ietf:bcp:13)
  • tx.fhir.org: tests that are specific to tx.fhir.org - either its own bugs, or operations that are still being trialled there. No other server is expected to pass these
  • flat: servers that return a flat expansion rather than a hierarchical one. This mode selects the response:flat alternative for the tests that have one

A mode name can also appear in $optional$ / $only$ in an expected response, so that a particular server (or every server but one) is held to a different requirement than the rest

  • "$optional$" : "!tx.fhir.org" is used throughout for content that only tx.fhir.org is required to return.

Registry

Summary of the impact of the modes. The tests in the general mode are run by default; the tests in the other modes are only run when the mode is passed to the runner:

Mode Suites (test count) Tests
general (all the suites that are not marked with another mode) 670
tx.fhir.org tx.fhir.org (76)
UCUM (20)
compare (28)
bugs (25)
related2 (33)
langcodes (43)
simple-cases (3 of 37)
228
snomed snomed (67)
sct-ecl (103)
170
omop omop (26)
26
mimetypes mimetypes (39)
39
icd-11 icd-11 (50)
50
Total 38 suites 1183

All the test suites and test cases:

Name Operation Flags Description
metadata

tests for minimal requirements for metadata statements

metadata $metadata

Check that the minimum expected things are found in the server CapabilityStatement

term-caps $term-caps

Check that the minimum expected things are found in the server TerminologyCapabilities

properties general

Testing the ValueSet.compose.property element

expand-with-valueset.compose.property-all-properties-wildcard $expand

Expand a value set defined to request all properties using ValueSet.compose.property with a wildcard character

expand-with-valueset.compose.property-all-properties-enums $expand

Expand a value set defined to request all properties using ValueSet.compose.property with enumerated properties

simple-cases general

basic tests, setting up for the API tests to come

simple-expand-all $expand

Expansion containing all the code system

simple-expand-active $expand

Expansion containing only the active codes in the code system

simple-expand-inactive $expand

Expansion containing only the inactive codes in the code system

simple-expand-enum $expand

Expansion containing an enumerated set of codes in the code system

simple-expand-enum-bad $expand

Expansion containing an enumerated set of codes in the code system, including invalid codes

simple-expand-isa $expand

Expansion containing a filter on the code system using is-a relationship

simple-expand-child-of $expand

Expansion containing a filter on the code system using child-of relationship. This is testing R5/R4 transformation

simple-expand-isa-o2 $expand tx.fhir.org

Expansion containing a filter on the code system using is-a relationship with paging (tx.fhir.org internal test)

simple-expand-isa-c2 $expand tx.fhir.org

Expansion containing a filter on the code system using is-a relationship with paging (tx.fhir.org internal test)

simple-expand-isa-o2c2 $expand tx.fhir.org

Expansion containing a filter on the code system using is-a relationship with paging (tx.fhir.org internal test)

simple-expand-prop $expand

Expansion containing a filter on the code system using a property value

simple-expand-repeating-prop $expand

A concept may carry several values for one property (CodeSystem.concept.property is 0..*). code3 has dup=alpha and dup=beta; filtering on beta - which is not its first value - must still select it

simple-expand-repeating-prop-values $expand

expansion.contains.property is 0..* as well: a concept carrying several values for one property must report all of them, not just one

simple-expand-regex $expand

Expansion containing a filter on the code system using regex on the codes

simple-expand-regex2 $expand

Expansion containing a filter on the code system using regex on the codes using a regex known to cause a problem on at least one server

simple-expand-regexp-prop $expand

Expansion containing a filter on the code system using regex on the property values of prop

simple-expand-regex-none $expand

Expansion containing a filter on the code system using a valid regex on the codes that matches none of them. The expansion is empty - an include whose filter selects nothing must not be treated as an include with no filter, which would select every code in the code system

simple-lookup-1 $lookup

Check that $lookup works (there's not many tests for $lookup because it's not used much by the tools)

simple-lookup-2 $lookup

Check that $lookup works (there's not many tests for $lookup because it's not used much by the tools)

simple-expand-all-count $expand

Expansion containing all the code system, but only a count

simple-expand-contained $expand

Expansion where the compose refers to a contained value set

simple-subsumes-parent $subsumes

A code subsumes a code nested inside it

simple-subsumes-child $subsumes

the mirror of simple-subsumes-parent

simple-subsumes-equivalent $subsumes

A code is equivalent to itself

simple-subsumes-transitive $subsumes

Subsumption follows the whole nesting, not just direct children

simple-subsumes-siblings $subsumes

Two sibling codes do not subsume each other

simple-subsumes-unrelated $subsumes

Two root level codes do not subsume each other

simple-subsumes-root $subsumes

A root code does not subsume a code under a different root

simple-subsumes-unknown-code $subsumes

codeA is not in the code system

simple-subsumes-parent-coding $subsumes

As simple-subsumes-parent, but with codingA/codingB

simple-subsumes-child-coding $subsumes

As simple-subsumes-child, but with codingA/codingB

simple-subsumes-equivalent-coding $subsumes

As simple-subsumes-equivalent, but with codingA/codingB

simple-subsumes-transitive-coding $subsumes

As simple-subsumes-transitive, but with codingA/codingB

simple-subsumes-siblings-coding $subsumes

As simple-subsumes-siblings, but with codingA/codingB

simple-subsumes-unrelated-coding $subsumes

As simple-subsumes-unrelated, but with codingA/codingB

simple-subsumes-root-coding $subsumes

As simple-subsumes-root, but with codingA/codingB

simple-subsumes-unknown-code-coding $subsumes

As simple-subsumes-unknown-code, but with codingA/codingB

parameters general

Testing out the various expansion parameters that the IG publisher makes use of

parameters-expand-all-hierarchy $expand

Expand an entire code system, and check that the code system replicates the hierarchy. Note that for all the hierarchical expansions, the flag 'flat' means that the server is not expected to provide a hierarchical expansion

parameters-expand-enum-hierarchy $expand

Expand an enumerated value set - no hierarchy in this case

parameters-expand-isa-hierarchy $expand

Expand an is-a value set, and preserve the hierarchy

parameters-expand-all-active $expand

expand all the active codes - hierarchy is preserved

parameters-expand-active-active $expand

Expand all the active codes, and specify active codes in a parameter

parameters-expand-inactive-active $expand

Expand all the codes, including inactive ones, but specify active codes only in a parameter

parameters-expand-enum-active $expand

Expand an enumerated value set, with active codes only in a parameter

parameters-expand-isa-active $expand

Expand an is-a value set, only the active codes

parameters-expand-all-inactive $expand

expand all the active codes, including inactive codes - hierarchy is preserved

parameters-expand-active-inactive $expand

to be provided

parameters-expand-inactive-inactive $expand

to be provided

parameters-expand-enum-inactive $expand

to be provided

parameters-expand-isa-inactive $expand

to be provided

parameters-expand-all-designations $expand

to be provided

parameters-expand-enum-designations $expand

to be provided

parameters-expand-isa-designations $expand

to be provided

parameters-expand-all-definitions $expand

to be provided

parameters-expand-enum-definitions $expand

to be provided

parameters-expand-isa-definitions $expand

to be provided

parameters-expand-all-definitions2 $expand

to be provided

parameters-expand-enum-definitions2 $expand

to be provided

parameters-expand-enum-definitions3 $expand

specifically to test out http://hl7.org/fhir/StructureDefinition/valueset-concept-definition

parameters-expand-isa-definitions2 $expand

to be provided

parameters-expand-all-property $expand

to be provided

parameters-expand-enum-property $expand

to be provided

parameters-expand-isa-property $expand

to be provided

parameters-expand-supplement-none $expand

Base line for supplement tests

parameters-expand-supplement-good $expand

Make sure the useSupplement parameter works

parameters-expand-supplement-bad $expand

Make sure the useSupplement parameter fails when it's not valid

parameters-validate-supplement-none $validate-code

Base line for supplement tests - validation

parameters-validate-supplement-good $validate-code

Make sure the useSupplement parameter works for validation

parameters-validate-supplement-bad $validate-code

Make sure the useSupplement parameter fails when it's not valid - for validation

parameters-lookup-supplement-none $lookup

Base line for supplement tests - validation

parameters-lookup-supplement-good $lookup

Make sure the useSupplement parameter works for lookup

parameters-lookup-supplement-bad $lookup

Make sure the useSupplement parameter fails when it's not valid - for lookup

language general

Testing returning language by request, getting the right designation


Testing returning language by request, getting the right designation
language-echo-en-none $expand

to be provided

language-echo-de-none $expand

to be provided

language-echo-en-multi-none $expand

to be provided

language-echo-de-multi-none $expand

to be provided

language-echo-en-en-param $expand

to be provided

language-echo-en-en-vs $expand

to be provided

language-echo-en-en-header $expand

to be provided

language-echo-en-en-vslang $expand

to be provided

language-echo-en-en-mixed $expand

to be provided

language-echo-de-de-param $expand

to be provided

language-echo-de-de-vs $expand

to be provided

language-echo-de-de-header $expand

to be provided

language-echo-en-multi-en-param $expand

to be provided

language-echo-en-multi-en-vs $expand

to be provided

language-echo-en-multi-en-header $expand

to be provided

language-echo-de-multi-de-param $expand

to be provided

language-echo-de-multi-de-vs $expand

to be provided

language-echo-de-multi-de-header $expand

to be provided

language-xform-en-multi-de-soft $expand

to be provided

language-xform-en-multi-de-hard $expand

to be provided

language-xform-en-multi-de-default $expand

to be provided

language-xform-de-multi-en-soft $expand

to be provided

language-xform-de-multi-en-hard $expand

to be provided

language-xform-de-multi-en-default $expand

to be provided

language-echo-en-designation $expand

to be provided

language-echo-en-designations $expand

to be provided

language2 general

A series of tests that test display name validation for various permutations of languages


A series of tests that test display name validation for various permutations of languages
validation-right-de-en $validate-code

to be provided

validation-right-de-ende-N $validate-code

to be provided

validation-right-de-ende $validate-code

to be provided

validation-right-de-none $validate-code

to be provided

validation-right-en-en $validate-code

to be provided

validation-right-en-ende-N $validate-code

to be provided

validation-right-en-ende $validate-code

to be provided

validation-right-en-none $validate-code

to be provided

validation-right-none-en $validate-code

to be provided

validation-right-none-ende-N $validate-code

to be provided

validation-right-none-ende $validate-code

to be provided

validation-right-none-none $validate-code

to be provided

validation-wrong-de-en $validate-code

to be provided

validation-wrong-de-en-bad $validate-code

Same request, but with an invalid displayName parameter

validation-wrong-de-ende-N $validate-code

to be provided

validation-wrong-de-ende $validate-code

to be provided

validation-wrong-de-none $validate-code

to be provided

validation-wrong-en-en $validate-code

to be provided

validation-wrong-en-ende-N $validate-code

to be provided

validation-wrong-en-ende $validate-code

to be provided

validation-wrong-en-none $validate-code

to be provided

validation-wrong-none-en $validate-code

to be provided

validation-wrong-none-ende-N $validate-code

to be provided

validation-wrong-none-ende $validate-code

to be provided

validation-wrong-none-none $validate-code

to be provided

extensions general

Testing proper handling of extensions, which depends on the extension

extensions-echo-all $expand

to be provided

extensions-echo-enumerated $expand

to be provided

extensions-echo-bad-supplement $expand

to be provided

validate-code-bad-supplement $validate-code

to be provided

validate-coding-bad-supplement $validate-code

to be provided

validate-coding-bad-supplement-url $cs-validate-code

to be provided

validate-codeableconcept-bad-supplement $validate-code

to be provided

validate-coding-good-supplement $validate-code

to be provided

validate-coding-good2-supplement $validate-code

to be provided

validate-code-inactive-display-lenient $cs-validate-code

Check handling of a deprecated designation (lenient display validation)

validate-code-inactive-display-notlenient $cs-validate-code

Check handling of a deprecated designation (strict display validation)

validate-code-inactive $cs-validate-code

Check handling of a deprecated concept

validation general

Testing various validation parameter combinations

validation-simple-code-good $validate-code

to be provided

validation-simple-child-of-child $validate-code

child-of picks up a direct child - here the hierarchy is stated by nesting

validation-simple-child-of-grandchild $validate-code

and it stops there: a grandchild is not a child

validation-simple-code-implied-good $validate-code

to be provided

validation-simple-coding-good $validate-code

to be provided

validation-simple-codeableconcept-good $validate-code

to be provided

validation-simple-code-bad-code $validate-code

to be provided

validation-simple-code-implied-bad-code $validate-code

to be provided

validation-simple-coding-bad-code $validate-code

to be provided

validation-simple-coding-bad-code-inactive $validate-code

to be provided

validation-simple-codeableconcept-bad-code $validate-code

to be provided

validation-simple-code-bad-valueSet $validate-code

to be provided

validation-simple-coding-bad-valueSet $validate-code

to be provided

validation-simple-codeableconcept-bad-valueSet $validate-code

to be provided

validation-simple-code-bad-import $validate-code

to be provided

validation-simple-coding-bad-import $validate-code

to be provided

validation-simple-codeableconcept-bad-import $validate-code

to be provided

validation-simple-code-bad-system $validate-code

to be provided

validation-simple-coding-bad-system $validate-code

to be provided

validation-simple-codeableconcept-unknown-system $validate-code

A CodeableConcept with a coding from an unknown code system alongside a coding that is in the value set. The unknown system cannot be checked, but membership is satisfied by the other coding, so the result is true with a warning

validation-simple-coding-bad-system2 $validate-code

to be provided

validation-simple-coding-bad-system-local $validate-code

to be provided

validation-simple-coding-no-system $validate-code

to be provided

validation-simple-codeableconcept-bad-system $validate-code

to be provided

validation-simple-code-good-display $validate-code

to be provided

validation-simple-coding-good-display $validate-code

to be provided

validation-simple-codeableconcept-good-display $validate-code

to be provided

validation-simple-code-bad-display-lenient $validate-code

a bad display, with lenient display validation - a warning, and the code is valid

validation-simple-code-bad-display-notlenient $validate-code

a bad display, with strict display validation - an error, and the code is not valid

validation-simple-code-bad-display-ws $validate-code

to be provided

validation-simple-coding-bad-display $validate-code

to be provided

validation-simple-codeableconcept-bad-display $validate-code

to be provided

validation-simple-code-bad-display-warning $validate-code

to be provided

validation-simple-coding-bad-display-warning $validate-code

to be provided

validation-simple-codeableconcept-bad-display-warning $validate-code

to be provided

validation-simple-code-good-language $validate-code

to be provided

validation-simple-coding-good-language $validate-code

to be provided

validation-simple-codeableconcept-good-language $validate-code

to be provided

validation-simple-code-bad-language $validate-code

to be provided

validation-simple-code-good-regex $validate-code

to be provided

validation-simple-code-bad-regex $validate-code

to be provided

validation-simple-code-regex-none $validate-code

A code that exists in the code system is not in a value set whose only include is a valid regex filter that matches no codes

validation-simple-coding-bad-language $validate-code

to be provided

validation-simple-coding-bad-language-header $validate-code

to be provided

validation-simple-coding-bad-language-vs $validate-code

to be provided

validation-simple-coding-bad-language-vslang $validate-code

to be provided

validation-simple-codeableconcept-bad-language $validate-code

to be provided

validation-simple-code-good-language-none $validate-code

Validate a code where the display is a valid designation in the code system's default language (en), and the requested displayLanguage (de) has no displays for the code. The display is valid, with an informational message

validation-simple-code-bad-language-none $validate-code

Validate a code where the display matches no display or designation at all, and the requested displayLanguage (de) has no displays for the code. The display is invalid

validation-simple-coding-good-language-none $validate-code

Validate a Coding where the display is a valid designation in the code system's default language (en), and the requested displayLanguage (de) has no displays for the code. The display is valid, with an informational message

validation-simple-coding-bad-language-none $validate-code

Validate a Coding where the display matches no display or designation at all, and the requested displayLanguage (de) has no displays for the code. The display is invalid

validation-simple-codeableconcept-good-language-none $validate-code

Validate a CodeableConcept where the coding display is a valid designation in the code system's default language (en), and the requested displayLanguage (de) has no displays for the code. The display is valid, with an informational message

validation-simple-codeableconcept-bad-language-none $validate-code

Validate a CodeableConcept where the coding display matches no display or designation at all, and the requested displayLanguage (de) has no displays for the code. The display is invalid

validation-complex-codeableconcept-full $validate-code

to be provided

validation-complex-codeableconcept-vsonly $validate-code

to be provided

validation-cs-code-good $cs-validate-code

to be provided

validation-cs-code-bad-code $cs-validate-code

to be provided

validation-contained-good $validate-code

Validation where the compose refers to a contained value set (valid code)

validation-contained-bad $validate-code

Validation where the compose refers to a contained value set (invalid code)

version general

Testing various version issues. There's two versions of a code system, and three value sets that select different versions

version-simple-code-bad-version1 $validate-code

Code. Invalid CodeSystem version. No ValueSet version pinning. No version parameters

version-simple-coding-bad-version1 $validate-code

Coding. Invalid CodeSystem version. No ValueSet version pinning. No version parameters

version-simple-codeableconcept-bad-version1 $validate-code

CodeableConcept. Invalid CodeSystem version. No ValueSet version pinning. No version parameters

version-simple-codeableconcept-bad-version2 $validate-code

Check that a bad system with a version doesn't generate a warning that the version can't be found

version-simple-code-good-version $validate-code

Code. Valid CodeSystem version. ValueSet pinned to same version. No version parameters

version-simple-coding-good-version $validate-code

Coding. Valid CodeSystem version. ValueSet pinned to same version. No version parameters

version-simple-codeableconcept-good-version $validate-code

CodeableConcept. Valid CodeSystem version. ValueSet pinned to same version. No version parameters

version-version-profile-none $validate-code

to be provided

version-version-profile-default $validate-code

to be provided

validation-version-profile-coding $validate-code

to be provided

coding-vnn-vsnn $validate-code

Coding. No CodeSystem version. No ValueSet version pinning. No version parameters

coding-v10-vs1w $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. No version parameters

coding-v10-vs1wb $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. No version parameters

coding-v10-vs10 $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.0. No version parameters

coding-v10-vs20 $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.2. No version parameters

coding-v10-vsbb $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). No version parameters

coding-v10-vsbb $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). No version parameters

coding-v10-vsnn $validate-code

Coding. CodeSystem version 1.0. No ValueSet version pinning. No version parameters

coding-vbb-vs10 $validate-code

Coding. CodeSystem version 2.4 (bad). ValueSet version pinned to 1.0. No version parameters

coding-vbb-vsnn $validate-code

Coding. CodeSystem version 2.4 (bad). No ValueSet version pinning. No version parameters

coding-vnn-vs1w $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. No version parameters

coding-vnn-vs1wb $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. No version parameters

coding-vnn-vs10 $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.0. No version parameters

coding-vnn-vsbb $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 2.4 (bad). No version parameters

coding-vnn-vsnn-default $validate-code

Coding. No CodeSystem version. No ValueSet version pinning. Version Parameter: default to 1.2.0

coding-v10-vs1w-default $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: default to 1.2.0

coding-v10-vs1wb-default $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: default to 1.2.0

coding-v10-vs10-default $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.0. Version Parameter: default to 1.2.0

coding-v10-vs20-default $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.2. Version Parameter: default to 1.2.0

coding-v10-vsbb-default $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). Version Parameter: default to 1.2.0

coding-v10-vsnn-default $validate-code

Coding. CodeSystem version 1.0. No ValueSet version pinning. Version Parameter: default to 1.2.0

coding-vbb-vs10-default $validate-code

Coding. CodeSystem version 2.4 (bad). ValueSet version pinned to 1.0. Version Parameter: default to 1.2.0

coding-vbb-vsnn-default $validate-code

Coding. CodeSystem version 2.4 (bad). No ValueSet version pinning. Version Parameter: default to 1.2.0

coding-vnn-vs1w-default $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: default to 1.2.0

coding-vnn-vs1wb-default $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: default to 1.2.0

coding-vnn-vs10-default $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.0. Version Parameter: default to 1.2.0

coding-vnn-vsbb-default $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 2.4 (bad). Version Parameter: default to 1.2.0

coding-vnn-vsnn-check $validate-code

Coding. No CodeSystem version. No ValueSet version pinning. Version Parameter: check is 1.2.0

coding-v10-vs1w-check $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: check is 1.2.0

coding-v10-vs1wb-check $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: check is 1.2.0

coding-v10-vs10-check $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.0. Version Parameter: check is1.2.0

coding-v10-vs20-check $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.2. Version Parameter: check is 1.2.0

coding-v10-vsbb-check $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). Version Parameter: check is 1.2.0

coding-v10-vsnn-check $validate-code

Coding. CodeSystem version 1.0. No ValueSet version pinning. Version Parameter: check is 1.2.0

coding-vbb-vs10-check $validate-code

Coding. CodeSystem version 2.4 (bad). ValueSet version pinned to 1.0. Version Parameter: check is 1.2.0

coding-vbb-vsnn-check $validate-code

Coding. CodeSystem version 2.4 (bad). No ValueSet version pinning. Version Parameter: check is 1.2.0

coding-vnn-vs1w-check $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: check is 1.2.0

coding-vnn-vs1wb-check $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: check is 1.2.0

coding-vnn-vs10-check $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.0. Version Parameter: check is 1.2.0

coding-vnn-vsbb-check $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 2.4 (bad). Version Parameter: check is 1.2.0

coding-vnn-vsnn-force $validate-code

Coding. No CodeSystem version. No ValueSet version pinning. Version Parameter: force to 1.2.0

coding-v10-vs1w-force $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: force to 1.2.0

coding-v10-vs1wb-force $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: force to 1.2.0

coding-v10-vs10-force $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.0. Version Parameter: force to 1.2.0

coding-v10-vs20-force $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.2. Version Parameter: force to 1.2.0

coding-v10-vsbb-force $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). Version Parameter: force to 1.2.0

coding-v10-vsnn-force $validate-code

Coding. CodeSystem version 1.0. No ValueSet version pinning. Version Parameter: force to 1.2.0

coding-vbb-vs10-force $validate-code

Coding. CodeSystem version 2.4 (bad). ValueSet version pinned to 1.0. Version Parameter: force to 1.2.0

coding-vbb-vsnn-force $validate-code

Coding. CodeSystem version 2.4 (bad). No ValueSet version pinning. Version Parameter: force to 1.2.0

coding-vnn-vs1w-force $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: force to 1.2.0

coding-vnn-vs1wb-force $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: force to 1.2.0

coding-vnn-vs10-force $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.0. Version Parameter: force to 1.2.0

coding-vnn-vsbb-force $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 2.4 (bad). Version Parameter: force to 1.2.0

codeableconcept-vnn-vsnn $validate-code

Coding. No CodeSystem version. No ValueSet version pinning. No version parameters

codeableconcept-v10-vs1w $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. No version parameters

codeableconcept-v10-vs1wb $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. No version parameters

codeableconcept-v10-vs10 $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.0. No version parameters

codeableconcept-v10-vs20 $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.2. No version parameters

codeableconcept-v10-vsbb $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). No version parameters

codeableconcept-v10-vsbb $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). No version parameters

codeableconcept-v10-vsnn $validate-code

Coding. CodeSystem version 1.0. No ValueSet version pinning. No version parameters

codeableconcept-vbb-vs10 $validate-code

Coding. CodeSystem version 2.4 (bad). ValueSet version pinned to 1.0. No version parameters

codeableconcept-vbb-vsnn $validate-code

Coding. CodeSystem version 2.4 (bad). No ValueSet version pinning. No version parameters

codeableconcept-vnn-vs1w $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. No version parameters

codeableconcept-vnn-vs1wb $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. No version parameters

codeableconcept-vnn-vs10 $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.0. No version parameters

codeableconcept-vnn-vsbb $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 2.4 (bad). No version parameters

codeableconcept-vnn-vsnn-default $validate-code

Coding. No CodeSystem version. No ValueSet version pinning. Version Parameter: default to 1.2.0

codeableconcept-v10-vs1w-default $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: default to 1.2.0

codeableconcept-v10-vs1wb-default $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: default to 1.2.0

codeableconcept-v10-vs10-default $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.0. Version Parameter: default to 1.2.0

codeableconcept-v10-vs20-default $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.2. Version Parameter: default to 1.2.0

codeableconcept-v10-vsbb-default $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). Version Parameter: default to 1.2.0

codeableconcept-v10-vsnn-default $validate-code

Coding. CodeSystem version 1.0. No ValueSet version pinning. Version Parameter: default to 1.2.0

codeableconcept-vbb-vs10-default $validate-code

Coding. CodeSystem version 2.4 (bad). ValueSet version pinned to 1.0. Version Parameter: default to 1.2.0

codeableconcept-vbb-vsnn-default $validate-code

Coding. CodeSystem version 2.4 (bad). No ValueSet version pinning. Version Parameter: default to 1.2.0

codeableconcept-vnn-vs1w-default $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: default to 1.2.0

codeableconcept-vnn-vs1wb-default $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: default to 1.2.0

codeableconcept-vnn-vs10-default $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.0. Version Parameter: default to 1.2.0

codeableconcept-vnn-vsbb-default $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 2.4 (bad). Version Parameter: default to 1.2.0

codeableconcept-vnn-vsnn-check $validate-code

Coding. No CodeSystem version. No ValueSet version pinning. Version Parameter: check is 1.2.0

codeableconcept-v10-vs1w-check $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: check is 1.2.0

codeableconcept-v10-vs1wb-check $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: check is 1.2.0

codeableconcept-v10-vs10-check $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.0. Version Parameter: check is1.2.0

codeableconcept-v10-vs20-check $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.2. Version Parameter: check is 1.2.0

codeableconcept-v10-vsbb-check $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). Version Parameter: check is 1.2.0

codeableconcept-v10-vsnn-check $validate-code

Coding. CodeSystem version 1.0. No ValueSet version pinning. Version Parameter: check is 1.2.0

codeableconcept-vbb-vs10-check $validate-code

Coding. CodeSystem version 2.4 (bad). ValueSet version pinned to 1.0. Version Parameter: check is 1.2.0

codeableconcept-vbb-vsnn-check $validate-code

Coding. CodeSystem version 2.4 (bad). No ValueSet version pinning. Version Parameter: check is 1.2.0

codeableconcept-vnn-vs1w-check $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: check is 1.2.0

codeableconcept-vnn-vs1wb-check $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: check is 1.2.0

codeableconcept-vnn-vs10-check $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.0. Version Parameter: check is 1.2.0

codeableconcept-vnn-vsbb-check $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 2.4 (bad). Version Parameter: check is 1.2.0

codeableconcept-vnn-vsnn-force $validate-code

Coding. No CodeSystem version. No ValueSet version pinning. Version Parameter: force to 1.2.0

codeableconcept-v10-vs1w-force $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: force to 1.2.0

codeableconcept-v10-vs1wb-force $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: force to 1.2.0

codeableconcept-v10-vs10-force $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.0. Version Parameter: force to 1.2.0

codeableconcept-v10-vs20-force $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 1.2. Version Parameter: force to 1.2.0

codeableconcept-v10-vsbb-force $validate-code

Coding. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). Version Parameter: force to 1.2.0

codeableconcept-v10-vsnn-force $validate-code

Coding. CodeSystem version 1.0. No ValueSet version pinning. Version Parameter: force to 1.2.0

codeableconcept-vbb-vs10-force $validate-code

Coding. CodeSystem version 2.4 (bad). ValueSet version pinned to 1.0. Version Parameter: force to 1.2.0

codeableconcept-vbb-vsnn-force $validate-code

Coding. CodeSystem version 2.4 (bad). No ValueSet version pinning. Version Parameter: force to 1.2.0

codeableconcept-vnn-vs1w-force $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: force to 1.2.0

codeableconcept-vnn-vs1wb-force $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: force to 1.2.0

codeableconcept-vnn-vs10-force $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 1.0. Version Parameter: force to 1.2.0

codeableconcept-vnn-vsbb-force $validate-code

Coding. No CodeSystem version. ValueSet version pinned to 2.4 (bad). Version Parameter: force to 1.2.0

code-vnn-vsnn $validate-code

code. No CodeSystem version. No ValueSet version pinning. No version parameters

code-v10-vs1w $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.x. No version parameters

code-v10-vs1wb $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.x. No version parameters

code-v10-vs10 $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.0. No version parameters

code-v10-vs20 $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.2. No version parameters

code-v10-vsbb $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). No version parameters

code-v10-vsnn $validate-code

code. CodeSystem version 1.0. No ValueSet version pinning. No version parameters

code-vbb-vs10 $validate-code

code. CodeSystem version 2.4 (bad). ValueSet version pinned to 1.0. No version parameters

code-vbb-vsnn $validate-code

code. CodeSystem version 2.4 (bad). No ValueSet version pinning. No version parameters

code-vnn-vs1w $validate-code

code. No CodeSystem version. ValueSet version pinned to 1.x. No version parameters

code-vnn-vs1wb $validate-code

code. No CodeSystem version. ValueSet version pinned to 1.x. No version parameters

code-vnn-vs10 $validate-code

code. No CodeSystem version. ValueSet version pinned to 1.0. No version parameters

code-vnn-vsbb $validate-code

code. No CodeSystem version. ValueSet version pinned to 2.4 (bad). No version parameters

code-vnn-vsnn-default $validate-code

code. No CodeSystem version. No ValueSet version pinning. Version Parameter: default to 1.2.0

code-v10-vs1w-default $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: default to 1.2.0

code-v10-vs1wb-default $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: default to 1.2.0

code-v10-vs10-default $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.0. Version Parameter: default to 1.2.0

code-v10-vs20-default $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.2. Version Parameter: default to 1.2.0

code-v10-vsbb-default $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). Version Parameter: default to 1.2.0

code-v10-vsnn-default $validate-code

code. CodeSystem version 1.0. No ValueSet version pinning. Version Parameter: default to 1.2.0

code-vbb-vs10-default $validate-code

code. CodeSystem version 2.4 (bad). ValueSet version pinned to 1.0. Version Parameter: default to 1.2.0

code-vbb-vsnn-default $validate-code

code. CodeSystem version 2.4 (bad). No ValueSet version pinning. Version Parameter: default to 1.2.0

code-vnn-vs1wb-default $validate-code

code. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: default to 1.2.0

code-vnn-vs10-default $validate-code

code. No CodeSystem version. ValueSet version pinned to 1.0. Version Parameter: default to 1.2.0

code-vnn-vsbb-default $validate-code

code. No CodeSystem version. ValueSet version pinned to 2.4 (bad). Version Parameter: default to 1.2.0

code-vnn-vsnn-check $validate-code

code. No CodeSystem version. No ValueSet version pinning. Version Parameter: check is 1.2.0

code-v10-vs1w-check $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: check is 1.2.0

code-v10-vs1wb-check $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: check is 1.2.0

code-v10-vs10-check $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.0. Version Parameter: check is1.2.0

code-v10-vs20-check $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.2. Version Parameter: check is 1.2.0

code-v10-vsbb-check $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). Version Parameter: check is 1.2.0

code-v10-vsnn-check $validate-code

code. CodeSystem version 1.0. No ValueSet version pinning. Version Parameter: check is 1.2.0

code-vbb-vs10-check $validate-code

code. CodeSystem version 2.4 (bad). ValueSet version pinned to 1.0. Version Parameter: check is 1.2.0

code-vbb-vsnn-check $validate-code

code. CodeSystem version 2.4 (bad). No ValueSet version pinning. Version Parameter: check is 1.2.0

code-vnn-vs1w-check $validate-code

code. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: check is 1.2.0

code-vnn-vs1wb-check $validate-code

code. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: check is 1.2.0

code-vnn-vs10-check $validate-code

code. No CodeSystem version. ValueSet version pinned to 1.0. Version Parameter: check is 1.2.0

code-vnn-vsbb-check $validate-code

code. No CodeSystem version. ValueSet version pinned to 2.4 (bad). Version Parameter: check is 1.2.0

code-vnn-vsnn-force $validate-code

code. No CodeSystem version. No ValueSet version pinning. Version Parameter: force to 1.2.0

code-v10-vs1w-force $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: force to 1.2.0

code-v10-vs1wb-force $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.x. Version Parameter: force to 1.2.0

code-v10-vs10-force $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.0. Version Parameter: force to 1.2.0

code-v10-vs20-force $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 1.2. Version Parameter: force to 1.2.0

code-v10-vsbb-force $validate-code

code. CodeSystem version 1.0. ValueSet version pinned to 2.4 (bad). Version Parameter: force to 1.2.0

code-v10-vsnn-force $validate-code

code. CodeSystem version 1.0. No ValueSet version pinning. Version Parameter: force to 1.2.0

code-vbb-vs10-force $validate-code

code. CodeSystem version 2.4 (bad). ValueSet version pinned to 1.0. Version Parameter: force to 1.2.0

code-vbb-vsnn-force $validate-code

code. CodeSystem version 2.4 (bad). No ValueSet version pinning. Version Parameter: force to 1.2.0

code-vnn-vs1w-force $validate-code

code. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: force to 1.2.0

code-vnn-vs1wb-force $validate-code

code. No CodeSystem version. ValueSet version pinned to 1.x. Version Parameter: force to 1.2.0

code-vnn-vs10-force $validate-code

code. No CodeSystem version. ValueSet version pinned to 1.0. Version Parameter: force to 1.2.0

code-vnn-vsbb-force $validate-code

code. No CodeSystem version. ValueSet version pinned to 2.4 (bad). Version Parameter: force to 1.2.0

code-vnn-vsmix-1 $validate-code

code (1). No CodeSystem version. ValueSet version includes both versions of the code system. No Version Parameter

code-vnn-vsmix-2 $validate-code

code (2). No CodeSystem version. ValueSet version includes both versions of the code system. No Version Parameter

vs-expand-all-v $expand

version specific expand tests

vs-expand-all-v1 $expand

version specific expand tests

vs-expand-all-v2 $expand

version specific expand tests

vs-expand-v-mixed $expand

version specific expand tests

vs-expand-v-n-request $expand

version specific expand tests

vs-expand-v-w $expand

version specific expand tests

vs-expand-v-wb $expand

version specific expand tests

vs-expand-v1 $expand

version specific expand tests

vs-expand-v2 $expand

version specific expand tests

vs-expand-all-v-force $expand

version specific expand tests

vs-expand-all-v1-force $expand

version specific expand tests

vs-expand-all-v2-force $expand

version specific expand tests

vs-expand-v-mixed-force $expand

version specific expand tests

vs-expand-v-n-force-request $expand

version specific expand tests

vs-expand-v-w-force $expand

version specific expand tests

vs-expand-v-wb-force $expand

version specific expand tests

vs-expand-v1-force $expand

version specific expand tests

vs-expand-v2-force $expand

version specific expand tests

vs-expand-all-v-default $expand

version specific expand tests

vs-expand-all-v1-default $expand

version specific expand tests

vs-expand-all-v2-default $expand

version specific expand tests

vs-expand-v-mixed-default $expand

version specific expand tests

vs-expand-v-n-default-request $expand

version specific expand tests

vs-expand-v-w-default $expand

version specific expand tests

vs-expand-v-wb-default $expand

version specific expand tests

vs-expand-v1-default $expand

version specific expand tests

vs-expand-v2-default $expand

version specific expand tests

vs-expand-all-v-check $expand

version specific expand tests

vs-expand-all-v1-check $expand

version specific expand tests

vs-expand-all-v2-check $expand

version specific expand tests

vs-expand-v-mixed-check $expand

version specific expand tests

vs-expand-v-n-check-request $expand

version specific expand tests

vs-expand-v-w-check $expand

version specific expand tests

vs-expand-v-wb-check $expand

version specific expand tests

vs-expand-v1-check $expand

version specific expand tests

vs-expand-v2-check $expand

version specific expand tests

vs-expand-versionless $expand

check expand without any version

overload general

A set of tests that test out handling of value sets that cross versions of the same code system

expand-all $expand

Expanding two versions of the same code system

expand-all-versioned $expand

Expanding two versions of the same code system, versioned

expand-all-merged $expand

Expanding two versions of the same code system, merging versions

expand-enum-good $expand

Expanding two versions of the same code system, codes selected from each version

expand-enum-bad $expand

Expanding two versions of the same code system, codes selected from both versions - but you can't do this

expand-exclude $expand

Excluding one version of the code system from the other (cheap diff analysis)

expand-exclude-versioned $expand

Excluding one version of the code system from the other (cheap diff analysis), versioned

expand-exclude-merged $expand

Excluding one version of the code system from the other (cheap diff analysis), merging versions

validate-all-good $validate-code

Is code in value set - in both versions

validate-all-good2 $validate-code

Is code in value set - in both versions, but display from the second

validate-all-good3 $validate-code

Is code in value set - in one version

validate-all-good4 $validate-code

Is code in value set - in one versions

validate-all-bad2 $validate-code

Is code in value set - in one versions

validate-all-bad2v $validate-code

code from one version, display from the other

expand-all-sysver $expand

Tests whether a system-version parameter forcing v1 overrides the value set's explicit dual-version includes. It should not, since it's just a default

expand-exclude-enum $expand

Expands a value set that includes all of both versions but excludes only code2 from v1 by enumeration, testing version-scoped exclusion of individual codes.

expand-mixed $expand

Expands a value set with one versioned include (v1) and one unversioned include, testing how the server resolves the unversioned reference.

validate-bad-enum-code1 $validate-code

Validates that code1 is rejected by the enum-good value set, since it's not in the enumerated list.

validate-bad-exclude-code1 $validate-code

Validates that code1 is rejected by the exclude value set, since it exists in both versions and the v1 overlap is excluded.

validate-bad-unknown $validate-code

Validates that a completely nonexistent code (code99) fails against the value set.

validate-v1code2-wrongdisplay $validate-code

Validates that code1 with version pinned to 1.0.0 succeeds, confirming version-pinning works for a code present in both versions

validate-bad-v1code4 $validate-code

Validates that code4 with version explicitly pinned to 1.0.0 fails, since code4 only exists in v2.

validate-bad-v2code3 $validate-code

Validates that code3 with version explicitly pinned to 2.0.0 fails, since code3 only exists in v1.

validate-good-code2-v1display $validate-code

Tests the ambiguous case of code2 with display "Display 2" and no version pin, where the display matches v1 but not v2

validate-good-enum-code3 $validate-code

Validates code3 against the enum-good value set, which explicitly enumerates it from v1

validate-good-exclude-code4 $validate-code

Validates that code4 is accepted by the exclude value set, where it's the only code surviving the v1 exclusion.

validate-good-v1code1 $validate-code

Validates that code1 with version pinned to 1.0.0 succeeds, confirming version-pinning works for a code present in both versions.

validate-good-v1code2-display $validate-code

Validates that code2 with version=1.0.0 and display "Display 2" succeeds, since that's the correct display for v1.

validate-good2a $validate-code

Validates that a codeableConcept with both versions in it works fine.

fragment general

Testing handling a code system fragment

fragment-expansion $expand

check that the fragment is reported correctly

validation-fragment-code-good $validate-code

if a code is a in a fragment, then it's all ok

validation-fragment-coding-good $validate-code

if a code is a in a fragment, then it's all ok

validation-fragment-codeableconcept-good $validate-code

if a code is a in a fragment, then it's all ok

validation-fragment-code-bad-code $validate-code

if a code is not in the fragment, we can't call it invalid (code variant)

validation-fragment-coding-bad-code $validate-code

if a code is not in the fragment, we can't call it invalid (coding variant)

validation-fragment-codeableconcept-bad-code $validate-code

if a code is not in the fragment, we can't call it invalid (CodeableConcept variant)

big general

Testing handling a big code system

big-echo-no-limit $expand

to be provided

big-echo-zero-fifty-limit $expand

to be provided

big-echo-fifty-fifty-limit $expand

to be provided

big-circle-bang $expand

to be provided

big-circle-validate $validate-code

to be provided

other general

Misc tests based on issues submitted by users

dual-filter $expand

to be provided

validation-dual-filter-in $validate-code

to be provided

validation-dual-filter-out $validate-code

to be provided

errors general

Testing Various Error Conditions

unknown-system1 $validate-code

Value set & request refers to an unknown system

unknown-system2 $validate-code

Value set & request refers to an unknown system; request is a different unknown system

broken-filter-validate $validate-code

Make sure that filters without value cause an error

broken-filter2-validate $validate-code

Make sure that filters without value cause an error (extension only)

broken-filter-expand $expand

Make sure that filters without value cause an error

combination-ok $validate-code

A value set that contains two identical codes - validates ok

combination-bad $validate-code

A value set that contains two identical codes - error if inferSystem is true

deprecated general

Testing Deprecated+Withdrawn warnings

withdrawn $expand

to be provided

not-withdrawn $expand

to be provided

withdrawn-validate $validate-code

to be provided

not-withdrawn-validate $validate-code

to be provided

experimental $expand

to be provided

experimental-validate $validate-code

to be provided

draft $expand

to be provided

draft-validate $validate-code

to be provided

vs-deprecation $expand

Deprecating a code in a valueset

deprecating-validate $validate-code

Validating a code that has been deprecated in the value set using a deprecated extension

deprecating-validate-2 $validate-code

Validating a code that has been deprecated in the value set

notSelectable general

Testing notSelectable

notSelectable-prop-all $expand

to be provided

notSelectable-noprop-all $expand

to be provided

notSelectable-reprop-all $expand

to be provided

notSelectable-unprop-all $expand

to be provided

notSelectable-prop-true $expand

to be provided

notSelectable-prop-trueUC $expand

to be provided

notSelectable-noprop-true $expand

to be provided

notSelectable-reprop-true $expand

to be provided

notSelectable-unprop-true $expand

to be provided

notSelectable-prop-false $expand

to be provided

notSelectable-noprop-false $expand

to be provided

notSelectable-reprop-false $expand

to be provided

notSelectable-unprop-false $expand

to be provided

notSelectable-prop-in $expand

to be provided

notSelectable-prop-out $expand

to be provided

notSelectable-prop-true-true $validate-code

to be provided

notSelectable-prop-trueUC-true $validate-code

to be provided

notSelectable-prop-in-true $validate-code

to be provided

notSelectable-prop-out-true $validate-code

to be provided

notSelectable-noprop-true-true $validate-code

to be provided

notSelectable-reprop-true-true $validate-code

to be provided

notSelectable-unprop-true-true $validate-code

to be provided

notSelectable-prop-true-false $validate-code

to be provided

notSelectable-prop-in-false $validate-code

to be provided

notSelectable-prop-in-unknown $validate-code

to be provided

notSelectable-prop-out-unknown $validate-code

to be provided

notSelectable-prop-out-false $validate-code

to be provided

notSelectable-noprop-true-false $validate-code

to be provided

notSelectable-reprop-true-false $validate-code

to be provided

notSelectable-unprop-true-false $validate-code

to be provided

notSelectable-prop-false-true $validate-code

to be provided

notSelectable-noprop-false-true $validate-code

to be provided

notSelectable-reprop-false-true $validate-code

to be provided

notSelectable-unprop-false-true $validate-code

to be provided

notSelectable-prop-false-false $validate-code

to be provided

notSelectable-noprop-false-false $validate-code

to be provided

notSelectable-reprop-false-false $validate-code

to be provided

notSelectable-unprop-false-false $validate-code

to be provided

notSelectable-noprop-true-unknown $validate-code

to be provided

notSelectable-reprop-true-unknown $validate-code

to be provided

notSelectable-unprop-true-unknown $validate-code

to be provided

notSelectable-prop-true-unknown $validate-code

to be provided

notSelectable-prop-false-unknown $validate-code

to be provided

notSelectable-noprop-false-unknown $validate-code

to be provided

notSelectable-reprop-false-unknown $validate-code

to be provided

notSelectable-unprop-false-unknown $validate-code

to be provided

notSelectable-prop-true-true-param-true $validate-code

to be provided

notSelectable-prop-true-true-param-false $validate-code

to be provided

notSelectable-prop-false-false-param-true $validate-code

to be provided

notSelectable-prop-false-false-param-false $validate-code

to be provided

inactive general

Testing Inactive codes

inactive-expand $expand

to be provided

inactive-inactive-expand $expand

to be provided

inactive-active-expand $expand

to be provided

inactive-1-validate $validate-code

to be provided

inactive-2-validate $validate-code

to be provided

inactive-3-validate $validate-code

to be provided

inactive-1a-validate $validate-code

to be provided

inactive-2a-validate $validate-code

to be provided

inactive-3a-validate $validate-code

to be provided

inactive-1b-validate $validate-code

to be provided

inactive-2b-validate $validate-code

to be provided

inactive-3b-validate $validate-code

to be provided

case general

Test Case Sensitivity handling

case-insensitive-code1-1 $validate-code

to be provided

case-insensitive-code1-2 $validate-code

to be provided

case-insensitive-code1-3 $validate-code

to be provided

case-sensitive-code1-1 $validate-code

to be provided

case-sensitive-code1-2 $validate-code

to be provided

case-sensitive-code1-3 $validate-code

to be provided

translate general

Tests for ConceptMap.$translate

translate-1 $translate

A very simple translation, using sourceCode + sourceSystem

translate-1-coding $translate

The same translation, but naming the source concept with sourceCoding

translate-1-codeableconcept $translate

The same translation, but naming the source concept with sourceCodeableConcept

translate-1-r4-code $translate

The same translation, using the R4 input names: code + system, and targetsystem

translate-1-r4-coding $translate

The same translation, using the R4 input names: coding, and targetsystem

translate-1-r4-codeableconcept $translate

The same translation, using the R4 input names: codeableConcept, and targetsystem

translate-2 $translate

Testing different relationship types

translate-2b $translate

Testing different relationship types

translate-3 $translate

Testing different relationship types

translate-4 $translate

Testing nomap functionality. In R4 the ConceptMap states this with a codeless 'unmatched' target; either way the response reports noMap and no concept

translate2 general

Tests for ConceptMap.$translate

translate-5 $translate

Testing unmapped functionality

translate-5a $translate

Testing unmapped functionality which specifying a particular map

translate-5b $translate

Testing unmapped functionality which specifying a particular map

translate-6a $translate

Testing other map - default concept map

translate-reverse-r5+ $translate

Same translation, but in reverse

translate-reverse-r5+-a $translate

reverse is not allowed in R5

translate-reverse-r4 $translate

Same translation, but in reverse, using the reverse parameter

translate-reverse-r4-a $translate

Same translation, using the reverse parameter (e.g. double reversed)

translate-reverse-r4-b $translate

Same translation, but in reverse, not using the reverse parameter

tho general

Misc assorted test cases from tho

act-class $expand

act class - don't remember what bug this was testing for but now it tests for proper handling of retired and deprecated codes

act-class-activeonly $expand

tests for proper handling of retired and deprecated codes (part 2)

act-exclusion $expand

tests for proper handling of excluded codes

subsumes-act-class-property-parent $subsumes

a code subsumes a code that names it in a subsumedBy property; act-class is a flat list, so there is no nesting to read

subsumes-act-class-property-child $subsumes

the mirror of subsumes-act-class-property-parent

subsumes-act-class-transitive $subsumes

subsumption follows the whole chain of subsumedBy properties, five links here

subsumes-act-class-transitive-reverse $subsumes

the mirror of subsumes-act-class-transitive

subsumes-act-class-equivalent $subsumes

a code is equivalent to itself

subsumes-act-class-siblings $subsumes

two codes with the same subsumedBy do not subsume each other

subsumes-act-class-cross-branch $subsumes

both codes are under ACT, but neither is on the other's path to it

subsumes-act-class-multiple-parents-first $subsumes

ENTRY states subsumedBy twice: this is the first parent

subsumes-act-class-multiple-parents-second $subsumes

and this is the second - a relationship a nested hierarchy cannot express at all

subsumes-act-class-multiple-parents-crossed $subsumes

two parents of the same code are not thereby related to each other

subsumes-act-class-unknown-code $subsumes

codeB is not in the code system

validate-isa-self $validate-code

is-a includes the code named in the filter, not just what is under it

validate-isa-child $validate-code

a code that names the filter code in a subsumedBy property is in the value set

validate-isa-deep $validate-code

and so is one five property links below it

validate-isa-parent $validate-code

is-a runs downwards: the code above the filter code is not in the value set

validate-isa-other-branch $validate-code

a code in a different branch of the same code system is not in it either

validate-descendent-of-self $validate-code

descendent-of excludes the code named in the filter - the one thing that distinguishes it from is-a

validate-descendent-of-child $validate-code

everything below the filter code is in it, exactly as for is-a

validate-descendent-of-deep $validate-code

including the deep descendants

validate-isnota-self $validate-code

is-not-a excludes the code named in the filter as well as its descendants

validate-isnota-descendant $validate-code

a deep descendant of the filter code is excluded too, not just the direct children

validate-isnota-parent $validate-code

the code above the filter code is in an is-not-a value set

validate-isnota-other-branch $validate-code

and so is a code in a different branch

validate-child-of-child $validate-code

child-of picks up a direct child, which act-class states in a subsumedBy property rather than by nesting

validate-child-of-self $validate-code

child-of does not include the code named in the filter, unlike is-a

validate-child-of-grandchild $validate-code

and it stops at the direct children, which is what separates it from descendent-of

validate-isa-second-parent $validate-code

ENTRY is in an is-a on _ActContainer, the second of its two subsumedBy parents - a relationship nesting cannot express

validate-isa-second-parent-out $validate-code

a code under the other container is not in it

validate-isa-unknown-code $validate-code

a code that is not in the code system at all, validated against a filtered value set

exclude general

Tests for proper functioning of exclude

exclude-1 $expand

Test a simple exclude

exclude-2 $expand

Test a simple exclude combined with a filter

exclude-zero $expand

include and exclude the same code

exclude-all $expand

include and exclude all codes

exclude-combo $expand

exclude by value set

include-combo $expand

include limit by value set

exclude-gender $expand

See https://github.com/HealthIntersections/FHIRsmith/issues/156

exclude-gender2 $expand

See https://github.com/HealthIntersections/FHIRsmith/issues/156

search general

Tests for proper functioning of text search. Note what we're not interested in the implementation of the text search itself, so we only test very obvious results. We're just interested in testing support for the parameter

search-all-yes $expand

Test a simple search

search-all-no $expand

Test a simple search that returns no results

search-filter-yes $expand

Test a simple search

search-filter-no $expand

Test a simple search that returns no results

search-enum-yes $expand

Test a simple search

search-enum-no $expand

Test a simple search that returns no results

default-valueset-version general

Test the default-valueset-version parameter

direct-expand-one $expand

Test the actual value set directly - v1

direct-expand-two $expand

Test the actual value set directly - v2

indirect-expand-one $expand

Test the actual value set indirectly - v1

indirect-expand-two $expand

Test the actual value set indirectly - v2

indirect-expand-zero $expand

Test the actual value set indirectly - versionless

indirect-expand-zero-pinned $expand

Test the actual value set indirectly - versionless, and specify a version

indirect-expand-zero-pinned-wrong $expand

Test the actual value set indirectly - versionless, and specify a version that doesn't exist

indirect-validation-one $validate-code

Test the value set indirectly

indirect-validation-two $validate-code

Test the value set indirectly

indirect-validation-zero $validate-code

Test the value set indirectly

indirect-validation-zero-pinned $validate-code

Test the value set indirectly

indirect-validation-zero-pinned-wrong $validate-code

Test the value set indirectly

tx.fhir.org tx.fhir.org

These are tx.fhir.org specific tests. There's no expectation that other servers will pass these tests, and they are not executed by default. (other servers can, but they depend on other set up not controlled by the tests

snomed-validation-1 $cs-validate-code

to be provided

loinc-lookup-code $lookup

to be provided

loinc-lookup-part $lookup

to be provided

loinc-lookup-list $lookup

to be provided

loinc-lookup-answer $lookup

to be provided

loinc-validate-code $cs-validate-code

to be provided

loinc-validate-code-uz $cs-validate-code

to be provided

loinc-validate-discouraged-code $cs-validate-code

to be provided

loinc-validate-code-supp1 $cs-validate-code

LOINC supplement test - code in the supplement, but english

loinc-validate-code-supp2 $cs-validate-code

LOINC supplement test - code in the supplement, but german from the supplement

loinc-validate-part $cs-validate-code

to be provided

loinc-validate-list $cs-validate-code

to be provided

loinc-validate-answer $cs-validate-code

to be provided

loinc-validate-invalid $cs-validate-code

to be provided

loinc-expand-enum $expand

to be provided

loinc-expand-all $expand

to be provided

hgvs-expand-all $expand

Attempt to expand the whole HGVS code system: it has a grammar and cannot be iterated, so a not-supported OperationOutcome is expected

loinc-expand-all-limited $expand

to be provided

loinc-expand-enum-bad $expand

to be provided

loinc-expand-status $expand

to be provided

loinc-expand-parent $expand

to be provided

loinc-expand-class-regex $expand

to be provided

loinc-expand-prop-component $expand

to be provided

loinc-expand-prop-method $expand

to be provided

loinc-expand-prop-component-str $expand

to be provided

loinc-expand-prop-order-obs $expand

to be provided

loinc-expand-concept-is-a $expand

to be provided

loinc-expand-copyright $expand

to be provided

loinc-expand-scale-type $expand

to be provided

loinc-validate-enum-good $validate-code

to be provided

loinc-validate-enum-bad $validate-code

to be provided

loinc-validate-filter-prop-component-good $validate-code

to be provided

loinc-validate-filter-prop-component-bad $validate-code

to be provided

loinc-validate-filter-status-good $validate-code

to be provided

loinc-validate-filter-status-bad $validate-code

to be provided

loinc-validate-filter-class-regex-good $validate-code

to be provided

loinc-validate-filter-class-regex-bad $validate-code

to be provided

loinc-validate-filter-scale-type-good $validate-code

to be provided

loinc-validate-filter-scale-type-bad $validate-code

to be provided

loinc-expand-list-request-parameters $expand

to be provided

loinc-validate-list-good $validate-code

to be provided

loinc-validate-list-bad $validate-code

to be provided

loinc-expand-filter-list-request-parameters $expand

to be provided

loinc-validate-filter-list-type-good $validate-code

to be provided

loinc-validate-filter-list-bad $validate-code

to be provided

loinc-expand-filter-dockind-request-parameters $expand

to be provided

loinc-validate-filter-dockind-type-good $validate-code

to be provided

loinc-validate-filter-dockind-bad $validate-code

to be provided

loinc-validate-filter-classtype-good $validate-code

test classtype filter (numerical)

loinc-validate-filter-classtype-bad $validate-code

test classtype filter (numerical)

loinc-expand-filter-answers-for1 $expand

Test answers-for filters with LL code

loinc-expand-filter-answers-for2 $expand

Test answers-for filters with normal code

loinc-expand-filter-answer-list $expand

Test answer-list filters with normal code

snomed-expand-active $expand

Test the inactive filter

snomed-expand-inactive $expand

Test the inactive filter

snomed-expand-inactive2 $expand

Test the inactive filter

snomed-expand-moduleid-1 $expand

Test ModuleId filter

snomed-expand-moduleid-2 $expand

Test ModuleId filter

snomed-expand-moduleid-3 $expand

Test ModuleId filter

snomed-expand-moduleid-4 $expand

Test ModuleId filter

snomed-expand-property-1 $expand

Test Property filter

snomed-expand-property-2 $expand

Test Property filter

snomed-validate-active-bad $validate-code

Test inactive filter

snomed-validate-active-good $validate-code

Test inactive filter

snomed-validate-inactive-bad $validate-code

Test inactive filter

snomed-validate-inactive-good $validate-code

Test inactive filter

snomed-validate-moduleid-bad $validate-code

Test moduleid filter

snomed-validate-moduleid-good $validate-code

Test moduleid filter

snomed-validate-property-bad $validate-code

Test Property filter

snomed-validate-property-good $validate-code

Test Property filter

snomed-translate $translate

Implicit Snomed Concept Map

loinc-subsumes-equivalent $subsumes

A LOINC code is equivalent to itself

loinc-subsumes-parent $subsumes

A LOINC part subsumes a code beneath it in the multiaxial hierarchy

loinc-subsumes-child $subsumes

the mirror of loinc-subsumes-parent

loinc-subsumes-unrelated $subsumes

Two unrelated LOINC codes

loinc-subsumes-unknown-code $subsumes

codeA is not a LOINC code

snomed snomed

This snomed tests are based on the testing subset in the tx-ecosystem IG github repo (see /tx-source)

snomed-inactive-display-lenient $cs-validate-code

check that inactive displays are validated properly

snomed-inactive-display-notlenient $cs-validate-code

check that inactive displays are validated properly

snomed-isa-in $validate-code

check that codes are validated properly (is-a heirachy) - in the value set

snomed-isa-out $validate-code

check that codes are validated properly (is-a heirachy) - not in the value set

snomed-expand-inactive $expand

check that inactive concepts and displays are expanded properly

snomed-expand-isa $expand

check that a set of concepts and displays are expanded properly (is-a)

snomed-expand-count-all $expand

Smoke test: total concept count for the loaded SNOMED edition subset must be 2206.

snomed-expand-too-big $expand

return too many codes at once - fails

lookup $lookup

Tests the $lookup operation for a simple SCT concept

lookup-pc $lookup

Tests the $lookup operation for a complex SCT expression

validate-code-pc-good $cs-validate-code

Tests the $validate-code operation for a complex SCT expression

validate-code-pc-bad1 $cs-validate-code

Tests the $validate-code operation for a complex SCT expression with a wrong qualifier code

validate-code-pc-bad2 $cs-validate-code

Tests the $validate-code operation for a complex SCT expression with a wrong qualifier code - the codes are valid but they are reversed

validate-code-pc-nested-good $cs-validate-code

Tests the $validate-code operation for an expression whose attribute value is itself refined - right hand as the procedure site

validate-code-pc-mrcm-lateralizable $cs-validate-code

The concept model does not allow laterality on a body structure that is not in the lateralizable body structure reference set

validate-code-pc-mrcm-domain $cs-validate-code

The concept model does not allow an attribute outside its domain - finding site on a body structure

validate-code-pc-mrcm-range $cs-validate-code

The concept model does not allow a value outside the attribute's range - a body structure as the value of laterality

validate-code-pc-mrcm-cardinality $cs-validate-code

The concept model does not allow an attribute more times than its cardinality - laterality is 0..1

validate-code-pc-mrcm-grouped $cs-validate-code

The concept model does not allow an ungrouped attribute inside a relationship group - laterality is ungrouped

validate-code-pc-concrete-good $cs-validate-code

Tests the $validate-code operation for an expression with a concrete value

validate-code-pc-scg-no-comma $cs-validate-code

The comma before an attribute group is optional in the compositional grammar, so an attribute set followed directly by a group has to be accepted - it normalises to the form with the comma

validate-code-pc-scg-comma $cs-validate-code

The same expression written with the optional comma is already the normal form, so it validates with no issues

validate-code-pc-mrcm-concrete-range $cs-validate-code

The concept model does not allow a concrete value outside the attribute's range - the value must be greater than zero

validate-code-pc-mrcm-concrete-int $cs-validate-code

The concept model does not allow a decimal where the attribute's range is an integer

validate-code-pc-mrcm-concrete-wanted $cs-validate-code

The concept model does not allow a concept where the attribute's range is a concrete value

validate-code-pc-mrcm-concept-wanted $cs-validate-code

The concept model does not allow a concrete value where the attribute's range is a concept

validate-code-pc-none $validate-code

Checks that a valid expression is not allowed when expressions are not allowed

validate-code-pc-list $validate-code

Checks that a valid expression is allowed when expressions are listed

validate-code-pc-list-bad $validate-code

Checks that a valid expression is not allowed just because it's primacy code is listed

validate-code-pc-filter $validate-code

Checks that a valid expression is allowed when expressions are allowed

expand-pc-none $expand

Expands no expresssions allowed - check settings

expand-pc-list $expand

Checks that a valid expression is not allowed just because it's primacy code is listed

expand-pc-filter $expand

Checks that a valid expression is allowed when expressions are allowed

validate-code-implied-1 $validate-code

Check that implied value sets work (isa)

validate-code-implied-1b $validate-code

Check that implied value sets work (bad isa)

validate-code-implied-2 $validate-code

Check that implied value sets work (refset)

validate-code-implied-2b $validate-code

Check that implied value sets work (refset)

subsumes-simple $subsumes

A code is subsumed by its stated parent

subsumes-parent $subsumes

A code subsumes its stated child

subsumes-equivalent $subsumes

A code is equivalent to itself

subsumes-transitive $subsumes

Subsumption is transitive - a code subsumes a distant descendant

subsumes-siblings $subsumes

Two sibling codes do not subsume each other

subsumes-disjoint $subsumes

Two codes in different top level hierarchies do not subsume each other

subsumes-coding $subsumes

Subsumption using codingA/codingB instead of system + codeA/codeB

subsumes-unknown-code-a $subsumes

codeA is a well formed SNOMED code that is not in this edition

subsumes-unknown-code-b $subsumes

codeB is a well formed SNOMED code that is not in this edition

subsumes-invalid-code $subsumes

codeA is not a valid SNOMED code at all

subsumes-bad-version $subsumes

the version names a SNOMED edition the server does not have

subsumes-bad-system $subsumes

the system is not a code system the server knows

subsumes-expr-refined-vs-parent $subsumes

a refined expression is still subsumed by an ancestor of its focus concept

subsumes-expr-parent-vs-refined $subsumes

the mirror of subsumes-expr-refined-vs-parent

subsumes-expr-vs-focus $subsumes

a refined expression is subsumed by its own focus concept

subsumes-expr-attr-value $subsumes

same attribute, and the value in A subsumes the value in B

subsumes-expr-attr-value-reverse $subsumes

the mirror of subsumes-expr-attr-value

subsumes-expr-attr-unrelated $subsumes

same attribute, unrelated values: structure finds nothing, which does not establish that nothing is there

subsumes-expr-extra-attribute $subsumes

B carries every attribute A does, and one more

subsumes-expr-different-attributes $subsumes

each expression refines an attribute the other does not: no structural relationship either way, and no proof that none exists

subsumes-expr-primitive-focus $subsumes

an expression against a PRIMITIVE concept whose entailed attributes satisfy it - the attributes are necessary conditions, so they count

subsumes-expr-normal-form $subsumes

a concept against its own long normal form written out

subsumes-expr-redundant-refinement $subsumes

a refinement that restates the concept's own definition

subsumes-expr-grouped-ungrouped $subsumes

the same attribute grouped and ungrouped: the MRCM requires |Finding site| to be grouped, so the ungrouped form is not a valid expression

subsumes-expr-ungrouped-morphology $subsumes

the grouping rule is not specific to |Finding site|: |Associated morphology| is grouped too

subsumes-expr-ungrouped-laterality $subsumes

|Laterality| is ungrouped in the MRCM, so writing it outside a group is correct and subsumption proceeds

subsumes-expr-with-terms $subsumes

the same expression with and without terms

subsumes-expr-conjunction $subsumes

a conjunction of a concept with its own ancestor

subsumes-expr-precoordinated-match $subsumes

an expression that means exactly the same as a precoordinated concept

subsumes-expr-subsumes-precoordinated $subsumes

a post-coordinated expression subsuming a precoordinated concept

sct-ecl snomed

SNOMED CT ECL tests (expand + validate-code), split out of the snomed suite for manageability. Files live in sct/ecl/.

snomed-validate-ecl-descendents-code-in $validate-code

validate-code against ECL "descendents": a code that IS in the set

snomed-validate-ecl-descendents-code-out $validate-code

validate-code against ECL "descendents": a code that is NOT in the set

snomed-validate-ecl-descendents-expr-in $validate-code

validate-code against ECL "descendents": a post-coordinated expression that IS in the set

snomed-validate-ecl-descendents-expr-out $validate-code

validate-code against ECL "descendents": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-descOrSelf-code-in $validate-code

validate-code against ECL "descOrSelf": a code that IS in the set

snomed-validate-ecl-descOrSelf-code-out $validate-code

validate-code against ECL "descOrSelf": a code that is NOT in the set

snomed-validate-ecl-descOrSelf-expr-in $validate-code

validate-code against ECL "descOrSelf": a post-coordinated expression that IS in the set

snomed-validate-ecl-descOrSelf-expr-out $validate-code

validate-code against ECL "descOrSelf": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-children-code-in $validate-code

validate-code against ECL "children": a code that IS in the set

snomed-validate-ecl-children-code-out $validate-code

validate-code against ECL "children": a code that is NOT in the set

snomed-validate-ecl-children-expr-in $validate-code

validate-code against ECL "children": a post-coordinated expression that IS in the set

snomed-validate-ecl-children-expr-out $validate-code

validate-code against ECL "children": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-childrenOrSelf-code-in $validate-code

validate-code against ECL "childrenOrSelf": a code that IS in the set

snomed-validate-ecl-childrenOrSelf-code-out $validate-code

validate-code against ECL "childrenOrSelf": a code that is NOT in the set

snomed-validate-ecl-childrenOrSelf-expr-in $validate-code

validate-code against ECL "childrenOrSelf": a post-coordinated expression that IS in the set

snomed-validate-ecl-childrenOrSelf-expr-out $validate-code

validate-code against ECL "childrenOrSelf": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-ancestors-code-in $validate-code

validate-code against ECL "ancestors": a code that IS in the set

snomed-validate-ecl-ancestors-code-out $validate-code

validate-code against ECL "ancestors": a code that is NOT in the set

snomed-validate-ecl-ancestors-expr-out $validate-code

validate-code against ECL "ancestors": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-ancOrSelf-code-in $validate-code

validate-code against ECL "ancOrSelf": a code that IS in the set

snomed-validate-ecl-ancOrSelf-code-out $validate-code

validate-code against ECL "ancOrSelf": a code that is NOT in the set

snomed-validate-ecl-ancOrSelf-expr-out $validate-code

validate-code against ECL "ancOrSelf": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-parents-code-in $validate-code

validate-code against ECL "parents": a code that IS in the set

snomed-validate-ecl-parents-code-out $validate-code

validate-code against ECL "parents": a code that is NOT in the set

snomed-validate-ecl-parents-expr-out $validate-code

validate-code against ECL "parents": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-parentsOrSelf-code-in $validate-code

validate-code against ECL "parentsOrSelf": a code that IS in the set

snomed-validate-ecl-parentsOrSelf-code-out $validate-code

validate-code against ECL "parentsOrSelf": a code that is NOT in the set

snomed-validate-ecl-parentsOrSelf-expr-out $validate-code

validate-code against ECL "parentsOrSelf": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-refinement-simple-code-in $validate-code

validate-code against ECL "refinement-simple": a code that IS in the set

snomed-validate-ecl-refinement-simple-code-out $validate-code

validate-code against ECL "refinement-simple": a code that is NOT in the set

snomed-validate-ecl-refinement-simple-expr-in $validate-code

validate-code against ECL "refinement-simple": a post-coordinated expression that IS in the set

snomed-validate-ecl-refinement-simple-expr-out $validate-code

validate-code against ECL "refinement-simple": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-refinement-group-code-out $validate-code

validate-code against ECL "refinement-group": a code that is NOT in the set

snomed-validate-ecl-refinement-group-expr-in $validate-code

validate-code against ECL "refinement-group": a post-coordinated expression that IS in the set

snomed-validate-ecl-refinement-group-expr-out $validate-code

validate-code against ECL "refinement-group": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-refinement-morphology-code-in $validate-code

validate-code against ECL "refinement-morphology": a code that IS in the set

snomed-validate-ecl-refinement-morphology-code-out $validate-code

validate-code against ECL "refinement-morphology": a code that is NOT in the set

snomed-validate-ecl-refinement-morphology-expr-in $validate-code

validate-code against ECL "refinement-morphology": a post-coordinated expression that IS in the set

snomed-validate-ecl-refinement-morphology-expr-out $validate-code

validate-code against ECL "refinement-morphology": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-refinement-wildcard-code-in $validate-code

validate-code against ECL "refinement-wildcard": a code that IS in the set

snomed-validate-ecl-refinement-wildcard-code-out $validate-code

validate-code against ECL "refinement-wildcard": a code that is NOT in the set

snomed-validate-ecl-refinement-wildcard-expr-in $validate-code

validate-code against ECL "refinement-wildcard": a post-coordinated expression that IS in the set

snomed-validate-ecl-refinement-wildcard-expr-out $validate-code

validate-code against ECL "refinement-wildcard": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-refinement-cardinality-code-in $validate-code

validate-code against ECL "refinement-cardinality": a code that IS in the set

snomed-validate-ecl-refinement-cardinality-code-out $validate-code

validate-code against ECL "refinement-cardinality": a code that is NOT in the set

snomed-validate-ecl-refinement-cardinality-expr-in $validate-code

validate-code against ECL "refinement-cardinality": a post-coordinated expression that IS in the set

snomed-validate-ecl-refinement-cardinality-expr-out $validate-code

validate-code against ECL "refinement-cardinality": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-refinement-cardinality-grouped-code-in $validate-code

validate-code against ECL "refinement-cardinality-grouped": a code that IS in the set

snomed-validate-ecl-refinement-cardinality-grouped-code-out $validate-code

validate-code against ECL "refinement-cardinality-grouped": a code that is NOT in the set

snomed-validate-ecl-refinement-cardinality-grouped-expr-in $validate-code

validate-code against ECL "refinement-cardinality-grouped": a post-coordinated expression that IS in the set

snomed-validate-ecl-refinement-cardinality-grouped-expr-out $validate-code

validate-code against ECL "refinement-cardinality-grouped": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-refinement-cardinality-rolegroup-code-in $validate-code

validate-code against ECL "refinement-cardinality-rolegroup": a code that IS in the set

snomed-validate-ecl-refinement-cardinality-rolegroup-code-out $validate-code

validate-code against ECL "refinement-cardinality-rolegroup": a code that is NOT in the set

snomed-validate-ecl-refinement-cardinality-rolegroup-expr-in $validate-code

validate-code against ECL "refinement-cardinality-rolegroup": a post-coordinated expression that IS in the set

snomed-validate-ecl-refinement-cardinality-rolegroup-expr-out $validate-code

validate-code against ECL "refinement-cardinality-rolegroup": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-memberOf-refset-code-in $validate-code

validate-code against ECL "memberOf-refset": a code that IS in the set

snomed-validate-ecl-memberOf-refset-code-out $validate-code

validate-code against ECL "memberOf-refset": a code that is NOT in the set

snomed-validate-ecl-memberOf-refset-expr-out $validate-code

validate-code against ECL "memberOf-refset": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-minus-code-in $validate-code

validate-code against ECL "minus": a code that IS in the set

snomed-validate-ecl-minus-code-out $validate-code

validate-code against ECL "minus": a code that is NOT in the set

snomed-validate-ecl-minus-expr-in $validate-code

validate-code against ECL "minus": a post-coordinated expression that IS in the set

snomed-validate-ecl-minus-expr-out $validate-code

validate-code against ECL "minus": a post-coordinated expression that is NOT in the set

snomed-validate-ecl-wildcard-code-in $validate-code

validate-code against ECL "wildcard": a code that IS in the set

snomed-validate-ecl-wildcard-expr-in $validate-code

validate-code against ECL "wildcard": a post-coordinated expression that IS in the set

snomed-validate-ecl-wildcard-minus-code-in $validate-code

validate-code against ECL "wildcard-minus": a code that IS in the set

snomed-validate-ecl-wildcard-minus-code-out $validate-code

validate-code against ECL "wildcard-minus": a code that is NOT in the set

snomed-validate-ecl-wildcard-minus-expr-in $validate-code

validate-code against ECL "wildcard-minus": a post-coordinated expression that IS in the set

snomed-validate-ecl-wildcard-minus-expr-out $validate-code

validate-code against ECL "wildcard-minus": a post-coordinated expression that is NOT in the set

snomed-expand-ecl-descOrSelf $expand

check that a set of concepts and displays are expanded properly (ecl descendent-or-self)

snomed-expand-ecl-descendents $expand

check that a set of concepts and displays are expanded properly (ecl descendent)

snomed-expand-ecl-ancestors $expand

check that a set of concepts and displays are expanded properly (ecl ancestor)

snomed-expand-ecl-ancOrSelf $expand

check that a set of concepts and displays are expanded properly (ecl ancestor-or-self)

snomed-expand-ecl-childrenOrSelf $expand

check that a set of concepts and displays are expanded properly (ecl descendent-or-self)

snomed-expand-ecl-children $expand

check that a set of concepts and displays are expanded properly (ecl descendent)

snomed-expand-ecl-parents $expand

check that a set of concepts and displays are expanded properly (ecl ancestor)

snomed-expand-ecl-parentsOrSelf $expand

check that a set of concepts and displays are expanded properly (ecl ancestor-or-self)

snomed-expand-ecl-wildcard $expand

All active concepts in the subset (wildcard).

snomed-expand-ecl-memberOf-refset $expand

Members of the REPLACED-BY association reference set.

snomed-expand-ecl-memberOf-nonRefset $expand

Negative case: ^ applied to a concept that is not a reference set should error.

snomed-expand-ecl-or $expand

Union of Cellulitis subtree and Liver-structure subtree.

snomed-expand-ecl-and $expand

Intersection: Cellulitis subtree AND Disease subtree; should equal << 128045006.

snomed-expand-ecl-minus $expand

Exclusion: Disease subtree minus Cellulitis subtree.

snomed-expand-ecl-minus-empty $expand

Degenerate exclusion: set minus itself, expects empty.

snomed-expand-ecl-wildcard-minus $expand

All active concepts minus the Liver-structure subtree.

snomed-expand-ecl-grouped-or $expand

Grouped OR: (<< A OR << B) AND << C — OR subexpression parenthesised; union of cellulitis and liver-structure subtrees intersected with disease; yields 1 result.

snomed-expand-ecl-grouped-and $expand

Grouped AND: << A OR (<< B AND << C) — AND subexpression parenthesised; liver-structure unioned with intersection of cellulitis and disease; yields 311 results.

snomed-expand-ecl-ambiguous-precedence $expand

Invalid ECL: mixing AND/OR without explicit grouping is forbidden by ECL spec (section 6.4) — must return an error.

snomed-expand-ecl-term-match $expand

Concept reference with matching term; should be accepted.

snomed-expand-ecl-term-mismatch $expand

Concept reference with incorrect term; should error with a term-mismatch message.

snomed-expand-ecl-term-with-operator $expand

Hierarchy operator plus concept plus term; should expand to same set as << 10200004.

snomed-expand-ecl-unknown-concept $expand

Unknown (non-existent) concept ID; expects an unknown-concept error.

snomed-expand-ecl-invalid-sctid $expand

Non-numeric focus concept; expects a lexer/parser error.

snomed-expand-ecl-missing-focus $expand

Operator with nothing after it; expects a parser error.

snomed-expand-ecl-trailing-tokens $expand

Extra tokens after a complete expression; expects a parser error.

snomed-expand-ecl-nested-parens $expand

Deeply nested parentheses; should expand to the same set as << 10200004.

snomed-expand-ecl-refinement-simple $expand

Refinement: Disease with finding-site in the Liver subtree. Currently unsupported; expect a clear error.

snomed-expand-ecl-refinement-morphology $expand

Refinement: Disease with associated-morphology = Closed fracture. Currently unsupported.

snomed-expand-ecl-refinement-wildcard $expand

Refinement with wildcard value. Currently unsupported.

snomed-expand-ecl-refinement-group $expand

Refinement with an attribute group. Currently unsupported.

snomed-expand-ecl-refinement-cardinality $expand

Ungrouped [1..1] cardinality: exactly 1 Finding site in liver across all role groups — excludes concepts with 2+ groups each containing a liver Finding site (573).

snomed-expand-ecl-refinement-cardinality-grouped $expand

Grouped [1..1] cardinality: exactly 1 role group containing exactly 1 Finding site in liver — same result as ungrouped for typical SNOMED models (573).

snomed-expand-ecl-refinement-cardinality-rolegroup $expand

Role group cardinality without outer count: at least one role group containing exactly 1 Finding site in liver — more permissive, includes concepts with multiple groups each having 1 liver Finding site (661).

snomed-expand-ecl-dotted $expand

Dotted expression: finding-site values across Disease descendants. Currently unsupported.

batch general

Test Batch Validation

batch-validate $batch-validate

Simple use of the batch validate operation

batch-validate-bad $batch-validate

Simple use of the batch validate operation

omop omop

Tests for OMOP implementations. Note that some servers only do OMOP (and some don't). The tests are based on a stable subset of OMOP maintained by Davera Gabriel

omop-basic-validation-code-good $cs-validate-code

Just validate a randomly chosen real OMOP code provided as system and code

omop-basic-validation-coding-good $cs-validate-code

Just validate a randomly chosen real OMOP code provided as coding

omop-basic-validation-codeableconcept-good $cs-validate-code

Just validate a randomly chosen real OMOP code provided as codeableConcept

omop-basic-validation-code-bad $cs-validate-code

Just validate a randomly chosen fake OMOP code that is not valid provided as system and code

omop-basic-validation-coding-bad $cs-validate-code

Just validate a randomly chosen fake OMOP code that is not valid provided as coding

omop-basic-validation-codeableconcept-bad $cs-validate-code

Just validate a randomly chosen fake OMOP code that is not valid provided as CodeableConcept

omop-basic-validation-code-bad-display $cs-validate-code

Just validate a randomly chosen real OMOP code with a wrong display provided as system, code and display

omop-basic-validation-coding-bad-display $cs-validate-code

Just validate a randomly chosen real OMOP code with a wrong display provided as coding

omop-basic-validation-codeableconcept-bad-display $cs-validate-code

Just validate a randomly chosen real OMOP code with a wrong display provided as CodeableConcept

omop-basic-validation-code-bad-version $cs-validate-code

Just validate a randomly chosen real OMOP code with a wrong display provided as system, code and display

omop-basic-validation-coding-bad-version $cs-validate-code

Just validate a randomly chosen real OMOP code with a wrong display provided as coding

omop-basic-validation-codeableconcept-bad-version $cs-validate-code

Just validate a randomly chosen real OMOP code with a wrong display provided as CodeableConcept

omop-basic-validation-code-good-vs $validate-code

Just validate a randomly chosen real OMOP code provided as system and code and require that it's in a particular domain by value set (it is!)

omop-basic-validation-coding-good-vs $validate-code

Just validate a randomly chosen real OMOP code provided as a coding and require that it's in a particular domain by value set (it is!)

omop-basic-validation-codeableconcept-good-vs $validate-code

Just validate a randomly chosen real OMOP code provided as a CodeableConcept and require that it's in a particular domain by value set (it is!)

omop-basic-validation-code-bad-vs $validate-code

Just validate a randomly chosen real OMOP code provided as system and code and require that it's in a particular domain by value set (it is not!)

omop-basic-validation-coding-bad-vs $validate-code

Just validate a randomly chosen real OMOP code provided as a coding and require that it's in a particular domain by value set (it is not!)

omop-basic-validation-codeableconcept-bad-vs $validate-code

Just validate a randomly chosen real OMOP code provided as a CodeableConcept and require that it's in a particular domain by value set (it is not!)

omop-lookup-code $lookup

Lookup a standard OMOP code

omop-lookup-code2 $lookup

lookup a non-standard OMOP Code

omop-lookup-code3 $lookup

lookup a non-standard OMOP Code

omop-basic-validation-code-good-vs-url $validate-code

Same as omop-basic-validation-code-good-vs but passing a value set in

omop-basic-validation-code-bad-vs-url $validate-code

Same as omop-basic-validation-code-bad-vs but passing a value set in

omop-expand-explicit $expand

Expand an OMOP value set

translate-loinc-implicit $translate

translating sucessfully from OMOP to LOINC, leaving it to the server to choose a concept map if it can find one. Note that not all servers are willing to let the client trust it like this, so this test is optional

translate-loinc-implicit-bad $translate

translating unsucessfully from OMOP to LOINC, leaving it to the server to choose a concept map if it can find one, Also this test - and the last one - assume that the server has no other source of OMOP -> LOINC mappings available

UCUM tx.fhir.org

UCUM Test Cases

lookup $lookup

Tests the $lookup operation

lookup-with-annotation $lookup

Tests the $lookup operation with annotation

expand-ucum-all-4 $expand

Tests the $expand operation for all codes (this is a special case). The special value set changed between R4 and R5

expand-ucum-all-5 $expand

Tests the $expand operation for all codes (this is a special case). The special value set changed between R4 and R5

expand-ucum-canonical $expand

Tests the $expand operation for all codes (this is a special case)

validate-ucum-canonical-good $validate-code

Tests the $validate-code operation for a valid UCUM code

validate-ucum-canonical-bad $validate-code

Tests the $validate-code operation for an valid UCUM code not in the canonicl value set

validate-all-canonical-good $validate-code

Tests the $validate-code operation for a valid UCUM code

validate-ucum-all-bad $validate-code

Tests the $validate-code operation for an invalid UCUM code

ucum-subsumes-equivalent $subsumes

A unit is equivalent to itself

ucum-subsumes-canonical $subsumes

The same unit written two different ways

ucum-subsumes-unrelated $subsumes

Two unrelated units

ucum-subsumes-scaled $subsumes

A unit and a scaled version of it - UCUM has no hierarchy

ucum-subsumes-invalid-code $subsumes

codeA is not a valid UCUM unit

ucum-subsumes-annotation $subsumes

A unit with an annotation, and the same unit without

ucum-subsumes-derived $subsumes

A named derived unit and the expression it is defined as

ucum-subsumes-offset $subsumes

Two units of the same property whose conversion has an offset

ucum-subsumes-same-canonical $subsumes

Two units with the same canonical unit but different magnitudes

ucum-subsumes-both-scaled $subsumes

The same canonical unit again, with neither magnitude being 1

ucum-subsumes-dimensionless $subsumes

Two dimensionless units, told apart only by magnitude

mimetypes mimetypes

Tests for the mime types code system (BCP 13). Type and subtype have no hierarchy, but parameters narrow a media type, and the base filter selects by type or type/subtype

mimetype-subsumes-equivalent $subsumes

A media type is equivalent to itself

mimetype-subsumes-unrelated $subsumes

Two unrelated media types

mimetype-subsumes-suffix $subsumes

A media type and one with a structured suffix of it

mimetype-subsumes-parameter $subsumes

A media type and the same type carrying a parameter

mimetype-subsumes-parameter-reverse $subsumes

the mirror of mimetype-subsumes-parameter

mimetype-subsumes-parameter-siblings $subsumes

The same parameter with two different values

mimetype-subsumes-parameter-added $subsumes

A parameter set and a superset of it

mimetype-subsumes-parameter-disjoint $subsumes

Two parameter sets, neither containing the other

mimetype-subsumes-default-explicit $subsumes

a parameter written out at its default value: RFC 6657 section 4 keeps US-ASCII as the default charset for text/plain, so the bare form already carries it and the two codes are the same media type

mimetype-subsumes-default-contradicted $subsumes

a parameter away from its default: because bare text/plain means charset=us-ascii, a different charset contradicts it rather than narrowing it. This is where the rule that a parameter narrows does not hold

mimetype-subsumes-default-format $subsumes

the same for format, which RFC 3676 section 4 defaults to Fixed, so text/plain and text/plain; format=flowed are different media types

mimetype-subsumes-charset-unknown-default $subsumes

RFC 6657 section 3 leaves a text/* registration that does not say how the charset is determined defaulting to US-ASCII, so for such a type a server cannot tell whether the absence of a charset means any charset or means US-ASCII, and the two give opposite answers

mimetype-subsumes-case $subsumes

The same media type differing only in case and quoting

mimetype-subsumes-unknown-parameter $subsumes

a parameter the server does not know: whether it narrows the media type depends on its definition, so the relationship cannot be determined

mimetype-subsumes-unknown-parameter-value $subsumes

two values of an unknown parameter: nothing says whether they exclude one another or one includes the other

mimetype-subsumes-unknown-parameter-shared $subsumes

an unknown parameter carried identically by both codes cannot affect the answer, so it must not stop the server deciding

mimetype-subsumes-invalid-code $subsumes

codeA is not a well formed media type

mimetype-filter-base-type-in $validate-code

A code whose type matches a base filter of 'text'

mimetype-filter-base-type-params $validate-code

Parameters do not stop a code matching the base filter

mimetype-filter-base-type-other-subtype $validate-code

Any subtype of the type matches a type-only base filter

mimetype-filter-base-type-out $validate-code

A code of a different type does not match

mimetype-filter-base-subtype-in $validate-code

A code matching a base filter of 'text/plain'

mimetype-filter-base-subtype-params $validate-code

Parameters do not stop a code matching a type/subtype base filter

mimetype-filter-base-subtype-out $validate-code

A different subtype does not match a type/subtype base filter

mimetype-filter-registered-in $validate-code

A media type that is in the IANA registry

mimetype-filter-registered-params $validate-code

Parameters do not stop a registered type matching

mimetype-filter-registered-out $validate-code

A media type that is not in the IANA registry

mimetype-filter-unregistered-in $validate-code

registered=false selects a type that is not in the registry

mimetype-filter-unregistered-out $validate-code

registered=false excludes a registered type

mimetype-filter-registered-params-out $validate-code

A parameter does not make an unregistered type match registered=true

mimetype-filter-unregistered-params-in $validate-code

An unregistered type with a parameter still matches registered=false

mimetype-filter-unregistered-params-out $validate-code

A parameter does not make a registered type match registered=false

mimetype-expand-enumerated $expand

An enumerated list of media types expands

mimetype-expand-all $expand

The whole code system cannot be expanded

mimetype-expand-base $expand

A base filter cannot be expanded either

mimetype-expand-unregistered $expand

registered=false cannot be expanded - it is unbounded

mimetype-expand-registered-narrow $expand

registered=true can be expanded, narrowed by a base filter, and the expansion is marked unclosed

mimetype-expand-registered-too-costly $expand

Expanding every registered media type at once is too costly

mimetype-expand-registered-paged $expand

A page of the registered media types, with the page size asserted rather than its contents

compare tx.fhir.org

Tests for candidate new 'related' operation

related-all $compare

Checks that an all value is the same as itself

related-active $compare

Checks that an all value is the same as itself, in the presence of the active flag = true

related-inactive $compare

Checks that an all value is the same as itself, in the presence of the active flag = false

related-enumerated $compare

Checks that an all value is the same as itself, in the presence of an enumerated list

related-is-a $compare

Checks that an all value is the same as itself, in the presence of an is-a filter

related-regex-1 $compare

Checks that an all value is the same as itself, in the presence of an regex filter

related-regex-2 $compare

Checks that an all value is the same as itself, in the presence of a property regex filter

related-lists $compare

Checks that two enumerated value sets are the same (concept order is different)

related-lists-more $compare

Checks that two enumerated value sets are related such that the other contains this

related-lists-less $compare

Checks that two enumerated value sets are related such that this contains the other

related-lists-over $compare

Checks that two enumerated value sets are overlapping

related-lists-disj $compare

Checks that two enumerated value sets are the disjoint

related-systems $compare

Checks that two valuesets that import the same entire code systems are identical

related-systems $compare

Checks that two valuesets that import the same entire code systems are identical

related-systems-less $compare

Checks that two valuesets that import the same entire code systems are identical

related-systems-more $compare

Checks that two valuesets that import the same entire code systems are identical

related-system-disj $compare

Checks that two valuesets that import the same entire code systems are identical

related-system-over $compare

Checks that two valuesets that import the same entire code systems are identical

related-filters-1 $compare

Checks that two valuesets that haev the same filters in different orders (as filters)

related-filters-2 $compare

Checks that two valuesets that haev the same filters in different orders (as includes)

related-filters-3 $compare

Checks that two valuesets that haev the same filters in different orders (as includes from the same system)

related-mixed-1 $compare

Checks that two valuesets that have the same content with incompatible definitions are considered the same

related-mixed-1-less $compare

Checks that two valuesets that have the same content with incompatible definitions are considered the same

related-mixed-1-more $compare

Checks that two valuesets that have the same content with incompatible definitions are considered the same

related-mixed-1-disj $compare

Checks that two valuesets that have the same content with incompatible definitions are considered the same

related-mixed-1-over $compare

Checks that two valuesets that have the same content with incompatible definitions are considered the same

related-filters-less $compare

Checks that two valuesets that have the same content with incompatible definitions are considered the same

related-filters-more $compare

Checks that two valuesets that have the same content with incompatible definitions are considered the same

bugs tx.fhir.org

A series of tests that deal with discovered bugs in FHIRsmith. These tests are specific to FHIRsmith - internal QA

country-codes $expand
cpt $expand
cpt-0 $expand
cpt-100 $expand
sct-ver-ex $expand
undefined $validate-code
no-system $cs-validate-code
sct-parse $cs-validate-code
sct-parse-pc $cs-validate-code
lang-case $cs-validate-code
lang-case2 $cs-validate-code
provenance $cs-validate-code
country-code $cs-validate-code
sct-isa $validate-code
sct-ver $cs-validate-code
sct-msg-4 $validate-code
sct-msg-5 $validate-code
sct-display-1 $cs-validate-code
sct-display-2 $cs-validate-code
ndc $cs-validate-code
x12-bad $cs-validate-code
3166-a $cs-validate-code

Check user assigned codes are valid

3166-b $cs-validate-code

Check user assigned codes can get display from a supplement

3166-c $cs-validate-code

But base names are still valid

3166-d $cs-validate-code

Check that wrong displays on user assigned codes are just a hint

permutations general

A set of permutations generated by Claude with the goal of increasing test coverage.

bad-cc1-all-request $validate-code
bad-cc1-enumerated-request $validate-code
bad-cc1-exclude-filter-request $validate-code
bad-cc1-exclude-import-request $validate-code
bad-cc1-exclude-list-request $validate-code
bad-cc1-import-request $validate-code
bad-cc1-isa-request $validate-code
bad-cc2-all-request $validate-code
bad-cc2-enumerated-request $validate-code
bad-cc2-exclude-filter-request $validate-code
bad-cc2-exclude-import-request $validate-code
bad-cc2-exclude-list-request $validate-code
bad-cc2-import-request $validate-code
bad-cc2-isa-request $validate-code
bad-coding-all-request $validate-code
bad-coding-enumerated-request $validate-code
bad-coding-exclude-filter-request $validate-code
bad-coding-exclude-import-request $validate-code
bad-coding-exclude-list-request $validate-code
bad-coding-import-request $validate-code
bad-coding-isa-request $validate-code
bad-scd-all-request $validate-code
bad-scd-enumerated-request $validate-code
bad-scd-exclude-filter-request $validate-code
bad-scd-exclude-import-request $validate-code
bad-scd-exclude-list-request $validate-code
bad-scd-import-request $validate-code
bad-scd-isa-request $validate-code
good-cc1-all-request $validate-code
good-cc1-enumerated-request $validate-code
good-cc1-exclude-filter-request $validate-code
good-cc1-exclude-import-request $validate-code
good-cc1-exclude-list-request $validate-code
good-cc1-import-request $validate-code
good-cc1-isa-request $validate-code
good-cc2-all-request $validate-code
good-cc2-enumerated-request $validate-code
good-cc2-exclude-filter-request $validate-code
good-cc2-exclude-import-request $validate-code
good-cc2-exclude-list-request $validate-code
good-cc2-import-request $validate-code
good-cc2-isa-request $validate-code
good-coding-all-request $validate-code
good-coding-enumerated-request $validate-code
good-coding-exclude-filter-request $validate-code
good-coding-exclude-import-request $validate-code
good-coding-exclude-list-request $validate-code
good-coding-import-request $validate-code
good-coding-isa-request $validate-code
good-scd-all-request $validate-code
good-scd-enumerated-request $validate-code
good-scd-exclude-filter-request $validate-code
good-scd-exclude-import-request $validate-code
good-scd-exclude-list-request $validate-code
good-scd-import-request $validate-code
good-scd-isa-request $validate-code
icd-11 icd-11

ICD-11 Test Cases. See tests/icd-11/doco.txt for what these assert and why several of them are expected to fail against the current ICD-API.

term-caps $term-caps

Check that the minimum expected things are found in the server TerminologyCapabilities for ICD-11 servers

lookup-mms-code $lookup

Look up an MMS stem code by its short code, restricting the returned properties with the property parameter

lookup-mms-uri $lookup

The same concept addressed by its entity URI must give the same answer

lookup-mms-grouper $lookup

Look up a chapter (a grouper that does have a short code)

lookup-mms-no-code $lookup

A concept with an entity id but no short code must be marked not-selectable

lookup-mms-residual $lookup

Look up a residual category - the id is derived from the parent, the code ends in Y

lookup-mms-fr $lookup

Look up with displayLanguage - display and designations come back in French

lookup-icf-code $lookup

The same foundation entity in ICF carries a different short code

lookup-foundation $lookup

Look up a Foundation entity - full URI only, there are no short codes

lookup-bad-code $lookup

An unknown code is an error

lookup-bad-system $lookup

An unknown code system is an error

lookup-bad-version $lookup

An unknown version is an error

lookup-foundation-bare $lookup

A bare numeric id is not a Foundation code (WHO decision - the full URI is required)

lookup-foundation-residual $lookup

Residual categories exist only in the linearizations, not in the Foundation

lookup-bad-language $lookup

An unknown display language must be reported, not silently replaced by English

lookup-pc-simple $lookup

Look up a postcoordinated expression in short-code form

lookup-pc-uri-form $lookup

The same expression in entity-URI form (spaces around the delimiter) must give the same concept

lookup-pc-cluster $lookup

A cluster expression: two stems joined by /, each with its own & extensions

lookup-pc-repeated-value $lookup

A value repeated on two different axes must not be silently dropped - the code that comes back must be the code that was asked about

lookup-pc-nondisjoint $lookup

Values on two axes drawing from overlapping value sets must each stay on their own axis

lookup-pc-invalid-axis $lookup

A value that is on no suggested axis of the stem must say so, not just 'not found'

lookup-pc-other $lookup

'Other' postcoordination: a value outside the stem's declared scales (unresolved - see doco.txt)

lookup-icf-pc $lookup

ICF postcoordination - every property returned must actually carry a value

lookup-icf-pc-old $lookup

The pre-2026 ICF postcoordination syntax is no longer valid

cs-validate-good $cs-validate-code

Validate a good code with no display

cs-validate-good-display $cs-validate-code

Validate a good code with the right display

cs-validate-bad-display $cs-validate-code

A wrong display must come back with issues and a message, not a bare result=false

cs-validate-bad-code $cs-validate-code

An unknown code must come back with issues and a message

cs-validate-case $cs-validate-code

ICD-11 codes are case sensitive, so a lower case code is not a code (note that WHO declares caseSensitive=false, which is the part that is wrong)

cs-validate-lang $cs-validate-code

A display that is right in another language is still wrong for the language that was asked for - the same as validation/simple-coding-bad-language

cs-validate-pc $cs-validate-code

Validate a postcoordinated expression

cs-validate-uri $cs-validate-code

Validate a code given in entity-URI form

expand-pcs $expand

Expand a WHO postcoordination scale value set

expand-pcs-count $expand

count is declared in TerminologyCapabilities and must be honoured

expand-pcs-offset $expand

offset is declared in TerminologyCapabilities and must be honoured

expand-pcs-filter $expand

The text filter must be applied

expand-pcs-fr $expand

displayLanguage is declared in TerminologyCapabilities and must be honoured

expand-bad-url $expand

An unknown value set is an error

expand-inline-vs $expand

A value set supplied inline on the request must be expanded

expand-adhoc-enum $expand

Expand a client-supplied value set enumerating MMS codes

expand-adhoc-enum-uri $expand

Expand a client-supplied value set enumerating entity URIs

expand-adhoc-isa $expand

Expand a client-supplied is-a filter, filter value as a short code

expand-adhoc-isa-uri $expand

Expand the same is-a filter with the filter value as an entity URI - must be identical

expand-adhoc-bad-code $expand

A client-supplied value set naming a code that does not exist expands to the codes that do - the same as simple-expand-enum-bad and overload-expand-enum-bad

expand-pcs-uri-form $expand

The WHO postcoordination scale as a client-supplied value set, filter values as entity URIs

expand-pcs-code-form $expand

The same value set with filter values as short codes - must expand identically

vs-validate-in $validate-code

A code that is in a WHO postcoordination scale value set

vs-validate-out $validate-code

A code that is not in the value set must come back with issues and a message

vs-validate-adhoc $validate-code

A code that is in a client-supplied value set

vs-validate-adhoc-out $validate-code

A code that is not in a client-supplied value set

regex-bad general

Bad Regex - checking defences against denial of service attack. These are unusual because servers have the option to succeed, or to refuse the request

expand-regex-bad $expand

Check expand is safe from catastrophic regex

validate-regex-bad $validate-code

Check validate is safe from catastrophic regex

expand-regex-bad-2 $expand

Check expand is safe from catastrophic regex

validate-regex-bad-2 $validate-code

Check validate is safe from catastrophic regex

related2 tx.fhir.org

Tests for $compare operation - comparing two value sets to determine their relationship (equivalent, subset, superset, overlap, disjoint, unknown)

related-eq-identical-def $compare

Equivalent: identical is-a filter definitions

related-eq-enum-reorder $compare

Equivalent: same enumerated codes in different order

related-eq-multi-include-reorder $compare

Equivalent: multiple includes from same system in different order

related-eq-filter-vs-enum $compare

Equivalent: is-a filter vs explicit enumeration of same codes

related-eq-import-vs-inline $compare

Equivalent: imported value set vs same definition inline

related-eq-import-reorder $compare

Equivalent: child value sets imported in different order

related-expeq-exclude-vs-enum $compare

Equivalent (expansion): all CS1 minus C vs enumeration of same codes

related-expeq-exclude-partial $compare

Equivalent (expansion): is-a root minus {A2,B2} vs enumeration of result

related-sub-branch-vs-root $compare

Subset: is-a A is subset of is-a root

related-sub-enum-vs-filter $compare

Subset: enumerated {A1,A2} is subset of is-a A

related-sub-base-vs-import-plus $compare

Subset: base VS is subset of VS that imports it and adds codes

related-sub-leaf-vs-subtree $compare

Subset: single leaf {A1} is subset of is-a A

related-super-root-vs-branch $compare

Superset: is-a root is superset of is-a A

related-expsub-exclude-narrower $compare

Subset (expansion): all minus {C,B1,B2} subset of all minus {C}

related-disj-diff-systems $compare

Disjoint: value sets from entirely different code systems

related-disj-diff-branches $compare

Disjoint: non-overlapping branches (A vs B) in same system

related-disj-enum-no-intersection $compare

Disjoint: enumerated codes with no intersection (flat system)

related-disj-multi-system $compare

Disjoint: multi-system value sets with no overlap

related-ov-enum-partial $compare

Overlap: partially overlapping enumerations

related-ov-filter-vs-enum $compare

Overlap: is-a A overlaps with enum {A2, B1}

related-ov-multi-include-partial $compare

Overlap: multi-include with partial overlap (is-a A+{B1} vs is-a B+{A1})

related-ov-import-partial $compare

Overlap: imported value sets creating partial overlap

related-ov-cross-system $compare

Overlap: cross-system partial overlap

related-ov-exclude-partial $compare

Overlap (expansion): overlap after excludes applied

related-unk-snomed-both-filter $compare

Unknown: two SNOMED is-a filters, can't determine relationship

related-unk-snomed-filter-vs-enum $compare

Unknown: SNOMED is-a filter vs enumerated SNOMED code

related-unk-unknown-system $compare

Unknown: unknown code system, can't expand

related-ver-same-def-diff-cs-version $compare

Version: same is-a A definition, CS1 v1 subset of CS1 v2

related-ver-all-diff-cs-version $compare

Version: all CS1, v1 subset of v2

related-ver-branch-diff-cs-version $compare

Version: is-a B, CS1 v1 subset of CS1 v2

related-ver-unversioned-vs-pinned $compare

Version: unversioned is-a A (uses latest=v2) superset of v1-pinned

related-ver-same-vs-diff-version $compare

Version: same VS URL, v1 subset of v2 (definition changed)

related-ver-import-version-cascade $compare

Version: import of v1-pinned VS subset of import of v2-pinned VS

langcodes tx.fhir.org

IETF language code (BCP-47) test cases

validate-lang-base $cs-validate-code

a bare language subtag is valid (en)

validate-lang-region $cs-validate-code

language plus an ISO 3166 region (en-US)

validate-lang-script $cs-validate-code

language plus a script (zh-Hans)

validate-lang-script-region $cs-validate-code

language, script and region together (zh-Hans-CN)

validate-lang-region-private $cs-validate-code

a region inside the QM..QZ private-use range - the registry writes those as a range rather than one entry per code (en-QM)

validate-lang-grandfathered $cs-validate-code

a grandfathered tag: registered whole, and it does not decompose into valid subtags (i-klingon)

validate-lang-base-bad $cs-validate-code

two letters that are not an allocated language (zz)

validate-lang-region-bad $cs-validate-code

two letters that are neither allocated nor inside a private-use range (en-AB)

validate-lang-script-bad $cs-validate-code

four letters that are not an allocated script (en-Abcd)

validate-lang-extlang-prefix-bad $cs-validate-code

the extlang cmn carries Prefix: zh in the registry, so it may not follow en (en-cmn)

validate-lang-variant-prefix-bad $cs-validate-code

the variant 1901 carries Prefix: de in the registry, so it may not follow en (en-1901)

validate-lang-case-language $cs-validate-code

the language subtag written in the wrong case (EN): valid, because BCP 47 tags are case-insensitive, but the server returns normalized-code en and notes the difference

validate-lang-case-region $cs-validate-code

the region subtag written in the wrong case (en-us): valid, because BCP 47 tags are case-insensitive, but the server returns normalized-code en-US and notes the difference

validate-lang-case-all $cs-validate-code

every subtag written in the wrong case (ZH-hans-cn): valid, because BCP 47 tags are case-insensitive, but the server returns normalized-code zh-Hans-CN and notes the difference

subsumes-lang-base-region $subsumes

en subsumes en-US: a region added to a bare language

subsumes-lang-reverse $subsumes

en-US is subsumed by en

subsumes-lang-equivalent $subsumes

a tag against itself

subsumes-lang-script $subsumes

zh subsumes zh-Hans-CN: script and region added

subsumes-lang-skipped-script $subsumes

en-US subsumes en-Latn-US, though the added script sits between the two subtags en-US names - RFC 4647 extended filtering rather than basic

subsumes-lang-variant $subsumes

de subsumes de-1901: a variant added

subsumes-lang-siblings $subsumes

en-US and en-GB: two regions of one language, neither subsumes the other

subsumes-lang-scripts $subsumes

zh-Hant and zh-Hans-CN: different scripts

subsumes-lang-crossed $subsumes

en-Latn and en-US: each states something the other does not

subsumes-lang-unrelated $subsumes

en and fr: different languages

subsumes-lang-case $subsumes

EN subsumes en-us: BCP 47 tags are case-insensitive

subsumes-lang-grandfathered $subsumes

zh does not subsume zh-min-nan: a grandfathered tag is matched whole and has no components to compare

validate-lang-filter-language-in $validate-code

a code in a language=en filter

validate-lang-filter-language-out $validate-code

a code with a different language

validate-lang-filter-region-in $validate-code

a code in a region=US filter, whatever its language

validate-lang-filter-region-out $validate-code

a code with a different region

validate-lang-filter-both-in $validate-code

language and region both fixed: the script is free to vary

validate-lang-filter-both-out $validate-code

the language matches but the region does not, and the message says which rule failed

validate-lang-filter-script-in $validate-code

a script filter validates codes even though it cannot be expanded

validate-lang-filter-script-out $validate-code

a code in a different script

validate-lang-filter-language-bare $validate-code

the bare language itself is in a language=en filter: a language filter matches the language, however much or little else the tag says

validate-lang-filter-region-absent $validate-code

a tag with no region at all is not in a region=US filter: an absent component does not match a fixed one

validate-lang-filter-script-absent $validate-code

a tag with no script at all is not in a script=Latn filter, even though Latn is the script English is written in

validate-lang-filter-both-absent $validate-code

the language matches but there is no region to match, so the code is not in the value set

expand-lang-language $expand

a fixed language expands to its regions (and the bare language), paged

expand-lang-both $expand

language and region fixed expands to the scripts, starting with the tag that has none

expand-lang-region $expand

a fixed region is finite but far too large to expand, so it answers too-costly

expand-lang-script $expand

a script alone leaves the language open, so there is nothing to enumerate

expand-langcodes-all $expand

Tests the $expand operation for all language codes (a special case): the grammar is unbounded, so the common-languages base value set is returned, marked as an incomplete (unclosed) expansion