<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="SenaiteServiceRequest" />
  <url value="https://senaite.com/modeling/fhir/StructureDefinition/SenaiteServiceRequest" />
  <name value="SenaiteServiceRequest" />
  <status value="draft" />
  <description value="This will be an incoming lab request. It relies on references to:&#xD;&#xA;- Specimen: to handle the related specimen details.&#xD;&#xA;- Subject: The patient&#xD;&#xA;- Encounter: Determining where and when the request originated.&#xD;&#xA;- Requester: The practitioner who made the request." />
  <fhirVersion value="4.3.0" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="ServiceRequest" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/ServiceRequest" />
  <derivation value="constraint" />
  <differential>
    <element id="ServiceRequest.extension">
      <path value="ServiceRequest.extension" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.modifierExtension">
      <path value="ServiceRequest.modifierExtension" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.identifier">
      <path value="ServiceRequest.identifier" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.instantiatesCanonical">
      <path value="ServiceRequest.instantiatesCanonical" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.instantiatesUri">
      <path value="ServiceRequest.instantiatesUri" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.basedOn">
      <path value="ServiceRequest.basedOn" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.replaces">
      <path value="ServiceRequest.replaces" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.requisition">
      <path value="ServiceRequest.requisition" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.status">
      <path value="ServiceRequest.status" />
      <short value="draft | active | on-hold | revoked | entered-in-error" />
    </element>
    <element id="ServiceRequest.intent">
      <path value="ServiceRequest.intent" />
      <short value="order | reflex-order" />
      <fixedCode value="order" />
    </element>
    <element id="ServiceRequest.category">
      <path value="ServiceRequest.category" />
      <definition value="This will always be a Laboratory procedure" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.category.coding.system">
      <path value="ServiceRequest.category.coding.system" />
      <definition value="Always using SNOMED" />
      <fixedUri value="http://snomed.info/sct" />
    </element>
    <element id="ServiceRequest.category.coding.version">
      <path value="ServiceRequest.category.coding.version" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.category.coding.code">
      <path value="ServiceRequest.category.coding.code" />
      <fixedCode value="108252007" />
    </element>
    <element id="ServiceRequest.category.coding.display">
      <path value="ServiceRequest.category.coding.display" />
      <fixedString value="Laboratory procedure" />
    </element>
    <element id="ServiceRequest.category.coding.userSelected">
      <path value="ServiceRequest.category.coding.userSelected" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.category.text">
      <path value="ServiceRequest.category.text" />
      <fixedString value="Laboratory procedure" />
    </element>
    <element id="ServiceRequest.doNotPerform">
      <path value="ServiceRequest.doNotPerform" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.code">
      <path value="ServiceRequest.code" />
      <min value="1" />
      <binding>
        <strength value="preferred" />
        <description value="For laboratory codes" />
        <valueSet value="http://loinc.org" />
      </binding>
    </element>
    <element id="ServiceRequest.code.extension">
      <path value="ServiceRequest.code.extension" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.code.coding.system">
      <path value="ServiceRequest.code.coding.system" />
      <definition value="Prefer LOINC http://loinc.org and without this it will default to LOINC" />
    </element>
    <element id="ServiceRequest.code.coding.code">
      <path value="ServiceRequest.code.coding.code" />
      <min value="1" />
      <binding>
        <strength value="preferred" />
        <valueSet value="http://loinc.org" />
      </binding>
    </element>
    <element id="ServiceRequest.orderDetail">
      <path value="ServiceRequest.orderDetail" />
      <definition value="This is where we handle the individual test codes for the test comprised from the profile as defined in the code." />
    </element>
    <element id="ServiceRequest.orderDetail.extension">
      <path value="ServiceRequest.orderDetail.extension" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.orderDetail.coding">
      <path value="ServiceRequest.orderDetail.coding" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.orderDetail.coding.system">
      <path value="ServiceRequest.orderDetail.coding.system" />
      <binding>
        <strength value="preferred" />
        <valueSet value="http://loinc.org" />
      </binding>
    </element>
    <element id="ServiceRequest.orderDetail.coding.code">
      <path value="ServiceRequest.orderDetail.coding.code" />
      <min value="1" />
    </element>
    <element id="ServiceRequest.quantity[x]">
      <path value="ServiceRequest.quantity[x]" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.subject.reference">
      <path value="ServiceRequest.subject.reference" />
      <constraint>
        <key value="subject-identified" />
        <severity value="error" />
        <human value="If there is no identifier then it must have a key" />
        <expression value="hasValue() or subject.identifier.count()" />
      </constraint>
    </element>
    <element id="ServiceRequest.encounter.reference">
      <path value="ServiceRequest.encounter.reference" />
      <min value="1" />
    </element>
    <element id="ServiceRequest.encounter.type">
      <path value="ServiceRequest.encounter.type" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.encounter.identifier">
      <path value="ServiceRequest.encounter.identifier" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.encounter.display">
      <path value="ServiceRequest.encounter.display" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.occurrence[x]">
      <path value="ServiceRequest.occurrence[x]" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.asNeeded[x]">
      <path value="ServiceRequest.asNeeded[x]" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.requester.extension">
      <path value="ServiceRequest.requester.extension" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.requester.reference">
      <path value="ServiceRequest.requester.reference" />
      <min value="1" />
    </element>
    <element id="ServiceRequest.requester.type">
      <path value="ServiceRequest.requester.type" />
      <min value="1" />
      <fixedUri value="Practitioner" />
    </element>
    <element id="ServiceRequest.requester.identifier">
      <path value="ServiceRequest.requester.identifier" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.requester.display">
      <path value="ServiceRequest.requester.display" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.performerType">
      <path value="ServiceRequest.performerType" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.performer">
      <path value="ServiceRequest.performer" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.locationCode">
      <path value="ServiceRequest.locationCode" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.locationReference">
      <path value="ServiceRequest.locationReference" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.reasonCode">
      <path value="ServiceRequest.reasonCode" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.reasonReference">
      <path value="ServiceRequest.reasonReference" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.insurance">
      <path value="ServiceRequest.insurance" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.supportingInfo">
      <path value="ServiceRequest.supportingInfo" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.specimen">
      <path value="ServiceRequest.specimen" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="ServiceRequest.specimen.reference">
      <path value="ServiceRequest.specimen.reference" />
      <min value="1" />
    </element>
    <element id="ServiceRequest.note.extension">
      <path value="ServiceRequest.note.extension" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.patientInstruction">
      <path value="ServiceRequest.patientInstruction" />
      <max value="0" />
    </element>
    <element id="ServiceRequest.relevantHistory">
      <path value="ServiceRequest.relevantHistory" />
      <max value="0" />
    </element>
  </differential>
</StructureDefinition>