FHIR Chat · Is relaxing min cardinality really a breaking change? · implementers

Stream: implementers

Topic: Is relaxing min cardinality really a breaking change?


view this post on Zulip Michael Lawley (Feb 21 2022 at 23:58):

For an ideal resolution of FHIR-25888 we would need to change the cardinality of ValueSet.expansion.contains.property.code from 1..1 to 0..1. But, ValueSet is a normative resource so the question is whether this constitutes a breaking change?

All old R4 resources will still be valid in R5, but an R4 client will be expecting a minimum cardinality and thus will not expect this element to be absent.

The rules http://build.fhir.org/versions.html#f-compat state that "Minimum element cardinalities will not be changed."
But this change does not violate Forward compatibility which states:

that content that is conformant in an old release will remain conformant with future versions. Once normative, FHIR's rules try to enforce forward compatibility. However, that doesn't guarantee that all old systems will interoperate with future systems.

view this post on Zulip Grahame Grieve (Feb 22 2022 at 00:29):

I think it should be ok to make that change, but I don't follow the justification

view this post on Zulip Michael Lawley (Feb 22 2022 at 00:33):

As I understand the rule, we are not allowed to change the minimum cardinality, but it seems to me that a change from 1..x to 0..x should be allowed because the Forward compatibility rule is satisfied (but this would not be the case for changing 0..x to 1..x)

view this post on Zulip Grahame Grieve (Feb 22 2022 at 00:37):

right. process wise it should be ok, but I don't understand this particular change

view this post on Zulip Michael Lawley (Feb 22 2022 at 00:40):

Oh, this is part of supporting returning subproperties. When you have subproperties you don't always have a property (as per $lookup). In particular, the SNOMED's concept of role grouping

view this post on Zulip Grahame Grieve (Feb 24 2022 at 05:36):

how can you not have a property if you have sub-properties?

view this post on Zulip Michael Lawley (Feb 24 2022 at 08:03):

well sub-property is a misnomer - in SNOMED they are grouped properties
But I've _just_ noticed that the $lookup output property.code is 1..1 so I'm not sure what it should be in the SNOMED case

view this post on Zulip Michael Lawley (Feb 24 2022 at 08:05):

hence this question: https://chat.fhir.org/#narrow/stream/179202-terminology/topic/.24lookup.20and.20SNOMED.20properties/near/273016405

view this post on Zulip Michael Lawley (Feb 24 2022 at 08:07):

One option might be to use a well-known code: (subproperty) whenever the code system doesn't define/use something itself?

view this post on Zulip Grahame Grieve (Feb 24 2022 at 10:22):

well, yes, but you have to differentiate it from some other property. So it would be something like snomed.group

view this post on Zulip Michael Lawley (Feb 25 2022 at 22:37):

I'm not sure I understand what you're differentiating? It's effectively a constant (meaningless) value.

view this post on Zulip Grahame Grieve (Feb 26 2022 at 00:31):

right but it would differentiate from some other bunch of sub-properties

view this post on Zulip Michael Lawley (Feb 26 2022 at 00:45):

This is what 444718001 |Bilateral enlargement of atria would look like without the property.code -- there are two sets of sub-properties that are undifferentiated.

image.png

{
  "resourceType": "Parameters",
  "parameter": [
    {
      "name": "property",
      "part": [
        {
          "name": "code",
          "valueCode": "parent"
        },
        {
          "name": "value",
          "valueCode": "67741000119109"
        }
      ]
    },
    {
      "name": "property",
      "part": [
        {
          "name": "code",
          "valueCode": "parent"
        },
        {
          "name": "value",
          "valueCode": "67751000119106"
        }
      ]
    },
    {
      "name": "property",
      "part": [
        {
          "name": "subproperty",
          "part": [
            {
              "name": "code",
              "valueCode": "363698007"
            },
            {
              "name": "valueCode",
              "valueCode": "244387002"
            }
          ]
        },
        {
          "name": "subproperty",
          "part": [
            {
              "name": "code",
              "valueCode": "116676008"
            },
            {
              "name": "valueCode",
              "valueCode": "442021009"
            }
          ]
        }
      ]
    },
    {
      "name": "property",
      "part": [
        {
          "name": "subproperty",
          "part": [
            {
              "name": "code",
              "valueCode": "363698007"
            },
            {
              "name": "valueCode",
              "valueCode": "244383003"
            }
          ]
        },
        {
          "name": "subproperty",
          "part": [
            {
              "name": "code",
              "valueCode": "116676008"
            },
            {
              "name": "valueCode",
              "valueCode": "442021009"
            }
          ]
        }
      ]
    },
    {
      "name": "name",
      "valueString": "SNOMED Clinical Terms Australian extension"
    },
    {
      "name": "display",
      "valueString": "Bilateral enlargement of atria"
    }
  ]
}

Last updated: Apr 12 2022 at 19:14 UTC