{
  "resourceType": "StructureDefinition",
  "id": "proxy-permission-ps",
  "url": "http://electronichealth.se/fhir/NDI/StructureDefinition/proxy-permission-ps",
  "version": "0.1.0",
  "name": "ProxyPermissionPs",
  "title": "Proxy Permission (PS)",
  "status": "active",
  "fhirVersion": "5.0.0",
  "kind": "resource",
  "abstract": false,
  "type": "Permission",
  "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Permission",
  "derivation": "constraint",
  "differential": {
    "element": [
      {
        "id": "Permission.status",
        "path": "Permission.status",
        "short": "active | rejected",
        "mustSupport": true,
        "binding": {
          "strength": "required",
          "valueSet": "http://electronichealth.se/fhir/NDI/ValueSet/ps-proxy-permission-statuses"
        }
      },
      {
        "id": "Permission.asserter",
        "path": "Permission.asserter",
        "min": 1,
        "type": [
          {
            "code": "Reference",
            "targetProfile": [
              "http://electronichealth.se/fhir/NDI/StructureDefinition/patient-data-access"
            ]
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Permission.asserter.identifier",
        "path": "Permission.asserter.identifier",
        "min": 1,
        "constraint": [
          {
            "key": "ndi-personal-identity-number-value-1",
            "human": "A Swedish personal identity number (sv: personnummer) should follow format 198001032385",
            "source": "http://electronichealth.se/fhir/NDI/StructureDefinition/proxy-permission-ps",
            "severity": "error",
            "expression": "value.matches('^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])\\\\d{4}$') or system != 'http://electronichealth.se/identifier/personnummer'"
          },
          {
            "key": "ndi-coordination-number-value-1",
            "human": "A Swedish coordination number (sv: samordningsnummer) should follow format 201903682399",
            "source": "http://electronichealth.se/fhir/NDI/StructureDefinition/proxy-permission-ps",
            "severity": "error",
            "expression": "value.matches('^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(0[1-9]|1[0-2])([6-9][1-9])\\\\d{4}$') or system != 'http://electronichealth.se/identifier/samordningsnummer'"
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Permission.asserter.identifier.system",
        "path": "Permission.asserter.identifier.system",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Permission.asserter.identifier.value",
        "path": "Permission.asserter.identifier.value",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Permission.date",
        "path": "Permission.date",
        "min": 1,
        "max": "1",
        "constraint": [
          {
            "key": "ndi-dateTime-1",
            "human": "DateTime must be without timestamp",
            "source": "http://electronichealth.se/fhir/NDI/StructureDefinition/proxy-permission-ps",
            "severity": "error",
            "expression": "$this.toString().contains('T') = false"
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Permission.validity",
        "path": "Permission.validity",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Permission.validity.start",
        "path": "Permission.validity.start",
        "min": 1,
        "constraint": [
          {
            "key": "ndi-dateTime-1",
            "human": "DateTime must be without timestamp",
            "source": "http://electronichealth.se/fhir/NDI/StructureDefinition/proxy-permission-ps",
            "severity": "error",
            "expression": "$this.toString().contains('T') = false"
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Permission.validity.end",
        "path": "Permission.validity.end",
        "constraint": [
          {
            "key": "ndi-dateTime-1",
            "human": "DateTime must be without timestamp",
            "source": "http://electronichealth.se/fhir/NDI/StructureDefinition/proxy-permission-ps",
            "severity": "error",
            "expression": "$this.toString().contains('T') = false"
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Permission.justification",
        "path": "Permission.justification",
        "mustSupport": true
      },
      {
        "id": "Permission.justification.evidence",
        "path": "Permission.justification.evidence",
        "comment": "Reference Consent (PowerOfAttorney) for legal justification. Reference RelatedPerson when relationship to patient, eg guardian, justifies permission",
        "min": 1,
        "max": "1",
        "type": [
          {
            "code": "Reference",
            "targetProfile": [
              "http://electronichealth.se/fhir/NDI/StructureDefinition/power-of-attorney-poa",
              "http://electronichealth.se/fhir/NDI/StructureDefinition/related-person-data-access"
            ]
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Permission.justification.evidence.reference",
        "path": "Permission.justification.evidence.reference",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Permission.combining",
        "path": "Permission.combining",
        "fixedCode": "deny-unless-permit",
        "mustSupport": true
      },
      {
        "id": "Permission.rule",
        "path": "Permission.rule",
        "min": 1,
        "max": "1",
        "mustSupport": true
      },
      {
        "id": "Permission.rule.type",
        "path": "Permission.rule.type",
        "min": 1,
        "fixedCode": "permit",
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data",
        "path": "Permission.rule.data",
        "max": "1",
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.extension:documentType",
        "path": "Permission.rule.data.extension",
        "sliceName": "documentType",
        "min": 0,
        "max": "*",
        "type": [
          {
            "code": "Extension",
            "profile": [
              "http://electronichealth.se/fhir/NDI/StructureDefinition/permission-data-document-type-ps"
            ]
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.extension:documentType.value[x]",
        "path": "Permission.rule.data.extension.value[x]",
        "min": 1,
        "mustSupport": true,
        "binding": {
          "strength": "required",
          "valueSet": "http://electronichealth.se/fhir/NDI/ValueSet/ndi-ehds-categories"
        }
      },
      {
        "id": "Permission.rule.data.extension:documentType.value[x].coding",
        "path": "Permission.rule.data.extension.value[x].coding",
        "min": 1,
        "max": "1",
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.extension:documentType.value[x].coding.system",
        "path": "Permission.rule.data.extension.value[x].coding.system",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.extension:documentType.value[x].coding.code",
        "path": "Permission.rule.data.extension.value[x].coding.code",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.resource",
        "path": "Permission.rule.data.resource",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "meaning"
            }
          ],
          "rules": "open",
          "ordered": false,
          "description": "Slice data based on meaning"
        },
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.resource.meaning",
        "path": "Permission.rule.data.resource.meaning",
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.resource.reference",
        "path": "Permission.rule.data.resource.reference",
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.resource:fromCaregiverOrUnit",
        "path": "Permission.rule.data.resource",
        "sliceName": "fromCaregiverOrUnit",
        "min": 0,
        "max": "*",
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.resource:fromCaregiverOrUnit.meaning",
        "path": "Permission.rule.data.resource.meaning",
        "fixedCode": "authoredby"
      },
      {
        "id": "Permission.rule.data.resource:fromCaregiverOrUnit.reference",
        "path": "Permission.rule.data.resource.reference",
        "type": [
          {
            "code": "Reference",
            "targetProfile": [
              "http://electronichealth.se/fhir/NDI/StructureDefinition/organization-data-access"
            ]
          }
        ]
      },
      {
        "id": "Permission.rule.data.resource:fromCaregiverOrUnit.reference.reference",
        "path": "Permission.rule.data.resource.reference.reference",
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.resource:fromCaregiverOrUnit.reference.identifier",
        "path": "Permission.rule.data.resource.reference.identifier",
        "constraint": [
          {
            "key": "ndi-organization-identifier-value-1",
            "human": "A Swedish organization identifier (sv: organisationsnummer) should follow format 7999000057",
            "source": "http://electronichealth.se/fhir/NDI/StructureDefinition/proxy-permission-ps",
            "severity": "error",
            "expression": "value.matches('^\\\\d{6}\\\\d{4}$') or system != 'urn:oid:2.5.4.97'"
          },
          {
            "key": "ndi-personal-identity-number-value-1",
            "human": "A Swedish personal identity number (sv: personnummer) should follow format 198001032385",
            "source": "http://electronichealth.se/fhir/NDI/StructureDefinition/proxy-permission-ps",
            "severity": "error",
            "expression": "value.matches('^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])\\\\d{4}$') or system != 'http://electronichealth.se/identifier/personnummer'"
          },
          {
            "key": "ndi-coordination-number-value-1",
            "human": "A Swedish coordination number (sv: samordningsnummer) should follow format 201903682399",
            "source": "http://electronichealth.se/fhir/NDI/StructureDefinition/proxy-permission-ps",
            "severity": "error",
            "expression": "value.matches('^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(0[1-9]|1[0-2])([6-9][1-9])\\\\d{4}$') or system != 'http://electronichealth.se/identifier/samordningsnummer'"
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.resource:fromCaregiverOrUnit.reference.identifier.system",
        "path": "Permission.rule.data.resource.reference.identifier.system",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.resource:fromCaregiverOrUnit.reference.identifier.value",
        "path": "Permission.rule.data.resource.reference.identifier.value",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.period",
        "path": "Permission.rule.data.period",
        "max": "1",
        "constraint": [
          {
            "key": "ndi-dateTime-1",
            "human": "DateTime must be without timestamp",
            "source": "http://electronichealth.se/fhir/NDI/StructureDefinition/proxy-permission-ps",
            "severity": "error",
            "expression": "$this.toString().contains('T') = false"
          },
          {
            "key": "ndi-dateTime-1",
            "human": "DateTime must be without timestamp",
            "source": "http://electronichealth.se/fhir/NDI/StructureDefinition/proxy-permission-ps",
            "severity": "error",
            "expression": "$this.toString().contains('T') = false"
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.period.start",
        "path": "Permission.rule.data.period.start",
        "mustSupport": true
      },
      {
        "id": "Permission.rule.data.period.end",
        "path": "Permission.rule.data.period.end",
        "mustSupport": true
      },
      {
        "id": "Permission.rule.activity",
        "path": "Permission.rule.activity",
        "min": 1,
        "max": "1",
        "mustSupport": true
      },
      {
        "id": "Permission.rule.activity.actor",
        "path": "Permission.rule.activity.actor",
        "min": 1,
        "max": "1",
        "type": [
          {
            "code": "Reference",
            "targetProfile": [
              "http://electronichealth.se/fhir/NDI/StructureDefinition/related-person-data-access"
            ]
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Permission.rule.activity.actor.identifier",
        "path": "Permission.rule.activity.actor.identifier",
        "min": 1,
        "constraint": [
          {
            "key": "ndi-personal-identity-number-value-1",
            "human": "A Swedish personal identity number (sv: personnummer) should follow format 198001032385",
            "source": "http://electronichealth.se/fhir/NDI/StructureDefinition/proxy-permission-ps",
            "severity": "error",
            "expression": "value.matches('^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])\\\\d{4}$') or system != 'http://electronichealth.se/identifier/personnummer'"
          },
          {
            "key": "ndi-coordination-number-value-1",
            "human": "A Swedish coordination number (sv: samordningsnummer) should follow format 201903682399",
            "source": "http://electronichealth.se/fhir/NDI/StructureDefinition/proxy-permission-ps",
            "severity": "error",
            "expression": "value.matches('^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(0[1-9]|1[0-2])([6-9][1-9])\\\\d{4}$') or system != 'http://electronichealth.se/identifier/samordningsnummer'"
          }
        ],
        "mustSupport": true
      },
      {
        "id": "Permission.rule.activity.actor.identifier.system",
        "path": "Permission.rule.activity.actor.identifier.system",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Permission.rule.activity.actor.identifier.value",
        "path": "Permission.rule.activity.actor.identifier.value",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Permission.rule.activity.action",
        "path": "Permission.rule.activity.action",
        "min": 1,
        "mustSupport": true,
        "binding": {
          "strength": "required",
          "valueSet": "http://electronichealth.se/fhir/NDI/ValueSet/ps-permission-actions"
        }
      },
      {
        "id": "Permission.rule.activity.action.coding",
        "path": "Permission.rule.activity.action.coding",
        "min": 1,
        "max": "1",
        "mustSupport": true
      },
      {
        "id": "Permission.rule.activity.action.coding.system",
        "path": "Permission.rule.activity.action.coding.system",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Permission.rule.activity.action.coding.code",
        "path": "Permission.rule.activity.action.coding.code",
        "min": 1,
        "mustSupport": true
      }
    ]
  }
}