<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="pcm-data-access-authorization-contract" />
  <url value="http://pcm.fhir.health.gov.il/StructureDefinition/pcm-data-access-authorization-contract" />
  <version value="0.4.2" />
  <name value="PCMDataAccessAuthorizationContract" />
  <title value="PCM Data Access Authorization Contract" />
  <status value="active" />
  <description value="Abstract returned-resource shape for a specific data-access grant: one recipient, one workflow permission package, an effective period and an explicit source list. Recipient and permission meaning are fixed at creation; PCM may maintain source membership and cancel the grant. Concrete profiles define supported workflows, participating organizations and restrictions on additional R4 Contract content." />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="true" />
  <type value="Contract" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Contract" />
  <derivation value="constraint" />
  <differential>
    <element id="Contract">
      <path value="Contract" />
      <constraint>
        <key value="pcm-authorization-period" />
        <severity value="error" />
        <human value="If an authorization grant has an expiry, it SHALL end after it starts." />
        <expression value="applies.end.empty() or applies.start &lt; applies.end" />
        <source value="http://pcm.fhir.health.gov.il/StructureDefinition/pcm-data-access-authorization-contract" />
      </constraint>
      <constraint>
        <key value="pcm-authorization-terminated-period" />
        <severity value="error" />
        <human value="A terminated grant SHALL carry its expiry; historical records are not compared to the current time." />
        <expression value="status = 'terminated' implies applies.end.exists()" />
        <source value="http://pcm.fhir.health.gov.il/StructureDefinition/pcm-data-access-authorization-contract" />
      </constraint>
      <constraint>
        <key value="pcm-authorization-distinct-sources" />
        <severity value="error" />
        <human value="Each permitted Data Source SHALL occur only once in a Contract." />
        <expression value="term.asset.context.reference.reference.isDistinct()" />
        <source value="http://pcm.fhir.health.gov.il/StructureDefinition/pcm-data-access-authorization-contract" />
      </constraint>
    </element>
    <element id="Contract.id">
      <path value="Contract.id" />
      <min value="1" />
    </element>
    <element id="Contract.meta">
      <path value="Contract.meta" />
      <min value="1" />
    </element>
    <element id="Contract.meta.lastUpdated">
      <path value="Contract.meta.lastUpdated" />
      <min value="1" />
    </element>
    <element id="Contract.extension">
      <path value="Contract.extension" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="url" />
        </discriminator>
        <ordered value="false" />
        <rules value="open" />
      </slicing>
    </element>
    <element id="Contract.extension:exampleQuery">
      <path value="Contract.extension" />
      <sliceName value="exampleQuery" />
      <comment value="Informational query examples only. Authorization follows the normative workflow selected by subType." />
      <min value="0" />
      <max value="*" />
      <type>
        <code value="Extension" />
        <profile value="http://pcm.fhir.health.gov.il/StructureDefinition/ext-example-query" />
      </type>
    </element>
    <element id="Contract.identifier">
      <path value="Contract.identifier" />
      <comment value="PCM-assigned immutable grant identity. Source-list changes and cancellation retain the identity; replacement uses a new identifier. Token requests select it by exact system/value, never by caller-supplied grant content." />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Contract.identifier.use">
      <path value="Contract.identifier.use" />
      <min value="1" />
      <fixedCode value="official" />
    </element>
    <element id="Contract.identifier.system">
      <path value="Contract.identifier.system" />
      <min value="1" />
      <fixedUri value="http://pcm.fhir.health.gov.il/identifier/pcm-data-access-authorization-id" />
    </element>
    <element id="Contract.identifier.value">
      <path value="Contract.identifier.value" />
      <min value="1" />
    </element>
    <element id="Contract.status">
      <path value="Contract.status" />
      <comment value="Executed means the grant has been formally established. Only executed grants can authorize, subject to the period and current dependencies. Terminated means expired; revoked means intentionally withdrawn; entered-in-error means created erroneously. These three states are terminal. Dependency suspension does not change the Contract status." />
      <min value="1" />
      <binding>
        <strength value="required" />
        <valueSet value="http://pcm.fhir.health.gov.il/ValueSet/pcm-authorization-status" />
      </binding>
    </element>
    <element id="Contract.instantiatesUri">
      <path value="Contract.instantiatesUri" />
      <comment value="Optional URI of the governing external policy or agreement definition. Multiple grants may adhere to the same definition; it is not the grant identity or a source-membership selector." />
    </element>
    <element id="Contract.issued">
      <path value="Contract.issued" />
      <min value="1" />
      <constraint>
        <key value="pcm-authorization-timestamp" />
        <severity value="error" />
        <human value="Authorization grant issuance and any validity dates SHALL include a full date, hours, minutes, seconds and timezone." />
        <expression value="toString().matches('^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]+)?(Z|[+-][0-9]{2}:[0-9]{2})$')" />
        <source value="http://pcm.fhir.health.gov.il/StructureDefinition/pcm-data-access-authorization-contract" />
      </constraint>
    </element>
    <element id="Contract.applies">
      <path value="Contract.applies" />
      <comment value="Start and any end are full timestamps with seconds and timezone; both Period boundaries are inclusive. An absent end means ongoing. PCM checks applicability even before a stored status changes to terminated and bounds token expiry by end when present. Start is fixed at creation; PCM may shorten end, but extending validity requires a new grant." />
      <min value="1" />
    </element>
    <element id="Contract.applies.start">
      <path value="Contract.applies.start" />
      <min value="1" />
      <constraint>
        <key value="pcm-authorization-timestamp" />
        <severity value="error" />
        <human value="Authorization grant issuance and any validity dates SHALL include a full date, hours, minutes, seconds and timezone." />
        <expression value="toString().matches('^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]+)?(Z|[+-][0-9]{2}:[0-9]{2})$')" />
        <source value="http://pcm.fhir.health.gov.il/StructureDefinition/pcm-data-access-authorization-contract" />
      </constraint>
    </element>
    <element id="Contract.applies.end">
      <path value="Contract.applies.end" />
      <constraint>
        <key value="pcm-authorization-timestamp" />
        <severity value="error" />
        <human value="Authorization grant issuance and any validity dates SHALL include a full date, hours, minutes, seconds and timezone." />
        <expression value="toString().matches('^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]+)?(Z|[+-][0-9]{2}:[0-9]{2})$')" />
        <source value="http://pcm.fhir.health.gov.il/StructureDefinition/pcm-data-access-authorization-contract" />
      </constraint>
    </element>
    <element id="Contract.author">
      <path value="Contract.author" />
      <comment value="Organization issuing the grant. This is distinct from its recipient and any governing law or commercial agreement." />
      <min value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.org/fhir/StructureDefinition/Organization" />
      </type>
      <constraint>
        <key value="pcm-authorization-organization-reference" />
        <severity value="error" />
        <human value="Grant organizations SHALL use a relative Organization reference at the PCM FHIR base." />
        <expression value="reference.matches('^Organization/[A-Za-z0-9.-]{1,64}$')" />
        <source value="http://pcm.fhir.health.gov.il/StructureDefinition/pcm-data-access-authorization-contract" />
      </constraint>
    </element>
    <element id="Contract.author.reference">
      <path value="Contract.author.reference" />
      <min value="1" />
    </element>
    <element id="Contract.author.identifier">
      <path value="Contract.author.identifier" />
      <max value="0" />
    </element>
    <element id="Contract.type">
      <path value="Contract.type" />
      <min value="1" />
      <patternCodeableConcept>
        <coding>
          <system value="http://pcm.fhir.health.gov.il/cs/pcm-authorization-vocabulary" />
          <code value="data-access-authorization" />
        </coding>
      </patternCodeableConcept>
      <binding>
        <strength value="required" />
        <valueSet value="http://pcm.fhir.health.gov.il/ValueSet/pcm-authorization-type" />
      </binding>
    </element>
    <element id="Contract.type.coding">
      <path value="Contract.type.coding" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Contract.subType">
      <path value="Contract.subType" />
      <comment value="Immutable workflow classification selecting one complete permission package. Concrete profiles define its supported codes and normative scope/disclosure rules. Narrative and example queries do not grant permissions. A material change to permission meaning requires a new grant." />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Contract.subType.coding">
      <path value="Contract.subType.coding" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Contract.subType.coding.system">
      <path value="Contract.subType.coding.system" />
      <min value="1" />
    </element>
    <element id="Contract.subType.coding.code">
      <path value="Contract.subType.coding.code" />
      <min value="1" />
    </element>
    <element id="Contract.term">
      <path value="Contract.term" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Contract.term.offer.party">
      <path value="Contract.term.offer.party" />
      <comment value="One recipient organization, fixed at creation. PCM SHALL separately entitle each client application to the grant workflow; organization membership alone is insufficient. A different recipient requires a new grant." />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Contract.term.offer.party.reference">
      <path value="Contract.term.offer.party.reference" />
      <max value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.org/fhir/StructureDefinition/Organization" />
      </type>
      <constraint>
        <key value="pcm-authorization-organization-reference" />
        <severity value="error" />
        <human value="Grant organizations SHALL use a relative Organization reference at the PCM FHIR base." />
        <expression value="reference.matches('^Organization/[A-Za-z0-9.-]{1,64}$')" />
        <source value="http://pcm.fhir.health.gov.il/StructureDefinition/pcm-data-access-authorization-contract" />
      </constraint>
    </element>
    <element id="Contract.term.offer.party.reference.reference">
      <path value="Contract.term.offer.party.reference.reference" />
      <min value="1" />
    </element>
    <element id="Contract.term.offer.party.reference.identifier">
      <path value="Contract.term.offer.party.reference.identifier" />
      <max value="0" />
    </element>
    <element id="Contract.term.offer.party.role">
      <path value="Contract.term.offer.party.role" />
      <patternCodeableConcept>
        <coding>
          <system value="http://pcm.fhir.health.gov.il/cs/pcm-authorization-vocabulary" />
          <code value="grantee" />
        </coding>
      </patternCodeableConcept>
    </element>
    <element id="Contract.term.offer.party.role.coding">
      <path value="Contract.term.offer.party.role.coding" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Contract.term.asset">
      <path value="Contract.term.asset" />
      <short value="Workflow-defined data held by one permitted source" />
      <comment value="One entry per permitted Data Source, with no duplicates. PCM may add/remove entries under the governing arrangement while retaining this Contract identity. No entries means no source access, never all sources. Membership is independent of current source availability. Each token still has one exact Endpoint.address audience." />
    </element>
    <element id="Contract.term.asset.context">
      <path value="Contract.term.asset.context" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="Contract.term.asset.context.reference">
      <path value="Contract.term.asset.context.reference" />
      <comment value="The Data Source organization holding the workflow-defined data. Issuance and introspection require current membership and eligible source, parent Organization, Endpoint state. Workflow prerequisites may further narrow access." />
      <min value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="http://pcm.fhir.health.gov.il/StructureDefinition/pcm-organization-source" />
      </type>
      <constraint>
        <key value="pcm-authorization-organization-reference" />
        <severity value="error" />
        <human value="Grant organizations SHALL use a relative Organization reference at the PCM FHIR base." />
        <expression value="reference.matches('^Organization/[A-Za-z0-9.-]{1,64}$')" />
        <source value="http://pcm.fhir.health.gov.il/StructureDefinition/pcm-data-access-authorization-contract" />
      </constraint>
    </element>
    <element id="Contract.term.asset.context.reference.reference">
      <path value="Contract.term.asset.context.reference.reference" />
      <min value="1" />
    </element>
    <element id="Contract.term.asset.context.reference.identifier">
      <path value="Contract.term.asset.context.reference.identifier" />
      <max value="0" />
    </element>
  </differential>
</StructureDefinition>