<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="digidot-ServiceRequest-no" />
  <url value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
  <version value="0.6.8" />
  <name value="DigidotServiceRequestNo" />
  <title value="DigiDOT ServiceRequest (NO)" />
  <status value="draft" />
  <date value="2026-10-19" />
  <publisher value="Novari AS - DigiDOT" />
  <description value="Readiness: [In review](https://simplifier.net/guide/Visual-overview/Home/Review-status-and-releases.page.md?version=current#readiness-servicerequest).&#xA;&#xA;Profile base: FHIR R4 ServiceRequest (http://hl7.org/fhir/StructureDefinition/ServiceRequest).&#xA;&#xA;Represents planned or requested dental care, including routine recall, treatment, diagnostic assessment and follow-up. Use it to record what is proposed, planned or ordered, why it is needed and when it should take place. A request can guide one or more appointments and be linked to the care delivered. The Appointment profile represents the booking, while the Procedure profile records what was actually done, attempted or not done.&#xA;&#xA;Specific service codes describe planned SNOMED CT procedure situations. A coded clinical reason may be supplied separately in reasonCode or linked as an existing finding through reasonReference.&#xA;&#xA;A recurring recall is an ongoing care plan: occurrenceTiming records its first due date and assessed interval. Completing one visit does not complete the plan. See the [recall and workflow guidance](https://simplifier.net/guide/Visual-overview/Home/ServiceRequest-use.page.md?version=current)." />
  <purpose value="Use for clinical treatment requests and general recall plans. General recall is identified by category dental-recall and requested timing; no artificial SNOMED procedure code is required. Specific treatment, diagnostic and follow-up requests require a planned service code. Appointment schedules individual attendance; an ongoing recurring recall plan is not completed by one appointment." />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="ServiceRequest" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/ServiceRequest" />
  <derivation value="constraint" />
  <differential>
    <element id="ServiceRequest">
      <path value="ServiceRequest" />
      <short value="Planned, proposed or ordered dental service" />
      <definition value="One planned, proposed or ordered dental service, including a specialist referral. Appointment schedules it, Encounter records care that actually happened, and Procedure or Observation records clinical actions/results. These resources retain independent identities and lifecycle states." />
      <constraint>
        <key value="digidot-sr-recall-occurrence" />
        <severity value="error" />
        <human value="A ServiceRequest with category dental-recall SHALL have occurrence[x] to express the recall due date, due window or cadence. The exact booked time belongs on Appointment." />
        <expression value="category.coding.where(system = 'https://novari.no/fhir/digidot/CodeSystem/digidot-service-request-category' and code = 'dental-recall').empty() or occurrence.exists()" />
      </constraint>
      <constraint>
        <key value="digidot-sr-recall-plan" />
        <severity value="warning" />
        <human value="A ServiceRequest with category dental-recall SHOULD normally use intent = plan." />
        <expression value="category.coding.where(system = 'https://novari.no/fhir/digidot/CodeSystem/digidot-service-request-category' and code = 'dental-recall').empty() or intent = 'plan'" />
      </constraint>
      <constraint>
        <key value="servicerequest-anatomy-same-release" />
        <severity value="error" />
        <human value="When bodySite is populated, SNOMED CT clinical codings use the Norwegian edition release http://snomed.info/sct/51000202101/version/20260715." />
        <expression value="bodySite.empty() or code.coding.where(system = 'http://snomed.info/sct').all(version = 'http://snomed.info/sct/51000202101/version/20260715')" />
      </constraint>
      <constraint>
        <key value="digidot-sr-specific-service-code" />
        <severity value="error" />
        <human value="Only general dental recall may omit the clinical service code. Treatment, diagnostic and specific follow-up requests require code." />
        <expression value="category.coding.where(system = 'https://novari.no/fhir/digidot/CodeSystem/digidot-service-request-category' and code = 'dental-recall').exists() or code.exists()" />
      </constraint>
      <constraint>
        <key value="digidot-sr-uncoded-recall-anatomy" />
        <severity value="error" />
        <human value="An uncoded general recall does not specify a tooth or anatomical target; targeted services require code." />
        <expression value="code.exists() or bodySite.empty()" />
      </constraint>
      <constraint>
        <key value="digidot-sr-recall-cadence" />
        <severity value="error" />
        <human value="A recurring dental recall Timing must identify its first intended due date, interval length and interval unit." />
        <expression value="category.coding.where(system = 'https://novari.no/fhir/digidot/CodeSystem/digidot-service-request-category' and code = 'dental-recall').empty() or occurrence.ofType(Timing).empty() or (occurrence.ofType(Timing).repeat.bounds.ofType(Period).start.exists() and occurrence.ofType(Timing).repeat.period.exists() and occurrence.ofType(Timing).repeat.periodUnit.exists())" />
      </constraint>
      <constraint>
        <key value="digidot-sr-recall-regular-interval" />
        <severity value="error" />
        <human value="A recurring general recall has one occurrence per positive fixed period; periodMax is not used." />
        <expression value="category.coding.where(system = 'https://novari.no/fhir/digidot/CodeSystem/digidot-service-request-category' and code = 'dental-recall').empty() or occurrence.ofType(Timing).empty() or (occurrence.ofType(Timing).repeat.period &gt; 0 and occurrence.ofType(Timing).repeat.periodMax.empty())" />
      </constraint>
      <constraint>
        <key value="digidot-status-known" />
        <severity value="error" />
        <human value="Do not use unknown as a default or an unmapped lifecycle status." />
        <expression value="status != 'unknown'" />
      </constraint>
      <constraint>
        <key value="servicerequest-anatomy-version-match" />
        <severity value="error" />
        <human value="Every SNOMED CT anatomical coding in the inline body-structure extension must state the same edition release as SCTextended." />
        <expression value="bodySite.extension.where(url = 'https://novari.no/fhir/digidot/StructureDefinition/digidot-ehds-body-structure').extension.value.ofType(CodeableConcept).coding.where(system = 'http://snomed.info/sct').all(version.exists() and version = %resource.code.coding.where(id = 'SCTextended').version)" />
        <source value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
      </constraint>
    </element>
    <element id="ServiceRequest.implicitRules">
      <path value="ServiceRequest.implicitRules" />
      <short value="Not used in the current DigiDOT ServiceRequest draft" />
      <definition value="The Central Storage representation follows the published DigiDOT profile, terminology release and exchange documentation. It does not use resource-specific implicit rules." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.contained">
      <path value="ServiceRequest.contained" />
      <short value="Not used in the current DigiDOT ServiceRequest draft" />
      <definition value="Relevant resources must have their own FHIR identity, provenance, version history and searchable references in Central Storage." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.extension">
      <path value="ServiceRequest.extension" />
      <short value="No root extensions in the current draft" />
      <definition value="No named and governed ServiceRequest extension is in scope. A future extension requires a documented dental use case, a named and governed definition, and an explicit profile change." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.modifierExtension">
      <path value="ServiceRequest.modifierExtension" />
      <short value="No modifier extensions in the current draft" />
      <definition value="Modifier extensions can alter the meaning of a ServiceRequest. None is defined for the current DigiDOT scope." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.identifier">
      <path value="ServiceRequest.identifier" />
      <short value="Stable source business identifiers when available" />
      <definition value="Stable business identifiers for this record. If the source EHR or external system has a stable business identifier, it SHALL be included and preserved with its assigning system and value. The element is optional when no such identifier is available. Each supplied identifier SHALL contain system and value. Do not copy the local FHIR resource id merely to populate this element." />
      <comment value="MustSupport requires producers to support conveying available source identifiers and receivers to support preserving them; it does not require inventing an identifier when none is available. Any additional identifier-assignment and matching requirements belong in the exchange contract. An integration-assigned identifier requires governed assignment and a persistent mapping across retries; never generate a fresh identifier on each submission. Different records retain their own identities, even when they share the same patient or care episode. Resource references and FHIR server id rules are unchanged." />
      <min value="0" />
      <max value="*" />
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.identifier.system">
      <path value="ServiceRequest.identifier.system" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.identifier.value">
      <path value="ServiceRequest.identifier.value" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.instantiatesCanonical">
      <path value="ServiceRequest.instantiatesCanonical" />
      <short value="Not used in the current DigiDOT ServiceRequest draft" />
      <definition value="No ActivityDefinition or PlanDefinition instantiation model is agreed for the current dental planning scope." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.instantiatesUri">
      <path value="ServiceRequest.instantiatesUri" />
      <short value="Not used in the current DigiDOT ServiceRequest draft" />
      <definition value="No external protocol-instantiation model is agreed for the current dental planning scope." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.basedOn">
      <path value="ServiceRequest.basedOn" />
      <short value="Higher-level dental request that this request fulfils or refines" />
      <definition value="Use basedOn only when this ServiceRequest fulfils or refines another DigiDOT ServiceRequest. Do not use it to link a performed procedure; the Procedure points back with Procedure.basedOn. If the source records this request relationship, it shall be populated." />
      <comment value="Use a literal reference to a separately stored resource conforming to a permitted target profile. Identifier-only and contained references are not permitted. The receiving service must check target existence and profile conformance." />
      <type>
        <code value="Reference" />
        <targetProfile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
      </type>
      <constraint>
        <key value="servicerequest-basedon-literal" />
        <severity value="error" />
        <human value="A shared-resource reference must contain a literal reference value; identifiers and contained references are not permitted." />
        <expression value="($this is Reference) implies (reference.hasValue() and identifier.empty() and reference.startsWith('#').not())" />
        <source value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.basedOn.reference">
      <path value="ServiceRequest.basedOn.reference" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.basedOn.identifier">
      <path value="ServiceRequest.basedOn.identifier" />
      <min value="0" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.replaces">
      <path value="ServiceRequest.replaces" />
      <short value="Previous dental request that this request replaces" />
      <definition value="A previous request superseded by this request. Preserve the old identity and history. A superseded unfulfilled request is normally revoked; completed means its requested service was actually fulfilled. Do not mark it completed merely because a replacement exists." />
      <comment value="Use a literal reference to a separately stored resource conforming to a permitted target profile. Identifier-only and contained references are not permitted. The receiving service must check target existence and profile conformance." />
      <type>
        <code value="Reference" />
        <targetProfile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
      </type>
      <constraint>
        <key value="servicerequest-replaces-literal" />
        <severity value="error" />
        <human value="A shared-resource reference must contain a literal reference value; identifiers and contained references are not permitted." />
        <expression value="($this is Reference) implies (reference.hasValue() and identifier.empty() and reference.startsWith('#').not())" />
        <source value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.replaces.reference">
      <path value="ServiceRequest.replaces.reference" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.replaces.identifier">
      <path value="ServiceRequest.replaces.identifier" />
      <min value="0" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.requisition">
      <path value="ServiceRequest.requisition" />
      <short value="Composite source request identifier when available" />
      <definition value="Use requisition only when the source EHR has a stable composite identifier that groups related requested services. It does not replace the individual ServiceRequest.identifier and does not create an additional clinical-plan model." />
    </element>
    <element id="ServiceRequest.status">
      <path value="ServiceRequest.status" />
      <short value="Lifecycle status of the plan or request" />
      <definition value="Lifecycle of this request. Use completed when the requested service has been fulfilled; sending a referral, booking a time, administrative closure or finishing one contact does not by itself fulfil it. Use revoked for withdrawal/cancellation before fulfilment and on-hold for a paused request. Define fulfilment against the requested scope; assessment-only and assessment-plus-treatment requests may complete at different stages." />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://novari.no/fhir/digidot/ValueSet/digidot-service-request-status" />
      </binding>
    </element>
    <element id="ServiceRequest.intent">
      <path value="ServiceRequest.intent" />
      <short value="Request intent" />
      <definition value="Use the FHIR R4 RequestIntent codes according to the authority of the request. A proposed service may use proposal, an intended care plan normally uses plan, and an authorised referral or request to another performer may use order. Other standard intents remain available when their FHIR meaning fits the source workflow." />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.category">
      <path value="ServiceRequest.category" />
      <short value="DigiDOT workflow category for the planned service" />
      <definition value="Required request category. dental-recall identifies general periodic dental examinations, for which code is optional. dental-treatment, dental-diagnostic and dental-follow-up identify specific services and require code. Do not label targeted treatment as recall to omit its clinical code." />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://novari.no/fhir/digidot/ValueSet/digidot-service-request-category" />
      </binding>
    </element>
    <element id="ServiceRequest.category.extension">
      <path value="ServiceRequest.category.extension" />
      <short value="No extensions on the workflow category" />
      <definition value="The category is represented by one canonical coding from the DigiDOT ServiceRequest Category ValueSet. Extensions are not used in the current draft." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.category.coding">
      <path value="ServiceRequest.category.coding" />
      <short value="Canonical DigiDOT workflow category coding" />
      <definition value="Use exactly one coding with system https://novari.no/fhir/digidot/CodeSystem/digidot-service-request-category and one code from the DigiDOT ServiceRequest Category ValueSet. A display or source text may be included, but it is not the clinical planned-service name." />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.category.coding.extension">
      <path value="ServiceRequest.category.coding.extension" />
      <short value="No extensions on the workflow category coding" />
      <definition value="The workflow category is represented directly by the governed DigiDOT coding. Extensions are not used in the current draft." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.category.coding.system">
      <path value="ServiceRequest.category.coding.system" />
      <short value="DigiDOT ServiceRequest Category CodeSystem" />
      <definition value="Use the fixed DigiDOT ServiceRequest category CodeSystem. It distinguishes the workflow purpose of the request and is separate from the clinical SNOMED CT concept in ServiceRequest.code." />
      <min value="1" />
      <fixedUri value="https://novari.no/fhir/digidot/CodeSystem/digidot-service-request-category" />
    </element>
    <element id="ServiceRequest.category.coding.code">
      <path value="ServiceRequest.category.coding.code" />
      <short value="DigiDOT workflow category code" />
      <definition value="Select one code from the DigiDOT ServiceRequest Category ValueSet: dental-recall, dental-treatment, dental-diagnostic or dental-follow-up. The category must match the request purpose and must not be used as the clinical procedure code." />
      <min value="1" />
    </element>
    <element id="ServiceRequest.category.coding.userSelected">
      <path value="ServiceRequest.category.coding.userSelected" />
      <short value="Not used for the workflow category" />
      <definition value="The DigiDOT workflow category is the agreed exchange representation. userSelected is not used in the current draft." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.priority">
      <path value="ServiceRequest.priority" />
      <short value="Clinical priority of the requested service when known" />
      <definition value="Use the standard FHIR priority when the source records a clinically relevant priority for the requested service. Do not infer priority from appointment availability or administrative scheduling." />
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.doNotPerform">
      <path value="ServiceRequest.doNotPerform" />
      <short value="Not used in the current DigiDOT ServiceRequest draft" />
      <definition value="The current dental planning model uses ServiceRequest.status = revoked for a cancelled request. No separate do-not-perform workflow has been agreed." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.code">
      <path value="ServiceRequest.code" />
      <short value="Planned service; optional for general recall" />
      <definition value="Optional for a general recall identified by category dental-recall and occurrence[x]; required for a specific treatment, diagnostic or follow-up service. Both slots describe a planned Situation identifying the requested procedure and Planned context. A generic Planned procedure concept is not specific enough. In an expression, nest anatomical refinements within Associated procedure, not on the outer Situation. Include exactly one SCTextended coding and optionally one SCTpre coding. SCTextended carries the complete intended meaning as either a single precoordinated SNOMED CT concept or a postcoordinated expression. SCTpre is an optional, directly usable concept representing the same clinical meaning at the same or a compatible broader level of detail. Do not add a duplicate companion merely to fill a slot. When both are present they must use the same edition release and must not contradict each other; the extended coding may add compatible precision. Compatible meaning must be checked through the terminology contract, not inferred from code equality. When bodySite is present, the extended coding must represent the same complete anatomical scope. Prefer a valid postcoordinated expression when additional clinical or anatomical detail needs to be represented. A single precoordinated concept is sufficient if its defined meaning already represents the complete intended scope. Validate concept membership, compositional grammar, MRCM, clinical templates and anatomical equivalence with the terminology service; a FHIR syntax guard cannot establish these semantic requirements." />
      <min value="0" />
      <max value="1" />
      <constraint>
        <key value="digidot-coding-same-release" />
        <severity value="error" />
        <human value="When SCTpre is present, both clinical codings must use the same SNOMED CT edition release." />
        <expression value="coding.where(id = 'SCTpre').empty() or coding.where(id = 'SCTpre').version = coding.where(id = 'SCTextended').version" />
      </constraint>
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <description value="Required planned Procedure with explicit context scope for the clinical code. SCTpre accepts a single concept identifier; SCTextended accepts a concept identifier or a valid expression within this scope. This is a semantic scope, not a national dental reference-set selection." />
        <valueSet value="https://novari.no/fhir/digidot/ValueSet/planned-procedure-situations" />
      </binding>
    </element>
    <element id="ServiceRequest.code.extension">
      <path value="ServiceRequest.code.extension" />
      <short value="No extensions on the planned service code" />
      <definition value="Additional clinical precision is represented by the agreed SCTextended coding in ServiceRequest.code.coding. Extensions on ServiceRequest.code are not used in the current DigiDOT draft." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.code.coding">
      <path value="ServiceRequest.code.coding" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="id" />
        </discriminator>
        <rules value="closed" />
      </slicing>
      <short value="One required extended coding and one optional precoordinated coding" />
      <definition value="Include exactly one SCTextended coding and optionally one SCTpre coding. SCTextended carries the complete intended meaning as either a single precoordinated SNOMED CT concept or a postcoordinated expression. SCTpre is an optional, directly usable concept representing the same clinical meaning at the same or a compatible broader level of detail. Do not add a duplicate companion merely to fill a slot. When both are present they must use the same edition release and must not contradict each other; the extended coding may add compatible precision. Compatible meaning must be checked through the terminology contract, not inferred from code equality. Fixed Coding.id values distinguish the roles because a numeric concept can conform to both datatype profiles." />
      <min value="1" />
      <max value="2" />
    </element>
    <element id="ServiceRequest.code.coding:SCTpre">
      <path value="ServiceRequest.code.coding" />
      <sliceName value="SCTpre" />
      <short value="Optional precoordinated SNOMED CT concept" />
      <definition value="Optional single numeric SNOMED CT concept in the planned Procedure with explicit context scope, compatible with the complete meaning in SCTextended. The SCTpre datatype prohibits postcoordinated expressions, even though the shared ValueSet also supports them for SCTextended. Both codings must use the same edition release. The concept must identify Planned context and a specific associated procedure; a bare Procedure concept is not sufficient." />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Coding" />
        <profile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-Coding-SCTpre-no" />
      </type>
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <description value="Required planned Procedure with explicit context scope, restricted here to a single concept by the SCTpre datatype. Postcoordinated expressions are not permitted in this slice." />
        <valueSet value="https://novari.no/fhir/digidot/ValueSet/planned-procedure-situations" />
      </binding>
    </element>
    <element id="ServiceRequest.code.coding:SCTpre.id">
      <path value="ServiceRequest.code.coding.id" />
      <short value="SCTpre slot identifier" />
      <definition value="Required technical slot identifier. It distinguishes the two roles even when their system, version and code are identical." />
      <min value="1" />
      <fixedString value="SCTpre" />
    </element>
    <element id="ServiceRequest.code.coding:SCTextended">
      <path value="ServiceRequest.code.coding" />
      <sliceName value="SCTextended" />
      <short value="Required extended SNOMED CT code: concept or expression" />
      <definition value="The complete clinical meaning in the planned Procedure with explicit context scope, represented by one sufficiently specific SNOMED CT concept or a valid postcoordinated expression. A single concept is allowed; postcoordination is not mandatory. Follow the meaning and anatomy rules on ServiceRequest.code. Put anatomical refinements on the associated procedure within the planned Situation. Prefer postcoordination for additional clinical detail; do not add an identical SCTpre coding merely to fill the optional slice." />
      <min value="1" />
      <max value="1" />
      <type>
        <code value="Coding" />
        <profile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-Coding-SCTpost-no" />
      </type>
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <description value="Required planned Procedure with explicit context scope. This slice permits a single concept or a valid postcoordinated expression within that scope; expression syntax and meaning need terminology validation." />
        <valueSet value="https://novari.no/fhir/digidot/ValueSet/planned-procedure-situations" />
      </binding>
    </element>
    <element id="ServiceRequest.code.coding:SCTextended.id">
      <path value="ServiceRequest.code.coding.id" />
      <short value="SCTextended slot identifier" />
      <definition value="Required technical slot identifier. It distinguishes the two roles even when their system, version and code are identical." />
      <min value="1" />
      <fixedString value="SCTextended" />
    </element>
    <element id="ServiceRequest.orderDetail">
      <path value="ServiceRequest.orderDetail" />
      <short value="Not used in the current DigiDOT ServiceRequest draft" />
      <definition value="No governed DigiDOT order-detail terminology or EHR mapping is agreed. Use the planned clinical service code, structured anatomy, linked reason and limited note instead." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.quantity[x]">
      <path value="ServiceRequest.quantity[x]" />
      <short value="Not used in the current DigiDOT ServiceRequest draft" />
      <definition value="One DigiDOT ServiceRequest represents one planned service. Multiple planned services should be represented by separate ServiceRequest resources with explicit relationships when needed. No quantity model is agreed for the current dental scope." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.subject">
      <path value="ServiceRequest.subject" />
      <short value="Patient the dental service is planned for" />
      <definition value="Reference the no-basis Patient who is the subject of the planned or requested dental service. External data must be mapped to this agreed patient representation before it becomes a canonical DigiDOT ServiceRequest in Central Storage." />
      <comment value="Use a literal Reference.reference to a separately stored resource conforming to the permitted national target profile. Identifier-only and contained references are not permitted. Official identifiers belong on the target resource. Reuse a confirmed resource in central storage; if no matching resource exists, register it before persisting the clinical reference. The receiving service must check target existence and profile conformance; the profile alone does not perform identity matching or prove that a resource exists in central storage." />
      <min value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-Patient" />
      </type>
      <constraint>
        <key value="servicerequest-subject-literal" />
        <severity value="error" />
        <human value="A shared-resource reference must contain a literal reference value; identifiers and contained references are not permitted." />
        <expression value="($this is Reference) implies (reference.hasValue() and identifier.empty() and reference.startsWith('#').not())" />
        <source value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.subject.reference">
      <path value="ServiceRequest.subject.reference" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.subject.identifier">
      <path value="ServiceRequest.subject.identifier" />
      <min value="0" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.encounter">
      <path value="ServiceRequest.encounter" />
      <short value="Dental contact in which the request was created" />
      <definition value="The contact providing the context in which this request was made. Preserve this originating link. Later assessment, treatment and follow-up contacts reference the request through Encounter.basedOn; never overwrite this field with the most recent fulfilling contact." />
      <comment value="Use a literal reference to a separately stored resource conforming to a permitted target profile. Identifier-only and contained references are not permitted. The receiving service must check target existence and profile conformance." />
      <type>
        <code value="Reference" />
        <targetProfile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-Encounter-no" />
      </type>
      <constraint>
        <key value="servicerequest-encounter-literal" />
        <severity value="error" />
        <human value="A shared-resource reference must contain a literal reference value; identifiers and contained references are not permitted." />
        <expression value="($this is Reference) implies (reference.hasValue() and identifier.empty() and reference.startsWith('#').not())" />
        <source value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.encounter.reference">
      <path value="ServiceRequest.encounter.reference" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.encounter.identifier">
      <path value="ServiceRequest.encounter.identifier" />
      <min value="0" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.occurrence[x]">
      <path value="ServiceRequest.occurrence[x]" />
      <slicing>
        <discriminator>
          <type value="type" />
          <path value="$this" />
        </discriminator>
        <rules value="closed" />
      </slicing>
      <short value="Requested date, window or recurrence for recall, treatment or follow-up" />
      <definition value="Use occurrenceDateTime or occurrencePeriod for an explicitly single due date or window. Use occurrenceTiming.repeat for recurring care, including general recall and targeted follow-up after a procedure. For a regular interval, record the assessed positive interval in period/periodUnit and boundsPeriod.start as the explicit first due date. frequency is not exchanged; its absence means one occurrence per period in FHIR R4. Examples are general recall every 12 months and targeted follow-up every 3 months; these are examples, not fixed defaults. DigiDOT computes nominal due dates from that anchor in calendar units; a late appointment does not silently move the anchor. After clinical reassessment, explicitly update the anchor/interval with version history or replace the request. Use boundsPeriod.end when a finite course is specified; count-based schedules are not exchanged. Exact bookings are separate Appointments. One fulfilled booking does not complete an ongoing recurring request." />
      <comment value="occurrence[x] inherits dateTime, Period and Timing from FHIR R4. In JSON the Timing choice is occurrenceTiming; repeat is inherited from Timing, not a removed element. For follow-up after an earlier Procedure, include that Procedure in supportingInfo where relevant. The first due date is explicitly recorded, not inferred from the preceding procedure date. Recall-specific invariants remain category-specific; other categories may use the permitted R4 Timing fields. Timing.code and repeat.count, countMax, frequency and frequencyMax are not exchanged in any category. See ServiceRequest-use for the regular-interval convention and examples. Explicit type branches document the inherited choices. Expand occurrenceTiming &gt; repeat for recurrence fields and boundsPeriod for the first due date. Instance JSON uses the standard occurrenceDateTime, occurrencePeriod or occurrenceTiming property." />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="dateTime" />
      </type>
      <type>
        <code value="Period" />
      </type>
      <type>
        <code value="Timing" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceDateTime">
      <path value="ServiceRequest.occurrence[x]" />
      <sliceName value="occurrenceDateTime" />
      <short value="Single requested date or time" />
      <definition value="A single requested date or time for recall, treatment, diagnostic assessment or follow-up. Exact bookings are represented by Appointment." />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="dateTime" />
      </type>
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrencePeriod">
      <path value="ServiceRequest.occurrence[x]" />
      <sliceName value="occurrencePeriod" />
      <short value="Requested date or time window" />
      <definition value="A requested window for the service. Exact bookings are represented by Appointment." />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Period" />
      </type>
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming">
      <path value="ServiceRequest.occurrence[x]" />
      <sliceName value="occurrenceTiming" />
      <short value="Schedule for recall, treatment or follow-up" />
      <definition value="A repeating or otherwise specified schedule for the requested service. A regular recall uses repeat.boundsPeriod.start for its first intended due date and repeat.period/periodUnit for the interval. With frequency absent, FHIR R4 interprets one occurrence per period. More than one occurrence per interval is outside this draft pattern." />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Timing" />
      </type>
      <example>
        <label value="General recall every twelve months" />
        <valueTiming>
          <repeat>
            <boundsPeriod>
              <start value="2027-09-22" />
            </boundsPeriod>
            <period value="12" />
            <periodUnit value="mo" />
          </repeat>
        </valueTiming>
      </example>
      <example>
        <label value="Targeted follow-up every three months" />
        <valueTiming>
          <repeat>
            <boundsPeriod>
              <start value="2026-12-22" />
            </boundsPeriod>
            <period value="3" />
            <periodUnit value="mo" />
          </repeat>
        </valueTiming>
      </example>
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.repeat">
      <path value="ServiceRequest.occurrence[x].repeat" />
      <short value="Recurrence for routine recall or targeted follow-up" />
      <definition value="For a regular DigiDOT recall or targeted follow-up, record the first intended due date in boundsPeriod.start and the interval in period and periodUnit. DigiDOT omits frequency, which FHIR R4 interprets as one occurrence per period. Count-based and multiple-occurrence schedules are outside this draft." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.repeat.bounds[x]">
      <path value="ServiceRequest.occurrence[x].repeat.bounds[x]" />
      <slicing>
        <discriminator>
          <type value="type" />
          <path value="$this" />
        </discriminator>
        <rules value="closed" />
      </slicing>
      <short value="Limits of the schedule" />
      <definition value="Overall bounds of the schedule, expressed as a duration, duration range or period. For a regular DigiDOT recall or follow-up interval, use boundsPeriod with an explicit first due date." />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Duration" />
      </type>
      <type>
        <code value="Range" />
      </type>
      <type>
        <code value="Period" />
      </type>
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.repeat.bounds[x]:boundsDuration">
      <path value="ServiceRequest.occurrence[x].repeat.bounds[x]" />
      <sliceName value="boundsDuration" />
      <short value="Total schedule duration" />
      <definition value="Total duration over which the requested service is to occur; this is not the interval between occurrences." />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Duration" />
      </type>
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.repeat.bounds[x]:boundsRange">
      <path value="ServiceRequest.occurrence[x].repeat.bounds[x]" />
      <sliceName value="boundsRange" />
      <short value="Range of total schedule duration" />
      <definition value="Range of durations over which the requested service is to occur; this is not the interval between occurrences." />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Range" />
      </type>
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.repeat.bounds[x]:boundsPeriod">
      <path value="ServiceRequest.occurrence[x].repeat.bounds[x]" />
      <sliceName value="boundsPeriod" />
      <short value="Schedule start and optional end" />
      <definition value="The outer time limits of the schedule. For a regular DigiDOT interval, record the first intended due date in start. Include end when an end date is specified." />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Period" />
      </type>
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.repeat.bounds[x]:boundsPeriod.start">
      <path value="ServiceRequest.occurrence[x].repeat.bounds[x].start" />
      <short value="First due date for a regular recall or follow-up interval" />
      <definition value="The start of the schedule bounds. In the regular DigiDOT interval pattern, this is the explicitly recorded first intended due date. It is not inferred from authoredOn or a previous procedure date. Other Timing patterns retain the base Period.start meaning." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.repeat.bounds[x]:boundsPeriod.end">
      <path value="ServiceRequest.occurrence[x].repeat.bounds[x].end" />
      <short value="End of the schedule, when specified" />
      <definition value="The end of the schedule bounds. Include it when the recurring course has a specified end date; it is not the end time of an individual appointment." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.repeat.count">
      <path value="ServiceRequest.occurrence[x].repeat.count" />
      <short value="Not used for DigiDOT ServiceRequest timing" />
      <definition value="A finite number of scheduled occurrences is not represented by count in this draft. Use boundsPeriod.end when a schedule end is known." />
      <min value="0" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.repeat.countMax">
      <path value="ServiceRequest.occurrence[x].repeat.countMax" />
      <short value="Count range not used" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.repeat.frequency">
      <path value="ServiceRequest.occurrence[x].repeat.frequency" />
      <short value="Omitted: one occurrence per interval" />
      <definition value="FHIR R4 interprets an omitted frequency as one occurrence per period. The DigiDOT regular recall pattern uses period and periodUnit only." />
      <min value="0" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.repeat.frequencyMax">
      <path value="ServiceRequest.occurrence[x].repeat.frequencyMax" />
      <short value="Frequency range not used" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.repeat.period">
      <path value="ServiceRequest.occurrence[x].repeat.period" />
      <short value="Interval length" />
      <definition value="Length of one interval in periodUnit. With frequency omitted, FHIR R4 interprets the schedule as one occurrence per period. For example, period 12 with periodUnit mo represents one recall every twelve months; this is an example, not a default." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.repeat.periodUnit">
      <path value="ServiceRequest.occurrence[x].repeat.periodUnit" />
      <short value="Interval unit, such as mo for months" />
      <definition value="The unit of period, using the inherited R4 UnitsOfTime binding. Use mo for calendar months in the annual recall and quarterly follow-up examples." />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.occurrence[x]:occurrenceTiming.code">
      <path value="ServiceRequest.occurrence[x].code" />
      <short value="Timing shorthand not used; use repeat fields" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.asNeeded[x]">
      <path value="ServiceRequest.asNeeded[x]" />
      <short value="Not used in the current DigiDOT ServiceRequest draft" />
      <definition value="No agreed dental as-needed planning model or terminology is defined. Use occurrence[x], linked clinical reason and ServiceRequest.status for the current request workflow." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.authoredOn">
      <path value="ServiceRequest.authoredOn" />
      <short value="Date or time when the request was authored" />
      <definition value="When the request became actionable (for example when an order was authorised). Preserve the source meaning and precision. Draft creation, later editing, import, booked time and digital attestation are separate facts; do not substitute their timestamps automatically." />
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.requester">
      <path value="ServiceRequest.requester" />
      <short value="Person or organisation that requested the dental service" />
      <definition value="The person or organisation that initiated the request and has responsibility for its activation." />
      <comment value="Use a literal Reference.reference to a separately stored resource conforming to the permitted national target profile. Identifier-only and contained references are not permitted. Official identifiers belong on the target resource. Reuse a confirmed resource in central storage; if no matching resource exists, register it before persisting the clinical reference. The receiving service must check target existence and profile conformance; the profile alone does not perform identity matching or prove that a resource exists in central storage." />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-Practitioner" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-PractitionerRole" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-Organization" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-Patient" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-RelatedPerson" />
      </type>
      <constraint>
        <key value="servicerequest-requester-literal" />
        <severity value="error" />
        <human value="A shared-resource reference must contain a literal reference value; identifiers and contained references are not permitted." />
        <expression value="($this is Reference) implies (reference.hasValue() and identifier.empty() and reference.startsWith('#').not())" />
        <source value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.requester.reference">
      <path value="ServiceRequest.requester.reference" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.requester.identifier">
      <path value="ServiceRequest.requester.identifier" />
      <min value="0" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.performerType">
      <path value="ServiceRequest.performerType" />
      <short value="Not used in the current DigiDOT ServiceRequest draft" />
      <definition value="The current draft has no governed performer-type terminology. Use a constrained performer reference when a preferred individual, role, organisation or healthcare service is known." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.performer">
      <path value="ServiceRequest.performer" />
      <short value="Preferred performer or service for the planned dental work" />
      <definition value="The desired performer for doing the requested service.  For example, the surgeon, dermatopathologist, endoscopist, etc." />
      <comment value="Use a literal Reference.reference to a separately stored resource conforming to the permitted national target profile. Identifier-only and contained references are not permitted. Official identifiers belong on the target resource. Reuse a confirmed resource in central storage; if no matching resource exists, register it before persisting the clinical reference. The receiving service must check target existence and profile conformance; the profile alone does not perform identity matching or prove that a resource exists in central storage." />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-Practitioner" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-PractitionerRole" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-Organization" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-HealthcareService" />
      </type>
      <constraint>
        <key value="servicerequest-performer-literal" />
        <severity value="error" />
        <human value="A shared-resource reference must contain a literal reference value; identifiers and contained references are not permitted." />
        <expression value="($this is Reference) implies (reference.hasValue() and identifier.empty() and reference.startsWith('#').not())" />
        <source value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.performer.reference">
      <path value="ServiceRequest.performer.reference" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.performer.identifier">
      <path value="ServiceRequest.performer.identifier" />
      <min value="0" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.locationCode">
      <path value="ServiceRequest.locationCode" />
      <short value="Not used in the current DigiDOT ServiceRequest draft" />
      <definition value="No governed DigiDOT location-code terminology is agreed. Use locationReference to the agreed no-basis Location when a requested place is known." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.locationReference">
      <path value="ServiceRequest.locationReference" />
      <short value="Requested location for the dental service" />
      <definition value="Use locationReference when the request identifies a clinic, room or other Location where the service is expected to occur. Do not use it as a replacement for the actual Procedure.location or Encounter.location." />
      <comment value="Use a literal Reference.reference to a separately stored resource conforming to the permitted national target profile. Identifier-only and contained references are not permitted. Official identifiers belong on the target resource. Reuse a confirmed resource in central storage; if no matching resource exists, register it before persisting the clinical reference. The receiving service must check target existence and profile conformance; the profile alone does not perform identity matching or prove that a resource exists in central storage." />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-Location" />
      </type>
      <constraint>
        <key value="servicerequest-locationreference-literal" />
        <severity value="error" />
        <human value="A shared-resource reference must contain a literal reference value; identifiers and contained references are not permitted." />
        <expression value="($this is Reference) implies (reference.hasValue() and identifier.empty() and reference.startsWith('#').not())" />
        <source value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.locationReference.reference">
      <path value="ServiceRequest.locationReference.reference" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.locationReference.identifier">
      <path value="ServiceRequest.locationReference.identifier" />
      <min value="0" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.reasonCode">
      <path value="ServiceRequest.reasonCode" />
      <short value="Precoordinated clinical reason for the planned service" />
      <definition value="Use when the indication is recorded as a coded reason without a separately maintained Condition or Observation. Each reason uses one precoordinated SNOMED CT concept from Clinical finding or Finding with explicit context (situation). Select a concept whose context truly describes the reason; a negated, uncertain, family-history or future situation must not be treated as a present finding. Use reasonReference when the relevant Condition or Observation is separately stored. A routine recall need not invent a reason." />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://novari.no/fhir/digidot/ValueSet/digidot-service-request-reasons" />
      </binding>
    </element>
    <element id="ServiceRequest.reasonCode.coding">
      <path value="ServiceRequest.reasonCode.coding" />
      <short value="One precoordinated SNOMED CT reason code" />
      <min value="1" />
      <max value="1" />
      <type>
        <code value="Coding" />
        <profile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-Coding-SCTpre-no" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.reasonReference">
      <path value="ServiceRequest.reasonReference" />
      <short value="Clinical finding or observation that justifies the request" />
      <definition value="Reference an existing DigiDOT Condition or Observation that justifies the planned service. Use reasonCode for a precoordinated reason when no separate finding record is needed. A routine recall may have neither; do not create a Condition merely to populate this reference." />
      <comment value="Use a literal reference to a separately stored resource conforming to a permitted target profile. Identifier-only and contained references are not permitted. The receiving service must check target existence and profile conformance." />
      <type>
        <code value="Reference" />
        <targetProfile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-Condition-no" />
        <targetProfile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-Observation-no" />
      </type>
      <constraint>
        <key value="servicerequest-reasonreference-literal" />
        <severity value="error" />
        <human value="A shared-resource reference must contain a literal reference value; identifiers and contained references are not permitted." />
        <expression value="($this is Reference) implies (reference.hasValue() and identifier.empty() and reference.startsWith('#').not())" />
        <source value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.reasonReference.reference">
      <path value="ServiceRequest.reasonReference.reference" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.reasonReference.identifier">
      <path value="ServiceRequest.reasonReference.identifier" />
      <min value="0" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.insurance">
      <path value="ServiceRequest.insurance" />
      <short value="Not used in the current DigiDOT ServiceRequest draft" />
      <definition value="Coverage, payment route, reimbursement and claim information belong in the financial model, not in the clinical planning request." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.supportingInfo">
      <path value="ServiceRequest.supportingInfo" />
      <short value="Selected context that directly affects the planned dental service" />
      <definition value="Selected clinical or source care-responsibility context that directly affects this request. EpisodeOfCare is optional: include it when the request arises within a represented organisational responsibility, not merely to connect the request to an appointment or encounter. For referrals, the source episode belongs to the sender; a receiving episode references the incoming request using referralRequest. For follow-up after a dental procedure, include the preceding DigiDOT Procedure as relevant clinical context, with type Procedure and a literal reference. This is not a basedOn or reasonReference link. New follow-up procedures may reference this ServiceRequest through Procedure.basedOn. Supporting records are limited to the listed DigiDOT profiles and no-basis DocumentReference. Use DigiDOT Dental Contact Note for a supporting contact note and DigiDOT MedicationStatement for reported medication use within that profile's scope. SFM/PLL imports are not represented by that MedicationStatement profile." />
      <comment value="Use a literal reference to a separately stored resource conforming to a permitted target profile. Identifier-only and contained references are not permitted. The receiving service must check target existence and profile conformance. Conformance to the permitted target profile is required; the resource type or a meta.profile declaration alone is insufficient. Generic R4 targets and the former SFM List and MedicationStatement targets are outside this reference contract. Additional target profiles require an agreed use case and profile revision." />
      <min value="0" />
      <max value="*" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-EpisodeOfCare-no" />
        <targetProfile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-AllergyIntolerance-no" />
        <targetProfile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-Condition-no" />
        <targetProfile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-Observation-no" />
        <targetProfile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-Procedure-no" />
        <targetProfile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-MedicationStatement-no" />
        <targetProfile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-DentalContactNote-no" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-DocumentReference" />
      </type>
      <constraint>
        <key value="servicerequest-supportinginfo-literal" />
        <severity value="error" />
        <human value="A shared-resource reference must contain a literal reference value; identifiers and contained references are not permitted." />
        <expression value="($this is Reference) implies (reference.hasValue() and identifier.empty() and reference.startsWith('#').not())" />
        <source value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.supportingInfo.reference">
      <path value="ServiceRequest.supportingInfo.reference" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.supportingInfo.type">
      <path value="ServiceRequest.supportingInfo.type" />
      <definition value="Explicit FHIR resource type, agreeing with the referenced resource. This makes optional EpisodeOfCare context distinguishable and searchable without confusing it with other clinical context." />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.supportingInfo.identifier">
      <path value="ServiceRequest.supportingInfo.identifier" />
      <min value="0" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.specimen">
      <path value="ServiceRequest.specimen" />
      <short value="Not used in the current DigiDOT ServiceRequest draft" />
      <definition value="No specimen workflow, terminology or EHR mapping is agreed for the current public dental-service scope." />
      <max value="0" />
    </element>
    <element id="ServiceRequest.bodySite">
      <path value="ServiceRequest.bodySite" />
      <short value="Inline Xt-EHR anatomy group" />
      <definition value="One inline anatomical group in the shared DentalBodySite format: a complex extension containing location, repeated locationQualifier, laterality, morphology and description, matching the Xt-EHR logical field model. No independent BodyStructure resource is required. Clinical coding and dental workflow rules apply separately." />
      <comment value="The shared Dental BodySite datatype uses one complex DigiDOT R4 body-structure extension containing the anatomical fields. The containing CodeableConcept has no root coding or text. Shared terminology tooling checks that this structured anatomy and SCTextended describe the same complete anatomical scope. See DentalBodySite-use for the supplier contract." />
      <min value="0" />
      <max value="*" />
      <type>
        <code value="CodeableConcept" />
        <profile value="https://novari.no/fhir/digidot/StructureDefinition/digidot-DentalBodySite-no" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="ServiceRequest.note">
      <path value="ServiceRequest.note" />
      <short value="Additional planning narrative" />
      <definition value="Use note for clinically relevant planning narrative that cannot be represented in structured elements. Do not duplicate the planned-service code, category, request status, due time, anatomy or linked resources in free text." />
    </element>
    <element id="ServiceRequest.note.author[x]">
      <path value="ServiceRequest.note.author[x]" />
      <definition value="The individual responsible for making the annotation." />
      <comment value="Use a literal Reference.reference to a separately stored resource conforming to the permitted national target profile. Identifier-only and contained references are not permitted. Official identifiers belong on the target resource. Reuse a confirmed resource in central storage; if no matching resource exists, register it before persisting the clinical reference. The receiving service must check target existence and profile conformance; the profile alone does not perform identity matching or prove that a resource exists in central storage. An authorString may be retained where this Annotation choice permits it; if authorReference is used, the literal-reference rule applies." />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-Practitioner" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-Patient" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-RelatedPerson" />
        <targetProfile value="http://hl7.no/fhir/StructureDefinition/no-basis-Organization" />
      </type>
      <type>
        <code value="string" />
      </type>
      <constraint>
        <key value="servicerequest-note-author-x-literal" />
        <severity value="error" />
        <human value="A shared-resource reference must contain a literal reference value; identifiers and contained references are not permitted." />
        <expression value="($this is Reference) implies (reference.hasValue() and identifier.empty() and reference.startsWith('#').not())" />
        <source value="https://novari.no/fhir/digidot/StructureDefinition/digidot-ServiceRequest-no" />
      </constraint>
    </element>
    <element id="ServiceRequest.patientInstruction">
      <path value="ServiceRequest.patientInstruction" />
      <short value="Patient-facing instruction for the planned service" />
      <definition value="Use patientInstruction only for patient-facing information that directly concerns this planned service. It does not replace the clinical plan, Appointment communication or general patient information." />
    </element>
    <element id="ServiceRequest.relevantHistory">
      <path value="ServiceRequest.relevantHistory" />
      <short value="Not used in the current DigiDOT ServiceRequest draft" />
      <definition value="No ServiceRequest-specific Provenance linking policy is agreed. Source, import and update responsibility are handled by the Central Storage provenance and integration design." />
      <max value="0" />
    </element>
  </differential>
</StructureDefinition>