{
  "resourceType": "StructureDefinition",
  "id": "NPPRContactPoint",
  "url": "http://electronichealth.se/fhir/NPPR/StructureDefinition/NPPRContactPoint",
  "name": "NPPRContactPoint",
  "status": "active",
  "description": "Profile for expressing telecom details with valid value formats",
  "fhirVersion": "5.0.0",
  "kind": "complex-type",
  "abstract": false,
  "type": "ContactPoint",
  "baseDefinition": "http://hl7.org/fhir/StructureDefinition/ContactPoint",
  "derivation": "constraint",
  "snapshot": {
    "element": [
      {
        "id": "ContactPoint",
        "path": "ContactPoint",
        "short": "Details of a Technology mediated contact point (phone, fax, email, etc.)",
        "definition": "Details for all kinds of technology mediated contact points for a person or organization, including telephone, email, etc.",
        "min": 0,
        "max": "*",
        "base": {
          "path": "ContactPoint",
          "min": 0,
          "max": "*"
        },
        "constraint": [
          {
            "key": "ele-1",
            "severity": "error",
            "human": "All FHIR elements must have a @value or children",
            "expression": "hasValue() or (children().count() > id.count())",
            "source": "http://hl7.org/fhir/StructureDefinition/Element"
          },
          {
            "key": "cpt-2",
            "severity": "error",
            "human": "A system is required if a value is provided.",
            "expression": "value.empty() or system.exists()",
            "source": "http://hl7.org/fhir/StructureDefinition/ContactPoint"
          },
          {
            "key": "nppr-telecom-phone-1",
            "severity": "warning",
            "human": "If telecom.system = #phone, value should follow format +46123456789",
            "expression": "value.matches('^\\\\+[1-9][0-9]+$') or system != 'phone'",
            "source": "http://electronichealth.se/fhir/NPPR/StructureDefinition/NPPRContactPoint"
          },
          {
            "key": "nppr-telecom-url-1",
            "severity": "warning",
            "human": "If telecom.system = #url, value should follow valid format. Example: https://example.com",
            "expression": "value.matches('(https?|ftp)://(-\\\\.)?([^\\\\s/?\\\\.#-]+\\\\.?)+(/[^\\\\s]*)?$') or system != 'url'",
            "source": "http://electronichealth.se/fhir/NPPR/StructureDefinition/NPPRContactPoint"
          },
          {
            "key": "nppr-telecom-email-1",
            "severity": "warning",
            "human": "If telecom.system = #email, value should follow valid format Example: test@test.com",
            "expression": "value.matches('^[\\\\w.-]{1,64}@(?!.{254})[\\\\w.-]+\\\\.[A-Za-z]{2,4}$') or system != 'email'",
            "source": "http://electronichealth.se/fhir/NPPR/StructureDefinition/NPPRContactPoint"
          }
        ],
        "mapping": [
          {
            "identity": "rim",
            "map": "n/a"
          },
          {
            "identity": "v2",
            "map": "XTN"
          },
          {
            "identity": "rim",
            "map": "TEL"
          },
          {
            "identity": "servd",
            "map": "ContactPoint"
          }
        ]
      },
      {
        "id": "ContactPoint.id",
        "path": "ContactPoint.id",
        "representation": [
          "xmlAttr"
        ],
        "short": "Unique id for inter-element referencing",
        "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.",
        "min": 0,
        "max": "1",
        "base": {
          "path": "Element.id",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "extension": [
              {
                "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type",
                "valueUrl": "string"
              }
            ],
            "code": "http://hl7.org/fhirpath/System.String"
          }
        ],
        "condition": [
          "ele-1"
        ],
        "mapping": [
          {
            "identity": "rim",
            "map": "n/a"
          }
        ]
      },
      {
        "id": "ContactPoint.extension",
        "path": "ContactPoint.extension",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "url"
            }
          ],
          "description": "Extensions are always sliced by (at least) url",
          "rules": "open"
        },
        "short": "Additional content defined by implementations",
        "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.",
        "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions.  The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.",
        "alias": [
          "extensions",
          "user content"
        ],
        "min": 0,
        "max": "*",
        "base": {
          "path": "Element.extension",
          "min": 0,
          "max": "*"
        },
        "type": [
          {
            "code": "Extension"
          }
        ],
        "constraint": [
          {
            "key": "ele-1",
            "severity": "error",
            "human": "All FHIR elements must have a @value or children",
            "expression": "hasValue() or (children().count() > id.count())",
            "source": "http://hl7.org/fhir/StructureDefinition/Element"
          },
          {
            "key": "ext-1",
            "severity": "error",
            "human": "Must have either extensions or value[x], not both",
            "expression": "extension.exists() != value.exists()",
            "source": "http://hl7.org/fhir/StructureDefinition/Extension"
          }
        ],
        "mapping": [
          {
            "identity": "rim",
            "map": "n/a"
          },
          {
            "identity": "rim",
            "map": "N/A"
          }
        ]
      },
      {
        "id": "ContactPoint.system",
        "path": "ContactPoint.system",
        "short": "phone | fax | email | pager | url | sms | other",
        "definition": "Telecommunications form for contact point - what communications system is required to make use of the contact.",
        "comment": "Note that FHIR strings SHALL NOT exceed 1,048,576 (1024*1024) characters in size",
        "min": 1,
        "max": "1",
        "base": {
          "path": "ContactPoint.system",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "code"
          }
        ],
        "condition": [
          "cpt-2"
        ],
        "constraint": [
          {
            "key": "ele-1",
            "severity": "error",
            "human": "All FHIR elements must have a @value or children",
            "expression": "hasValue() or (children().count() > id.count())",
            "source": "http://hl7.org/fhir/StructureDefinition/Element"
          }
        ],
        "mustSupport": true,
        "isSummary": true,
        "binding": {
          "extension": [
            {
              "url": "http://hl7.org/fhir/tools/StructureDefinition/binding-definition",
              "valueString": "Telecommunications form for contact point."
            },
            {
              "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName",
              "valueString": "ContactPointSystem"
            }
          ],
          "strength": "required",
          "description": "Telecommunications form for contact point.",
          "valueSet": "http://hl7.org/fhir/ValueSet/contact-point-system"
        },
        "mapping": [
          {
            "identity": "rim",
            "map": "n/a"
          },
          {
            "identity": "v2",
            "map": "XTN.3"
          },
          {
            "identity": "rim",
            "map": "./scheme"
          },
          {
            "identity": "servd",
            "map": "./ContactPointType"
          }
        ]
      },
      {
        "id": "ContactPoint.value",
        "path": "ContactPoint.value",
        "short": "The actual contact point details",
        "definition": "The actual contact point details, in a form that is meaningful to the designated communication system (i.e. phone number or email address).",
        "comment": "Additional text data such as phone extension numbers, or notes about use of the contact are sometimes included in the value.",
        "requirements": "Need to support legacy numbers that are not in a tightly controlled format.",
        "min": 1,
        "max": "1",
        "base": {
          "path": "ContactPoint.value",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "string"
          }
        ],
        "condition": [
          "cpt-2"
        ],
        "constraint": [
          {
            "key": "ele-1",
            "severity": "error",
            "human": "All FHIR elements must have a @value or children",
            "expression": "hasValue() or (children().count() > id.count())",
            "source": "http://hl7.org/fhir/StructureDefinition/Element"
          }
        ],
        "mustSupport": true,
        "isSummary": true,
        "mapping": [
          {
            "identity": "rim",
            "map": "n/a"
          },
          {
            "identity": "v2",
            "map": "XTN.1 (or XTN.12)"
          },
          {
            "identity": "rim",
            "map": "./url"
          },
          {
            "identity": "servd",
            "map": "./Value"
          }
        ]
      },
      {
        "id": "ContactPoint.use",
        "path": "ContactPoint.use",
        "short": "home | work | temp | old | mobile - purpose of this contact point",
        "definition": "Identifies the purpose for the contact point.",
        "comment": "Applications can assume that a contact is current unless it explicitly says that it is temporary or old.",
        "requirements": "Need to track the way a person uses this contact, so a user can choose which is appropriate for their purpose.",
        "min": 0,
        "max": "1",
        "base": {
          "path": "ContactPoint.use",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "code"
          }
        ],
        "constraint": [
          {
            "key": "ele-1",
            "severity": "error",
            "human": "All FHIR elements must have a @value or children",
            "expression": "hasValue() or (children().count() > id.count())",
            "source": "http://hl7.org/fhir/StructureDefinition/Element"
          }
        ],
        "mustSupport": true,
        "isModifier": true,
        "isModifierReason": "This is labeled as \"Is Modifier\" because applications should not mistake a temporary or old contact etc.for a current/permanent one",
        "isSummary": true,
        "binding": {
          "extension": [
            {
              "url": "http://hl7.org/fhir/tools/StructureDefinition/binding-definition",
              "valueString": "Use of contact point."
            },
            {
              "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName",
              "valueString": "ContactPointUse"
            }
          ],
          "strength": "required",
          "description": "Use of contact point.",
          "valueSet": "http://hl7.org/fhir/ValueSet/contact-point-use|5.0.0"
        },
        "mapping": [
          {
            "identity": "rim",
            "map": "n/a"
          },
          {
            "identity": "v2",
            "map": "XTN.2 - but often indicated by field"
          },
          {
            "identity": "rim",
            "map": "unique(./use)"
          },
          {
            "identity": "servd",
            "map": "./ContactPointPurpose"
          }
        ]
      },
      {
        "id": "ContactPoint.rank",
        "path": "ContactPoint.rank",
        "short": "Specify preferred order of use (1 = highest)",
        "definition": "Specifies a preferred order in which to use a set of contacts. ContactPoints with lower rank values are more preferred than those with higher rank values.",
        "comment": "Note that rank does not necessarily follow the order in which the contacts are represented in the instance.\n\nRanks need not be unique.  E.g. it's possible to have multiple contacts with rank=1.  If the ranks have different systems or uses, this would be interpreted to mean \"X is my most preferred phone number, Y is my most preferred email address\" or \"X is my preferred home email and Y is my preferred work email\".  If the system and use for equally-ranked contacts are the same, then the level of preference is equivalent for both repetitions. \n\nRanks need not be sequential and not all repetitions must have a rank.  For example, it's possible to have 4 contacts with ranks of 2, 5 and two with no rank specified.  That would be interpreted to mean the first is preferred over the second and no preference stated for the remaining contacts.",
        "min": 0,
        "max": "1",
        "base": {
          "path": "ContactPoint.rank",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "positiveInt"
          }
        ],
        "constraint": [
          {
            "key": "ele-1",
            "severity": "error",
            "human": "All FHIR elements must have a @value or children",
            "expression": "hasValue() or (children().count() > id.count())",
            "source": "http://hl7.org/fhir/StructureDefinition/Element"
          }
        ],
        "isSummary": true,
        "mapping": [
          {
            "identity": "rim",
            "map": "n/a"
          },
          {
            "identity": "v2",
            "map": "n/a"
          }
        ]
      },
      {
        "id": "ContactPoint.period",
        "path": "ContactPoint.period",
        "short": "Time period when the contact point was/is in use",
        "definition": "Time period when the contact point was/is in use.",
        "comment": "A Period specifies a range of time; the context of use will specify whether the entire range applies (e.g. \"the patient was an inpatient of the hospital for this time range\") or one value from the range applies (e.g. \"give to the patient between these two times\").\n\nPeriod is not used for a duration (a measure of elapsed time). See [Duration](datatypes.html#Duration).",
        "min": 1,
        "max": "1",
        "base": {
          "path": "ContactPoint.period",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "Period"
          }
        ],
        "constraint": [
          {
            "key": "ele-1",
            "severity": "error",
            "human": "All FHIR elements must have a @value or children",
            "expression": "hasValue() or (children().count() > id.count())",
            "source": "http://hl7.org/fhir/StructureDefinition/Element"
          },
          {
            "key": "per-1",
            "severity": "error",
            "human": "If present, start SHALL have a lower or equal value than end",
            "expression": "start.hasValue().not() or end.hasValue().not() or (start.lowBoundary() <= end.highBoundary())",
            "source": "http://hl7.org/fhir/StructureDefinition/Period"
          }
        ],
        "mustSupport": true,
        "isSummary": true,
        "mapping": [
          {
            "identity": "rim",
            "map": "n/a"
          },
          {
            "identity": "v2",
            "map": "DR"
          },
          {
            "identity": "rim",
            "map": "IVL<TS>[lowClosed=\"true\" and highClosed=\"true\"] or URG<TS>[lowClosed=\"true\" and highClosed=\"true\"]"
          },
          {
            "identity": "v2",
            "map": "N/A"
          },
          {
            "identity": "rim",
            "map": "./usablePeriod[type=\"IVL<TS>\"]"
          },
          {
            "identity": "servd",
            "map": "./StartDate and ./EndDate"
          }
        ]
      },
      {
        "id": "ContactPoint.period.id",
        "path": "ContactPoint.period.id",
        "representation": [
          "xmlAttr"
        ],
        "short": "Unique id for inter-element referencing",
        "definition": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.",
        "min": 0,
        "max": "1",
        "base": {
          "path": "Element.id",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "extension": [
              {
                "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type",
                "valueUrl": "string"
              }
            ],
            "code": "http://hl7.org/fhirpath/System.String"
          }
        ],
        "condition": [
          "ele-1"
        ],
        "mapping": [
          {
            "identity": "rim",
            "map": "n/a"
          }
        ]
      },
      {
        "id": "ContactPoint.period.extension",
        "path": "ContactPoint.period.extension",
        "slicing": {
          "discriminator": [
            {
              "type": "value",
              "path": "url"
            }
          ],
          "description": "Extensions are always sliced by (at least) url",
          "rules": "open"
        },
        "short": "Additional content defined by implementations",
        "definition": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.",
        "comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions.  The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.",
        "alias": [
          "extensions",
          "user content"
        ],
        "min": 0,
        "max": "*",
        "base": {
          "path": "Element.extension",
          "min": 0,
          "max": "*"
        },
        "type": [
          {
            "code": "Extension"
          }
        ],
        "constraint": [
          {
            "key": "ele-1",
            "severity": "error",
            "human": "All FHIR elements must have a @value or children",
            "expression": "hasValue() or (children().count() > id.count())",
            "source": "http://hl7.org/fhir/StructureDefinition/Element"
          },
          {
            "key": "ext-1",
            "severity": "error",
            "human": "Must have either extensions or value[x], not both",
            "expression": "extension.exists() != value.exists()",
            "source": "http://hl7.org/fhir/StructureDefinition/Extension"
          }
        ],
        "mapping": [
          {
            "identity": "rim",
            "map": "n/a"
          },
          {
            "identity": "rim",
            "map": "N/A"
          }
        ]
      },
      {
        "id": "ContactPoint.period.start",
        "path": "ContactPoint.period.start",
        "short": "Starting time with inclusive boundary",
        "definition": "The start of the period. The boundary is inclusive.",
        "comment": "If the low element is missing, the meaning is that the low boundary is not known.",
        "min": 1,
        "max": "1",
        "base": {
          "path": "Period.start",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "dateTime"
          }
        ],
        "condition": [
          "per-1"
        ],
        "constraint": [
          {
            "key": "ele-1",
            "severity": "error",
            "human": "All FHIR elements must have a @value or children",
            "expression": "hasValue() or (children().count() > id.count())",
            "source": "http://hl7.org/fhir/StructureDefinition/Element"
          }
        ],
        "mustSupport": true,
        "isSummary": true,
        "mapping": [
          {
            "identity": "rim",
            "map": "n/a"
          },
          {
            "identity": "v2",
            "map": "DR.1"
          },
          {
            "identity": "rim",
            "map": "./low"
          }
        ]
      },
      {
        "id": "ContactPoint.period.end",
        "path": "ContactPoint.period.end",
        "short": "End time with inclusive boundary, if not ongoing",
        "definition": "The end of the period. If the end of the period is missing, it means no end was known or planned at the time the instance was created. The start may be in the past, and the end date in the future, which means that period is expected/planned to end at that time.",
        "comment": "The end value includes any matching date/time. i.e. 2012-02-03T10:00:00 is in a period that has an end value of 2012-02-03.",
        "min": 0,
        "max": "1",
        "base": {
          "path": "Period.end",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "dateTime"
          }
        ],
        "meaningWhenMissing": "If the end of the period is missing, it means that the period is ongoing",
        "condition": [
          "per-1"
        ],
        "constraint": [
          {
            "key": "ele-1",
            "severity": "error",
            "human": "All FHIR elements must have a @value or children",
            "expression": "hasValue() or (children().count() > id.count())",
            "source": "http://hl7.org/fhir/StructureDefinition/Element"
          }
        ],
        "mustSupport": true,
        "isSummary": true,
        "mapping": [
          {
            "identity": "rim",
            "map": "n/a"
          },
          {
            "identity": "v2",
            "map": "DR.2"
          },
          {
            "identity": "rim",
            "map": "./high"
          }
        ]
      }
    ]
  },
  "differential": {
    "element": [
      {
        "id": "ContactPoint",
        "path": "ContactPoint",
        "constraint": [
          {
            "key": "nppr-telecom-phone-1",
            "severity": "warning",
            "human": "If telecom.system = #phone, value should follow format +46123456789",
            "expression": "value.matches('^\\\\+[1-9][0-9]+$') or system != 'phone'",
            "source": "http://electronichealth.se/fhir/NPPR/StructureDefinition/NPPRContactPoint"
          },
          {
            "key": "nppr-telecom-url-1",
            "severity": "warning",
            "human": "If telecom.system = #url, value should follow valid format. Example: https://example.com",
            "expression": "value.matches('(https?|ftp)://(-\\\\.)?([^\\\\s/?\\\\.#-]+\\\\.?)+(/[^\\\\s]*)?$') or system != 'url'",
            "source": "http://electronichealth.se/fhir/NPPR/StructureDefinition/NPPRContactPoint"
          },
          {
            "key": "nppr-telecom-email-1",
            "severity": "warning",
            "human": "If telecom.system = #email, value should follow valid format Example: test@test.com",
            "expression": "value.matches('^[\\\\w.-]{1,64}@(?!.{254})[\\\\w.-]+\\\\.[A-Za-z]{2,4}$') or system != 'email'",
            "source": "http://electronichealth.se/fhir/NPPR/StructureDefinition/NPPRContactPoint"
          }
        ]
      },
      {
        "id": "ContactPoint.system",
        "path": "ContactPoint.system",
        "min": 1,
        "mustSupport": true,
        "binding": {
          "strength": "required",
          "valueSet": "http://hl7.org/fhir/ValueSet/contact-point-system"
        }
      },
      {
        "id": "ContactPoint.value",
        "path": "ContactPoint.value",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "ContactPoint.use",
        "path": "ContactPoint.use",
        "mustSupport": true
      },
      {
        "id": "ContactPoint.period",
        "path": "ContactPoint.period",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "ContactPoint.period.start",
        "path": "ContactPoint.period.start",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "ContactPoint.period.end",
        "path": "ContactPoint.period.end",
        "mustSupport": true
      }
    ]
  }
}