FirelyTeam / firely-validator-api

Firely's official FHIR validator API for validating HL7 FHIR resources against profiles.
Other
7 stars 2 forks source link

Prevent slicing on a non-repeating element #280

Closed wardweistra closed 2 days ago

wardweistra commented 6 months ago

The validator currently does not report any issues when slicing a non-repeating element, even though the spec says:

Slicing can be used in any resource that has cardinality ..* on the base resource, or any resource with a choice of types. https://hl7.org/fhir/elementdefinition-definitions.html#ElementDefinition.slicing

When testing the profile from this Zulip question the output from the new validator is:

Overall result: SUCCESS

[WARNING] Duplicate key 'ele-1' in paths: Condition.meta, Condition.implicitRules, Condition.language, Condition.text, Condition.extension, Condition.modifierExtension, Condition.identifier, Condition.clinicalStatus, Condition.verificationStatus, Condition.category, Condition.severity, Condition.code, Condition.code.extension, Condition.code.coding, Condition.code.coding.extension, Condition.code.coding.system, Condition.code.coding.version, Condition.code.coding.code, Condition.code.coding.display, Condition.code.coding.userSelected, Condition.code.text, Condition.bodySite, Condition.subject, Condition.subject.extension, Condition.subject.reference, Condition.subject.type, Condition.subject.identifier, Condition.subject.display, Condition.encounter, Condition.onset[x], Condition.abatement[x], Condition.recordedDate, Condition.recorder, Condition.asserter, Condition.stage, Condition.stage.extension, Condition.stage.modifierExtension, Condition.stage.summary, Condition.stage.assessment, Condition.stage.type, Condition.evidence, Condition.evidence.extension, Condition.evidence.modifierExtension, Condition.evidence.code, Condition.evidence.detail, Condition.note (at [0])

[WARNING] Duplicate key 'ext-1' in paths: Condition.extension, Condition.modifierExtension, Condition.code.extension, Condition.code.coding.extension, Condition.subject.extension, Condition.stage.extension, Condition.stage.modifierExtension, Condition.evidence.extension, Condition.evidence.modifierExtension (at [0])

[WARNING] Duplicate key 'ref-1' in paths: Condition.subject, Condition.encounter, Condition.recorder, Condition.asserter, Condition.stage.assessment, Condition.evidence.detail (at [0])

Profile:

{
  "resourceType": "StructureDefinition",
  "id": "Condition-exists-CCpattern",
  "url": "http://example.org/StructureDefinition/Condition-exists-CCpattern",
  "name": "ConditionExistsCCPattern",
  "title": "Condition (Exists Slice with patternCodeableConcept)",
  "status": "draft",
  "fhirVersion": "4.0.1",
  "kind": "resource",
  "abstract": false,
  "type": "Condition",
  "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Condition",
  "derivation": "constraint",
  "differential": {
    "element": [
      {
        "id": "Condition.code",
        "path": "Condition.code",
        "comment": "Coding is optional, if coding is sent there shall at least be one coding from the ICD-9-CM code system",
        "mustSupport": true,
        "slicing": {
          "discriminator": [
            {
              "type": "exists",
              "path": "coding.system"
            }
          ],
          "rules": "open"
        },
        "min": 1
      },
      {
        "id": "Condition.code:slice1",
        "path": "Condition.code",
        "sliceName": "slice1",
        "comment": "Coding is optional, if coding is sent there shall at least be one coding from the ICD-9-CM code system",
        "mustSupport": true,
        "patternCodeableConcept": {
          "coding": [
            {
              "system": "http://terminology.hl7.org/CodeSystem/icd9cm"
            }
          ]
        }
      },
      {
        "id": "Condition.code:slice1.coding.system",
        "path": "Condition.code.coding.system",
        "min": "1"
      },
      {
        "id": "Condition.code:slice2",
        "path": "Condition.code",
        "sliceName": "slice2"
      },
      {
        "id": "Condition.code:slice2.coding.system",
        "path": "Condition.code.coding.system",
        "max": "0"
      },
      {
        "id": "Condition.subject.reference",
        "path": "Condition.subject.reference",
        "min": 1,
        "mustSupport": true
      }
    ]
  }
}
mmsmits commented 6 months ago

duplicate of your own issue: https://github.com/FirelyTeam/firely-net-sdk/issues/1400 ;) Closing that one