<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="profile-appointment" />
  <url value="https://fhir.synapxe.sg/StructureDefinition/profile-appointment" />
  <name value="Appointment" />
  <title value="Appointment Profile" />
  <status value="active" />
  <publisher value="Synapxe" />
  <description value="This resource will be used to store a booking of a healthcare event among patient(s), practitioner(s), related person(s) and/or device(s) for a specific date/time." />
  <fhirVersion value="5.0.0" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="Appointment" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Appointment" />
  <derivation value="constraint" />
  <differential>
    <element id="Appointment.extension:workflowStatusReason">
      <path value="Appointment.extension" />
      <sliceName value="workflowStatusReason" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="http://hl7.org/fhir/StructureDefinition/workflow-statusReason" />
      </type>
    </element>
    <element id="Appointment.identifier">
      <path value="Appointment.identifier" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="system" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <min value="1" />
      <type>
        <code value="Identifier" />
        <profile value="https://fhir.synapxe.sg/StructureDefinition/profile-identifier" />
      </type>
    </element>
    <element id="Appointment.identifier:recordIdentifier">
      <path value="Appointment.identifier" />
      <sliceName value="recordIdentifier" />
      <min value="1" />
      <max value="1" />
      <type>
        <code value="Identifier" />
        <profile value="https://fhir.synapxe.sg/StructureDefinition/profile-identifier-record-id" />
      </type>
    </element>
    <element id="Appointment.identifier:appointmentIdentifier">
      <path value="Appointment.identifier" />
      <sliceName value="appointmentIdentifier" />
      <min value="1" />
      <max value="1" />
      <type>
        <code value="Identifier" />
        <profile value="https://fhir.synapxe.sg/StructureDefinition/profile-identifier-appointment-id" />
      </type>
    </element>
    <element id="Appointment.identifier:groupNo">
      <path value="Appointment.identifier" />
      <sliceName value="groupNo" />
      <max value="1" />
      <type>
        <code value="Identifier" />
        <profile value="https://fhir.synapxe.sg/StructureDefinition/profile-identifier-group-no" />
      </type>
    </element>
    <element id="Appointment.identifier:institution">
      <path value="Appointment.identifier" />
      <sliceName value="institution" />
      <max value="1" />
      <type>
        <code value="Identifier" />
        <profile value="https://fhir.synapxe.sg/StructureDefinition/profile-identifier-hci-code" />
      </type>
    </element>
    <element id="Appointment.identifier:groupSequenceNo">
      <path value="Appointment.identifier" />
      <sliceName value="groupSequenceNo" />
      <max value="1" />
      <type>
        <code value="Identifier" />
        <profile value="https://fhir.synapxe.sg/StructureDefinition/profile-identifier-group-sequence-no" />
      </type>
    </element>
    <element id="Appointment.status">
      <path value="Appointment.status" />
      <example>
        <label value="Booked" />
        <valueCode value="booked" />
      </example>
    </element>
    <element id="Appointment.cancellationReason">
      <path value="Appointment.cancellationReason" />
      <type>
        <code value="CodeableConcept" />
        <profile value="https://fhir.synapxe.sg/StructureDefinition/profile-codeableconcept" />
      </type>
      <binding>
        <strength value="required" />
        <valueSet value="https://fhir.synapxe.sg/ValueSet/reasonforcancellation" />
      </binding>
    </element>
    <element id="Appointment.cancellationReason.extension">
      <path value="Appointment.cancellationReason.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.cancellationReason.coding.code">
      <path value="Appointment.cancellationReason.coding.code" />
      <example>
        <label value="Patient Initiated" />
        <valueCode value="PATI" />
      </example>
    </element>
    <element id="Appointment.class">
      <path value="Appointment.class" />
      <short value="inpatient | outpatient" />
      <max value="0" />
    </element>
    <element id="Appointment.class.id">
      <path value="Appointment.class.id" />
      <max value="0" />
    </element>
    <element id="Appointment.class.extension">
      <path value="Appointment.class.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.class.coding">
      <path value="Appointment.class.coding" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Appointment.class.coding.id">
      <path value="Appointment.class.coding.id" />
      <max value="0" />
    </element>
    <element id="Appointment.class.coding.extension">
      <path value="Appointment.class.coding.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.class.coding.system">
      <path value="Appointment.class.coding.system" />
      <min value="1" />
    </element>
    <element id="Appointment.class.coding.version">
      <path value="Appointment.class.coding.version" />
      <max value="0" />
    </element>
    <element id="Appointment.class.coding.code">
      <path value="Appointment.class.coding.code" />
      <min value="1" />
    </element>
    <element id="Appointment.class.coding.display">
      <path value="Appointment.class.coding.display" />
      <min value="1" />
    </element>
    <element id="Appointment.class.coding.userSelected">
      <path value="Appointment.class.coding.userSelected" />
      <max value="0" />
    </element>
    <element id="Appointment.class.text">
      <path value="Appointment.class.text" />
      <max value="0" />
    </element>
    <element id="Appointment.serviceCategory">
      <path value="Appointment.serviceCategory" />
      <short value="Patient type code" />
      <definition value="Patient type code: Inpatient or Outpatient" />
      <max value="1" />
      <binding>
        <strength value="preferred" />
        <valueSet value="https://fhir.synapxe.sg/ValueSet/patient-type" />
      </binding>
    </element>
    <element id="Appointment.serviceCategory.extension">
      <path value="Appointment.serviceCategory.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.serviceCategory.coding.code">
      <path value="Appointment.serviceCategory.coding.code" />
      <example>
        <label value="Inpatient" />
        <valueCode value="I" />
      </example>
      <example>
        <label value="Outpatient" />
        <valueCode value="O" />
      </example>
    </element>
    <element id="Appointment.serviceType">
      <path value="Appointment.serviceType" />
      <short value="Appointment type code" />
      <definition value="Appointment type code: Consultation, Nursing" />
      <max value="1" />
    </element>
    <element id="Appointment.serviceType.id">
      <path value="Appointment.serviceType.id" />
      <max value="0" />
    </element>
    <element id="Appointment.serviceType.extension">
      <path value="Appointment.serviceType.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.serviceType.concept">
      <path value="Appointment.serviceType.concept" />
      <min value="1" />
      <type>
        <code value="CodeableConcept" />
        <profile value="https://fhir.synapxe.sg/StructureDefinition/profile-codeableconcept" />
      </type>
      <binding>
        <strength value="required" />
        <valueSet value="https://fhir.synapxe.sg/ValueSet/appointment-type" />
      </binding>
    </element>
    <element id="Appointment.serviceType.concept.extension">
      <path value="Appointment.serviceType.concept.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.serviceType.concept.coding.code">
      <path value="Appointment.serviceType.concept.coding.code" />
      <example>
        <label value="Consultation, Nursing" />
        <valueCode value="CON" />
      </example>
    </element>
    <element id="Appointment.serviceType.reference">
      <path value="Appointment.serviceType.reference" />
      <max value="0" />
    </element>
    <element id="Appointment.specialty">
      <path value="Appointment.specialty" />
      <binding>
        <strength value="preferred" />
        <description value="Appointment specialty." />
        <valueSet value="https://fhir.synapxe.sg/ValueSet/appointment-speciality" />
      </binding>
    </element>
    <element id="Appointment.specialty.extension">
      <path value="Appointment.specialty.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.specialty.coding.code">
      <path value="Appointment.specialty.coding.code" />
      <example>
        <label value="Pediatric Genetics" />
        <valueCode value="PGN" />
      </example>
    </element>
    <element id="Appointment.appointmentType">
      <path value="Appointment.appointmentType" />
      <short value="The movement type associated with the appointment can be represented as an admission or visit type" />
      <definition value="The movement type associated with the appointment can be represented as an admission or visit type" />
      <binding>
        <strength value="preferred" />
        <valueSet value="https://fhir.synapxe.sg/ValueSet/movement-type" />
      </binding>
    </element>
    <element id="Appointment.appointmentType.extension">
      <path value="Appointment.appointmentType.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.reason">
      <path value="Appointment.reason" />
      <min value="1" />
      <type>
        <code value="CodeableReference" />
        <targetProfile value="https://fhir.synapxe.sg/StructureDefinition/profile-condition" />
        <targetProfile value="https://fhir.synapxe.sg/StructureDefinition/profile-procedure" />
        <targetProfile value="https://fhir.synapxe.sg/StructureDefinition/profile-encounter" />
      </type>
    </element>
    <element id="Appointment.reason.id">
      <path value="Appointment.reason.id" />
      <max value="0" />
    </element>
    <element id="Appointment.reason.extension">
      <path value="Appointment.reason.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.reason.concept">
      <path value="Appointment.reason.concept" />
      <binding>
        <strength value="preferred" />
        <valueSet value="https://fhir.synapxe.sg/ValueSet/reason-for-appointment" />
      </binding>
    </element>
    <element id="Appointment.reason.concept.extension">
      <path value="Appointment.reason.concept.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.reason.concept.coding.code">
      <path value="Appointment.reason.concept.coding.code" />
      <example>
        <label value="A&amp;E" />
        <valueCode value="1" />
      </example>
    </element>
    <element id="Appointment.priority">
      <path value="Appointment.priority" />
      <max value="0" />
    </element>
    <element id="Appointment.description">
      <path value="Appointment.description" />
      <max value="0" />
    </element>
    <element id="Appointment.replaces">
      <path value="Appointment.replaces" />
      <max value="0" />
    </element>
    <element id="Appointment.virtualService">
      <path value="Appointment.virtualService" />
      <max value="0" />
    </element>
    <element id="Appointment.supportingInformation">
      <path value="Appointment.supportingInformation" />
      <max value="0" />
      <type>
        <code value="Reference" />
        <aggregation value="contained" />
      </type>
    </element>
    <element id="Appointment.supportingInformation.id">
      <path value="Appointment.supportingInformation.id" />
      <max value="0" />
    </element>
    <element id="Appointment.supportingInformation.extension">
      <path value="Appointment.supportingInformation.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.previousAppointment">
      <path value="Appointment.previousAppointment" />
      <max value="0" />
    </element>
    <element id="Appointment.originatingAppointment">
      <path value="Appointment.originatingAppointment" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://fhir.synapxe.sg/StructureDefinition/profile-appointment" />
      </type>
    </element>
    <element id="Appointment.originatingAppointment.id">
      <path value="Appointment.originatingAppointment.id" />
      <max value="0" />
    </element>
    <element id="Appointment.originatingAppointment.extension">
      <path value="Appointment.originatingAppointment.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.originatingAppointment.identifier">
      <path value="Appointment.originatingAppointment.identifier" />
      <type>
        <code value="Identifier" />
        <profile value="https://fhir.synapxe.sg/StructureDefinition/profile-identifier-appointment-id" />
      </type>
    </element>
    <element id="Appointment.requestedPeriod">
      <path value="Appointment.requestedPeriod" />
      <max value="1" />
    </element>
    <element id="Appointment.slot">
      <path value="Appointment.slot" />
      <max value="0" />
    </element>
    <element id="Appointment.account">
      <path value="Appointment.account" />
      <max value="0" />
    </element>
    <element id="Appointment.created">
      <path value="Appointment.created" />
      <max value="0" />
    </element>
    <element id="Appointment.cancellationDate">
      <path value="Appointment.cancellationDate" />
      <max value="0" />
    </element>
    <element id="Appointment.note">
      <path value="Appointment.note" />
      <max value="1" />
    </element>
    <element id="Appointment.note.id">
      <path value="Appointment.note.id" />
      <max value="0" />
    </element>
    <element id="Appointment.note.extension">
      <path value="Appointment.note.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.note.author[x]">
      <path value="Appointment.note.author[x]" />
      <max value="0" />
    </element>
    <element id="Appointment.note.time">
      <path value="Appointment.note.time" />
      <max value="0" />
    </element>
    <element id="Appointment.patientInstruction">
      <path value="Appointment.patientInstruction" />
      <max value="0" />
    </element>
    <element id="Appointment.basedOn">
      <path value="Appointment.basedOn" />
      <short value="The referral information of this appointment" />
      <definition value="The referral information of this appointment" />
      <max value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://fhir.synapxe.sg/StructureDefinition/profile-referral" />
        <aggregation value="contained" />
      </type>
    </element>
    <element id="Appointment.basedOn.id">
      <path value="Appointment.basedOn.id" />
      <max value="0" />
    </element>
    <element id="Appointment.basedOn.extension">
      <path value="Appointment.basedOn.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.basedOn.identifier">
      <path value="Appointment.basedOn.identifier" />
      <type>
        <code value="Identifier" />
        <profile value="https://fhir.synapxe.sg/StructureDefinition/profile-identifier" />
      </type>
    </element>
    <element id="Appointment.subject">
      <path value="Appointment.subject" />
      <min value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://fhir.synapxe.sg/StructureDefinition/profile-patient" />
      </type>
    </element>
    <element id="Appointment.subject.id">
      <path value="Appointment.subject.id" />
      <max value="0" />
    </element>
    <element id="Appointment.subject.extension">
      <path value="Appointment.subject.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.subject.identifier">
      <path value="Appointment.subject.identifier" />
      <type>
        <code value="Identifier" />
        <profile value="https://fhir.synapxe.sg/StructureDefinition/profile-identifier" />
      </type>
    </element>
    <element id="Appointment.participant.id">
      <path value="Appointment.participant.id" />
      <max value="0" />
    </element>
    <element id="Appointment.participant.extension">
      <path value="Appointment.participant.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.participant.modifierExtension">
      <path value="Appointment.participant.modifierExtension" />
      <max value="0" />
    </element>
    <element id="Appointment.participant.type">
      <path value="Appointment.participant.type" />
      <min value="1" />
      <binding>
        <strength value="required" />
        <valueSet value="https://fhir.synapxe.sg/ValueSet/appointment-participant-type" />
      </binding>
    </element>
    <element id="Appointment.participant.type.extension">
      <path value="Appointment.participant.type.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.participant.type.coding.code">
      <path value="Appointment.participant.type.coding.code" />
      <example>
        <label value="Attending clinician" />
        <valueCode value="ATND" />
      </example>
    </element>
    <element id="Appointment.participant.period">
      <path value="Appointment.participant.period" />
      <max value="0" />
    </element>
    <element id="Appointment.participant.actor">
      <path value="Appointment.participant.actor" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://fhir.synapxe.sg/StructureDefinition/profile-practitioner" />
        <targetProfile value="https://fhir.synapxe.sg/StructureDefinition/profile-organization" />
        <targetProfile value="https://fhir.synapxe.sg/StructureDefinition/profile-location" />
        <aggregation value="contained" />
      </type>
    </element>
    <element id="Appointment.participant.actor.id">
      <path value="Appointment.participant.actor.id" />
      <max value="0" />
    </element>
    <element id="Appointment.participant.actor.extension">
      <path value="Appointment.participant.actor.extension" />
      <max value="0" />
    </element>
    <element id="Appointment.participant.actor.identifier">
      <path value="Appointment.participant.actor.identifier" />
      <type>
        <code value="Identifier" />
        <profile value="https://fhir.synapxe.sg/StructureDefinition/profile-identifier" />
      </type>
    </element>
    <element id="Appointment.participant.required">
      <path value="Appointment.participant.required" />
      <max value="0" />
    </element>
    <element id="Appointment.recurrenceId">
      <path value="Appointment.recurrenceId" />
      <max value="0" />
    </element>
    <element id="Appointment.occurrenceChanged">
      <path value="Appointment.occurrenceChanged" />
      <max value="0" />
    </element>
    <element id="Appointment.recurrenceTemplate">
      <path value="Appointment.recurrenceTemplate" />
      <max value="0" />
    </element>
  </differential>
</StructureDefinition>