<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="external-prefill-source" />
  <url value="https://helsenorge.no/fhir/StructureDefinition/external-prefill-source" />
  <version value="1.0.0" />
  <name value="ExternalPrefillSource" />
  <title value="External Prefill Source" />
  <description value="Defines an external service that can be used by custom prefill expressions in a Questionnaire." />
  <fhirVersion value="4.0.1" />
  <kind value="complex-type" />
  <abstract value="false" />
  <context>
    <type value="element" />
    <expression value="Questionnaire" />
  </context>
  <type value="Extension" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Extension" />
  <derivation value="constraint" />
  <differential>
    <element id="Extension">
      <path value="Extension" />
      <short value="External Prefill Source" />
      <definition value="Defines an external service that can be used by custom prefill expressions in a Questionnaire." />
    </element>
    <element id="Extension.extension">
      <path value="Extension.extension" />
      <min value="3" />
    </element>
    <element id="Extension.extension:name">
      <path value="Extension.extension" />
      <sliceName value="name" />
      <short value="Logical unique identifier of the service" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Extension.extension:name.extension">
      <path value="Extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:name.url">
      <path value="Extension.extension.url" />
      <fixedUri value="name" />
    </element>
    <element id="Extension.extension:name.value[x]">
      <path value="Extension.extension.value[x]" />
      <type>
        <code value="id" />
      </type>
    </element>
    <element id="Extension.extension:method">
      <path value="Extension.extension" />
      <sliceName value="method" />
      <short value="HTTP method" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Extension.extension:method.extension">
      <path value="Extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:method.url">
      <path value="Extension.extension.url" />
      <fixedUri value="method" />
    </element>
    <element id="Extension.extension:method.value[x]">
      <path value="Extension.extension.value[x]" />
      <type>
        <code value="code" />
      </type>
      <binding>
        <strength value="required" />
        <valueSet value="http://example.org/ValueSet/http-method-vs" />
      </binding>
    </element>
    <element id="Extension.extension:endpoint">
      <path value="Extension.extension" />
      <sliceName value="endpoint" />
      <short value="Endpoint URL template" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Extension.extension:endpoint.extension">
      <path value="Extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:endpoint.url">
      <path value="Extension.extension.url" />
      <fixedUri value="endpoint" />
    </element>
    <element id="Extension.extension:endpoint.value[x]">
      <path value="Extension.extension.value[x]" />
      <type>
        <code value="url" />
      </type>
    </element>
    <element id="Extension.extension:subjectParameter">
      <path value="Extension.extension" />
      <sliceName value="subjectParameter" />
      <short value="Name of parameter receiving subject identifier" />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:subjectParameter.extension">
      <path value="Extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:subjectParameter.url">
      <path value="Extension.extension.url" />
      <fixedUri value="subjectParameter" />
    </element>
    <element id="Extension.extension:subjectParameter.value[x]">
      <path value="Extension.extension.value[x]" />
      <type>
        <code value="string" />
      </type>
    </element>
    <element id="Extension.extension:parameters">
      <path value="Extension.extension" />
      <sliceName value="parameters" />
      <short value="Request parameters" />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:parameters.extension:parameter">
      <path value="Extension.extension.extension" />
      <sliceName value="parameter" />
      <short value="Single request parameter" />
      <min value="0" />
      <max value="*" />
    </element>
    <element id="Extension.extension:parameters.extension:parameter.extension">
      <path value="Extension.extension.extension.extension" />
      <min value="2" />
    </element>
    <element id="Extension.extension:parameters.extension:parameter.extension:name">
      <path value="Extension.extension.extension.extension" />
      <sliceName value="name" />
      <short value="Parameter name" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Extension.extension:parameters.extension:parameter.extension:name.extension">
      <path value="Extension.extension.extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:parameters.extension:parameter.extension:name.url">
      <path value="Extension.extension.extension.extension.url" />
      <fixedUri value="name" />
    </element>
    <element id="Extension.extension:parameters.extension:parameter.extension:name.value[x]">
      <path value="Extension.extension.extension.extension.value[x]" />
      <type>
        <code value="string" />
      </type>
    </element>
    <element id="Extension.extension:parameters.extension:parameter.extension:value">
      <path value="Extension.extension.extension.extension" />
      <sliceName value="value" />
      <short value="Parameter value or template" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Extension.extension:parameters.extension:parameter.extension:value.extension">
      <path value="Extension.extension.extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:parameters.extension:parameter.extension:value.url">
      <path value="Extension.extension.extension.extension.url" />
      <fixedUri value="value" />
    </element>
    <element id="Extension.extension:parameters.extension:parameter.extension:value.value[x]">
      <path value="Extension.extension.extension.extension.value[x]" />
      <type>
        <code value="string" />
      </type>
    </element>
    <element id="Extension.extension:parameters.extension:parameter.url">
      <path value="Extension.extension.extension.url" />
      <fixedUri value="parameter" />
    </element>
    <element id="Extension.extension:parameters.extension:parameter.value[x]">
      <path value="Extension.extension.extension.value[x]" />
      <max value="0" />
    </element>
    <element id="Extension.extension:parameters.url">
      <path value="Extension.extension.url" />
      <fixedUri value="parameters" />
    </element>
    <element id="Extension.extension:parameters.value[x]">
      <path value="Extension.extension.value[x]" />
      <max value="0" />
    </element>
    <element id="Extension.extension:auth">
      <path value="Extension.extension" />
      <sliceName value="auth" />
      <short value="Authentication metadata" />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:auth.extension">
      <path value="Extension.extension.extension" />
      <min value="1" />
    </element>
    <element id="Extension.extension:auth.extension:type">
      <path value="Extension.extension.extension" />
      <sliceName value="type" />
      <short value="Authentication type" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Extension.extension:auth.extension:type.extension">
      <path value="Extension.extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:auth.extension:type.url">
      <path value="Extension.extension.extension.url" />
      <fixedUri value="type" />
    </element>
    <element id="Extension.extension:auth.extension:type.value[x]">
      <path value="Extension.extension.extension.value[x]" />
      <type>
        <code value="code" />
      </type>
      <binding>
        <strength value="required" />
        <valueSet value="http://example.org/ValueSet/auth-type-vs" />
      </binding>
    </element>
    <element id="Extension.extension:auth.extension:credentialRef">
      <path value="Extension.extension.extension" />
      <sliceName value="credentialRef" />
      <short value="Reference to external credential configuration" />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:auth.extension:credentialRef.extension">
      <path value="Extension.extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:auth.extension:credentialRef.url">
      <path value="Extension.extension.extension.url" />
      <fixedUri value="credentialRef" />
    </element>
    <element id="Extension.extension:auth.extension:credentialRef.value[x]">
      <path value="Extension.extension.extension.value[x]" />
      <type>
        <code value="id" />
      </type>
    </element>
    <element id="Extension.extension:auth.extension:scope">
      <path value="Extension.extension.extension" />
      <sliceName value="scope" />
      <short value="OAuth scope" />
      <min value="0" />
      <max value="*" />
    </element>
    <element id="Extension.extension:auth.extension:scope.extension">
      <path value="Extension.extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:auth.extension:scope.url">
      <path value="Extension.extension.extension.url" />
      <fixedUri value="scope" />
    </element>
    <element id="Extension.extension:auth.extension:scope.value[x]">
      <path value="Extension.extension.extension.value[x]" />
      <type>
        <code value="string" />
      </type>
    </element>
    <element id="Extension.extension:auth.url">
      <path value="Extension.extension.url" />
      <fixedUri value="auth" />
    </element>
    <element id="Extension.extension:auth.value[x]">
      <path value="Extension.extension.value[x]" />
      <max value="0" />
    </element>
    <element id="Extension.extension:headers">
      <path value="Extension.extension" />
      <sliceName value="headers" />
      <short value="Static HTTP headers" />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:headers.extension:header">
      <path value="Extension.extension.extension" />
      <sliceName value="header" />
      <short value="Single HTTP header" />
      <min value="0" />
      <max value="*" />
    </element>
    <element id="Extension.extension:headers.extension:header.extension">
      <path value="Extension.extension.extension.extension" />
      <min value="2" />
    </element>
    <element id="Extension.extension:headers.extension:header.extension:name">
      <path value="Extension.extension.extension.extension" />
      <sliceName value="name" />
      <short value="Header name" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Extension.extension:headers.extension:header.extension:name.extension">
      <path value="Extension.extension.extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:headers.extension:header.extension:name.url">
      <path value="Extension.extension.extension.extension.url" />
      <fixedUri value="name" />
    </element>
    <element id="Extension.extension:headers.extension:header.extension:name.value[x]">
      <path value="Extension.extension.extension.extension.value[x]" />
      <type>
        <code value="string" />
      </type>
    </element>
    <element id="Extension.extension:headers.extension:header.extension:value">
      <path value="Extension.extension.extension.extension" />
      <sliceName value="value" />
      <short value="Header value" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Extension.extension:headers.extension:header.extension:value.extension">
      <path value="Extension.extension.extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:headers.extension:header.extension:value.url">
      <path value="Extension.extension.extension.extension.url" />
      <fixedUri value="value" />
    </element>
    <element id="Extension.extension:headers.extension:header.extension:value.value[x]">
      <path value="Extension.extension.extension.extension.value[x]" />
      <type>
        <code value="string" />
      </type>
    </element>
    <element id="Extension.extension:headers.extension:header.url">
      <path value="Extension.extension.extension.url" />
      <fixedUri value="header" />
    </element>
    <element id="Extension.extension:headers.extension:header.value[x]">
      <path value="Extension.extension.extension.value[x]" />
      <max value="0" />
    </element>
    <element id="Extension.extension:headers.url">
      <path value="Extension.extension.url" />
      <fixedUri value="headers" />
    </element>
    <element id="Extension.extension:headers.value[x]">
      <path value="Extension.extension.value[x]" />
      <max value="0" />
    </element>
    <element id="Extension.extension:paging">
      <path value="Extension.extension" />
      <sliceName value="paging" />
      <short value="Paging configuration" />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:paging.extension">
      <path value="Extension.extension.extension" />
      <min value="1" />
    </element>
    <element id="Extension.extension:paging.extension:mode">
      <path value="Extension.extension.extension" />
      <sliceName value="mode" />
      <short value="Paging mode" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Extension.extension:paging.extension:mode.extension">
      <path value="Extension.extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:paging.extension:mode.url">
      <path value="Extension.extension.extension.url" />
      <fixedUri value="mode" />
    </element>
    <element id="Extension.extension:paging.extension:mode.value[x]">
      <path value="Extension.extension.extension.value[x]" />
      <type>
        <code value="code" />
      </type>
      <binding>
        <strength value="required" />
        <valueSet value="http://example.org/ValueSet/paging-mode-vs" />
      </binding>
    </element>
    <element id="Extension.extension:paging.extension:nextPath">
      <path value="Extension.extension.extension" />
      <sliceName value="nextPath" />
      <short value="Path to next-page token or URL" />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:paging.extension:nextPath.extension">
      <path value="Extension.extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:paging.extension:nextPath.url">
      <path value="Extension.extension.extension.url" />
      <fixedUri value="nextPath" />
    </element>
    <element id="Extension.extension:paging.extension:nextPath.value[x]">
      <path value="Extension.extension.extension.value[x]" />
      <type>
        <code value="string" />
      </type>
    </element>
    <element id="Extension.extension:paging.url">
      <path value="Extension.extension.url" />
      <fixedUri value="paging" />
    </element>
    <element id="Extension.extension:paging.value[x]">
      <path value="Extension.extension.value[x]" />
      <max value="0" />
    </element>
    <element id="Extension.extension:retry">
      <path value="Extension.extension" />
      <sliceName value="retry" />
      <short value="Retry behavior configuration" />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:retry.extension">
      <path value="Extension.extension.extension" />
      <min value="1" />
    </element>
    <element id="Extension.extension:retry.extension:maxAttempts">
      <path value="Extension.extension.extension" />
      <sliceName value="maxAttempts" />
      <short value="Maximum retry attempts" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Extension.extension:retry.extension:maxAttempts.extension">
      <path value="Extension.extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:retry.extension:maxAttempts.url">
      <path value="Extension.extension.extension.url" />
      <fixedUri value="maxAttempts" />
    </element>
    <element id="Extension.extension:retry.extension:maxAttempts.value[x]">
      <path value="Extension.extension.extension.value[x]" />
      <type>
        <code value="integer" />
      </type>
    </element>
    <element id="Extension.extension:retry.extension:delayMilliseconds">
      <path value="Extension.extension.extension" />
      <sliceName value="delayMilliseconds" />
      <short value="Delay between retries in milliseconds" />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:retry.extension:delayMilliseconds.extension">
      <path value="Extension.extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:retry.extension:delayMilliseconds.url">
      <path value="Extension.extension.extension.url" />
      <fixedUri value="delayMilliseconds" />
    </element>
    <element id="Extension.extension:retry.extension:delayMilliseconds.value[x]">
      <path value="Extension.extension.extension.value[x]" />
      <type>
        <code value="integer" />
      </type>
    </element>
    <element id="Extension.extension:retry.url">
      <path value="Extension.extension.url" />
      <fixedUri value="retry" />
    </element>
    <element id="Extension.extension:retry.value[x]">
      <path value="Extension.extension.value[x]" />
      <max value="0" />
    </element>
    <element id="Extension.extension:resultPath">
      <path value="Extension.extension" />
      <sliceName value="resultPath" />
      <short value="Path into response payload containing result object" />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="Extension.extension:resultPath.extension">
      <path value="Extension.extension.extension" />
      <max value="0" />
    </element>
    <element id="Extension.extension:resultPath.url">
      <path value="Extension.extension.url" />
      <fixedUri value="resultPath" />
    </element>
    <element id="Extension.extension:resultPath.value[x]">
      <path value="Extension.extension.value[x]" />
      <type>
        <code value="string" />
      </type>
    </element>
    <element id="Extension.url">
      <path value="Extension.url" />
      <fixedUri value="https://helsenorge.no/fhir/StructureDefinition/external-prefill-source" />
    </element>
    <element id="Extension.value[x]">
      <path value="Extension.value[x]" />
      <max value="0" />
    </element>
  </differential>
</StructureDefinition>