{
  "resourceType": "StructureDefinition",
  "url": "http://fire.ly/fhir/StructureDefinition/PatchParameters",
  "name": "PatchParameters",
  "status": "active",
  "publisher": "Firely",
  "description": "Described the allowed parameters for the FHIR PATCH operation",
  "purpose": "Used for validation of incoming parameters resources for FHIR servers.",
  "copyright": "CC0",
  "fhirVersion": "4.0.1",
  "mapping": [
    {
      "identity": "v2",
      "uri": "http://hl7.org/v2",
      "name": "HL7 v2 Mapping"
    },
    {
      "identity": "rim",
      "uri": "http://hl7.org/v3",
      "name": "RIM Mapping"
    }
  ],
  "kind": "resource",
  "abstract": false,
  "type": "Parameters",
  "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Parameters",
  "derivation": "constraint",
  "differential": {
    "element": [
      {
        "id": "Parameters.parameter",
        "path": "Parameters.parameter",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "part.name"
            },
            {
              "type": "value",
              "path": "part.value[x]"
            }
          ],
          "rules": "closed"
        },
        "min": 1
      },
      {
        "id": "Parameters.parameter.name",
        "path": "Parameters.parameter.name",
        "fixedString": "operation"
      },
      {
        "id": "Parameters.parameter.value[x]",
        "path": "Parameters.parameter.value[x]",
        "max": "0"
      },
      {
        "id": "Parameters.parameter.resource",
        "path": "Parameters.parameter.resource",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:add",
        "path": "Parameters.parameter",
        "sliceName": "add",
        "max": "1"
      },
      {
        "id": "Parameters.parameter:add.part",
        "path": "Parameters.parameter.part",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "value[x]"
            }
          ],
          "rules": "closed"
        },
        "min": 4,
        "max": "4"
      },
      {
        "id": "Parameters.parameter:add.part.resource",
        "path": "Parameters.parameter.part.resource",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:add.part:type",
        "path": "Parameters.parameter.part",
        "sliceName": "type",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:add.part:type.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "type"
      },
      {
        "id": "Parameters.parameter:add.part:type.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "code"
          }
        ],
        "fixedCode": "add"
      },
      {
        "id": "Parameters.parameter:add.part:type.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:add.part:path",
        "path": "Parameters.parameter.part",
        "sliceName": "path",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:add.part:path.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "path"
      },
      {
        "id": "Parameters.parameter:add.part:path.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "string"
          }
        ]
      },
      {
        "id": "Parameters.parameter:add.part:path.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:add.part:name",
        "path": "Parameters.parameter.part",
        "sliceName": "name",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:add.part:name.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "name"
      },
      {
        "id": "Parameters.parameter:add.part:name.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "string"
          }
        ]
      },
      {
        "id": "Parameters.parameter:add.part:name.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:add.part:value",
        "path": "Parameters.parameter.part",
        "sliceName": "value",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:add.part:value.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "value"
      },
      {
        "id": "Parameters.parameter:insert",
        "path": "Parameters.parameter",
        "sliceName": "insert",
        "max": "1"
      },
      {
        "id": "Parameters.parameter:insert.part",
        "path": "Parameters.parameter.part",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "value[x]"
            }
          ],
          "rules": "closed"
        },
        "min": 4,
        "max": "4"
      },
      {
        "id": "Parameters.parameter:insert.part:type",
        "path": "Parameters.parameter.part",
        "sliceName": "type",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:insert.part:type.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "type"
      },
      {
        "id": "Parameters.parameter:insert.part:type.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "code"
          }
        ],
        "fixedCode": "insert"
      },
      {
        "id": "Parameters.parameter:insert.part:type.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:insert.part:path",
        "path": "Parameters.parameter.part",
        "sliceName": "path",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:insert.part:path.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "path"
      },
      {
        "id": "Parameters.parameter:insert.part:path.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "string"
          }
        ]
      },
      {
        "id": "Parameters.parameter:insert.part:path.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:insert.part:value",
        "path": "Parameters.parameter.part",
        "sliceName": "value",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:insert.part:value.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "value"
      },
      {
        "id": "Parameters.parameter:insert.part:index",
        "path": "Parameters.parameter.part",
        "sliceName": "index",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:insert.part:index.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "integer"
      },
      {
        "id": "Parameters.parameter:insert.part:index.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "integer"
          }
        ]
      },
      {
        "id": "Parameters.parameter:insert.part:index.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:delete",
        "path": "Parameters.parameter",
        "sliceName": "delete",
        "max": "1"
      },
      {
        "id": "Parameters.parameter:delete.part",
        "path": "Parameters.parameter.part",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "value[x]"
            }
          ],
          "rules": "open"
        },
        "min": 2,
        "max": "2"
      },
      {
        "id": "Parameters.parameter:delete.part:type",
        "path": "Parameters.parameter.part",
        "sliceName": "type",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:delete.part:type.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "type"
      },
      {
        "id": "Parameters.parameter:delete.part:type.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "code"
          }
        ],
        "fixedCode": "delete"
      },
      {
        "id": "Parameters.parameter:delete.part:type.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:delete.part:path",
        "path": "Parameters.parameter.part",
        "sliceName": "path",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:delete.part:path.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "path"
      },
      {
        "id": "Parameters.parameter:delete.part:path.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "string"
          }
        ]
      },
      {
        "id": "Parameters.parameter:delete.part:path.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:replace",
        "path": "Parameters.parameter",
        "sliceName": "replace",
        "max": "1"
      },
      {
        "id": "Parameters.parameter:replace.part",
        "path": "Parameters.parameter.part",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "value[x]"
            }
          ],
          "rules": "open"
        },
        "min": 3,
        "max": "3"
      },
      {
        "id": "Parameters.parameter:replace.part:type",
        "path": "Parameters.parameter.part",
        "sliceName": "type",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:replace.part:type.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "type"
      },
      {
        "id": "Parameters.parameter:replace.part:type.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "code"
          }
        ],
        "fixedCode": "replace"
      },
      {
        "id": "Parameters.parameter:replace.part:type.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:replace.part:path",
        "path": "Parameters.parameter.part",
        "sliceName": "path",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:replace.part:path.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "path"
      },
      {
        "id": "Parameters.parameter:replace.part:path.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "string"
          }
        ]
      },
      {
        "id": "Parameters.parameter:replace.part:path.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:replace.part:value",
        "path": "Parameters.parameter.part",
        "sliceName": "value",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:replace.part:value.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "value"
      },
      {
        "id": "Parameters.parameter:move",
        "path": "Parameters.parameter",
        "sliceName": "move",
        "max": "1"
      },
      {
        "id": "Parameters.parameter:move.part",
        "path": "Parameters.parameter.part",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "value[x]"
            }
          ],
          "rules": "open"
        },
        "min": 4,
        "max": "4"
      },
      {
        "id": "Parameters.parameter:move.part:type",
        "path": "Parameters.parameter.part",
        "sliceName": "type",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:move.part:type.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "type"
      },
      {
        "id": "Parameters.parameter:move.part:type.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "code"
          }
        ],
        "fixedCode": "move"
      },
      {
        "id": "Parameters.parameter:move.part:type.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:move.part:path",
        "path": "Parameters.parameter.part",
        "sliceName": "path",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:move.part:path.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "path"
      },
      {
        "id": "Parameters.parameter:move.part:path.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "string"
          }
        ]
      },
      {
        "id": "Parameters.parameter:move.part:path.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:move.part:source",
        "path": "Parameters.parameter.part",
        "sliceName": "source",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:move.part:source.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "source"
      },
      {
        "id": "Parameters.parameter:move.part:source.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "integer"
          }
        ]
      },
      {
        "id": "Parameters.parameter:move.part:source.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      },
      {
        "id": "Parameters.parameter:move.part:destination",
        "path": "Parameters.parameter.part",
        "sliceName": "destination",
        "min": 1,
        "max": "1"
      },
      {
        "id": "Parameters.parameter:move.part:destination.name",
        "path": "Parameters.parameter.part.name",
        "fixedString": "destination"
      },
      {
        "id": "Parameters.parameter:move.part:destination.value[x]",
        "path": "Parameters.parameter.part.value[x]",
        "type": [
          {
            "code": "integer"
          }
        ]
      },
      {
        "id": "Parameters.parameter:move.part:destination.part",
        "path": "Parameters.parameter.part.part",
        "max": "0"
      }
    ]
  }
}