Actions

These are the actions you can use in a rule. Most are generic (file and count based); the FHIR-specific ones are described under FHIR actions.

Include

By default, running a ruleset file does not run any other rules, to give you maximum control. Sometimes you want to also run a set of rules defined elsewhere; for example, a ‘check broken links’ ruleset that first runs all the default rules. The include action does this. You can also create a batch file that includes all your other rule set files.

- include: default

- include: myrules

- include: some-directory/myrules.rules.yaml

It is not a problem to reference the same file multiple times, because rules are indexed by their name.

Unique

The unique action takes all resources (within the filter, if provided) and checks whether each of them has a value that is unique compared to that same value on all the other resources.

- filter: StructureDefinition
  unique: url

The action key is optional here, because it is implied by the unique property.

Assert

The assert action validates each resource in your filter, but instead of reporting the issues from validation, it does the opposite: it checks whether the specified errors actually occur. This is useful for unit testing. By default it uses the Firely .NET SDK validator; you can switch the flavor.

Specific codes: assert that a specific error code comes out of validating the file.

- file: invalid-patient.json
- assert: R103

Any: assert that any error occurred.

- files: invalid-resources/*.json
  assert: any

Severity: assert the severity of the expected errors.

- files: files-with-warnings/*.json
  assert: warning

Suppress

The suppress property suppresses specific validation errors when they are known to be irrelevant or incorrectly triggered, for example an eld-1 error that does not apply to your use case. Suppression currently applies to the entire error code; more fine-grained suppression is not yet supported.

- category: resource
  action: validate
  suppress: eld-1

Exists

The exists action checks whether the filter you specified results in at least one file.

- action: exists
  files: /**/*.xml

It can be combined with other filters, such as a predicate:

- filter: id.exists()
- action: exists

Count

The count action checks whether your filter contains exactly the amount you specify. You can also use it to make sure a certain file type does not exist (count: 0).

- file: /**/package.json
  count: 1

Min

The min action checks whether there are at least a certain number of files in your filter.

- category: Example
  min: 10

Max

The max action checks whether there are at most a certain number of files in your filter.

- category: ValueSet
  max: 30

Cardinality

The cardinality action checks whether a filter produces a number of files within a specified range. Separate the numbers with a dash - or a double dot ...

- category: ValueSet
  cardinality: 10-50
- files: input/*.yaml
  cardinality: 2..8

Unique filenames

When you publish, most files end up in the /package folder. If files come from different folders but have the same name, one will overwrite the other. The unique-filenames action reports an error if it finds duplicate filenames.

- action: unique-filenames
  files: /**