<StructureDefinition xmlns="http://hl7.org/fhir">
  <url value="https://eng.org/fhir/StructureDefinition/MyServiceRequest" />
  <name value="MyServiceRequest" />
  <status value="draft" />
  <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>
    <!-- Slicing configurato -->
    <element id="ServiceRequest.identifier">
      <path value="ServiceRequest.identifier" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="type.coding.code" />
        </discriminator>
        <rules value="closed" />
      </slicing>
      <short value="Identificativi associati alla richiesta." />
      <definition value="Identificativi associati alla richiesta." />
      <comment value="L'elemento identifier.type è utilizzato per distinguere tra gli identificatori assegnati dall'ordinante (noto come 'Placer' in HL7 v2) e il produttore delle osservazioni in risposta all'ordine (noto come 'Filler' in HL7 v2)." />
    </element>
    <!-- Slice PLAC -->
    <element id="ServiceRequest.identifier:PLAC">
      <path value="ServiceRequest.identifier" />
      <sliceName value="PLAC" />
      <short value="Placer identifier." />
      <definition value="Identificativo staccato dal sistema che crea l'ordine." />
      <comment value="Il system deve seguire questa struttura: 'http://www.[nome prodotto o fornitore].it/identifiers/prestazione'." />
    </element>
    <element id="ServiceRequest.identifier:PLAC.type">
      <path value="ServiceRequest.identifier.type" />
      <short value="Descrizione dell'identificatore." />
      <definition value="Un tipo codificato per l'identificatore che può essere usato per determinare quale identificatore usare per uno scopo specifico." />
      <comment value="Questo elemento si occupa solo di categorie generali di identificatori. Non deve essere utilizzato per i codici che corrispondono a 1..1 con il sistema Identifier.system. Alcuni identificatori possono rientrare in più categorie a causa dell'uso comune. Quando il sistema è noto, un tipo non è necessario perché il tipo fa sempre parte della definizione del sistema. Tuttavia, spesso i sistemi devono gestire identificatori di cui non si conosce il sistema. Non esiste una relazione 1:1 tra tipo e sistema, poiché molti sistemi diversi hanno lo stesso tipo." />
    </element>
    <element id="ServiceRequest.identifier:PLAC.type.coding">
      <path value="ServiceRequest.identifier.type.coding" />
      <short value="Codice definito da un sistema terminologico." />
      <definition value="Un riferimento a un codice definito da un sistema terminologico." />
      <comment value="I codici possono essere definiti in modo molto casuale in enumerazioni o elenchi di codici, fino a definizioni molto formali come SNOMED CT - si vedano i Core Principles HL7 v3 per maggiori informazioni. L'ordine dei codici non è definito e non deve essere usato per dedurre il significato. In generale, al massimo uno solo dei valori di codifica sarà etichettato come UserSelected = true." />
    </element>
    <!-- Il punto chiave: patternCode + constraint -->
    <element id="ServiceRequest.identifier:PLAC.type.coding.code">
      <path value="ServiceRequest.identifier.type.coding.code" />
      <short value="Simbolo nella sintassi definita dal sistema." />
      <definition value="Un simbolo nella sintassi definita dal sistema. Il simbolo può essere un codice predefinito o un'espressione in una sintassi definita dal sistema di codifica (ad esempio, post-coordinazione)." />
      <comment value="Si noti che le stringhe FHIR non devono superare la dimensione di 1MB." />
      <patternCode value="PLAC" />
      <constraint>
        <key value="plac-case" />
        <severity value="error" />
        <human value="Il codice type.coding.code deve essere PLAC o plac." />
        <expression value="matches('^(PLAC|plac)$')" />
      </constraint>
    </element>
    <element id="ServiceRequest.identifier:PLAC.type.coding.display">
      <path value="ServiceRequest.identifier.type.coding.display" />
      <short value="Rappresentazione definita dal sistema." />
      <definition value="Una rappresentazione del significato del codice nel sistema, secondo le regole del sistema." />
      <comment value="Si noti che le stringhe FHIR non devono superare la dimensione di 1MB." />
      <fixedString value="Plac Identifier" />
    </element>
    <element id="ServiceRequest.identifier:PLAC.system">
      <path value="ServiceRequest.identifier.system" />
      <short value="Lo spazio dei nomi per il valore dell'identificatore." />
      <definition value="Stabilisce lo spazio dei nomi per il valore, ovvero un URL che descrive un insieme di valori unici." />
      <comment value="Il system deve seguire questa struttura: 'http://www.[nome prodotto o fornitore].it/identifiers/prestazione'." />
      <example>
        <label value="esempio di system" />
        <valueUri value="http://www.nomeProdottoOFornitore.it/identifiers/prestazione" />
      </example>
      <constraint>
        <key value="plac-system" />
        <severity value="error" />
        <human value="Il system deve seguire questa struttura: 'http://www.[nome prodotto o fornitore].it/identifiers/prestazione'." />
        <expression value="startsWith('http://www.') and endsWith('.it/identifiers/prestazione')" />
      </constraint>
    </element>
  </differential>
</StructureDefinition>