openapi: 3.0.3
info:
  title: Demographic API
  version: development
  x-status: DEVELOPMENT
  x-spec: demographic
  contact:
    name: Specifications Editorial Committee openEHR
    url: https://specifications.openehr.org/
    email: info@openehr.org
  license:
    name: Creative Commons Attribution-NoDerivs 3.0 Unported
    url: https://creativecommons.org/licenses/by-nd/3.0/
  description: |
    ## Description

    ### Purpose

    This specification describes service endpoints, resources and operations as well as details of requests and responses that interacts with Demographic openEHR API in a RESTful manner.

    ### Related Documents

    Prerequisite documents for reading this document include:

    - The [Demographic Information Model](https://specifications.openehr.org/releases/RM/latest/demographic.html#_demographic_package)

    Related documents include:

    - The [openEHR Architecture Overview](https://specifications.openehr.org/releases/BASE/latest/architecture_overview.html)
    - The [openEHR Global Class Index](https://specifications.openehr.org/classes)
    - The [XML-Schemas (XSD)](https://specifications.openehr.org/releases/ITS-XML/latest)
    - The [JSON-Schemas](https://specifications.openehr.org/releases/ITS-JSON/latest) and [Simplified Data Template (SDT)](simplified_data_template.html)
    - The [openEHR Platform Abstract Service Model](https://specifications.openehr.org/releases/SM/development/openehr_platform.html)

    ### Status

    This specification is in the `DEVELOPMENT` state, and can be downloaded as [OpenAPI specification](https://spec.openapis.org/oas/v3.0.3) file (in YAML format) [for validation](computable/OAS/demographic-validation.openapi.yaml), or [for code generators](computable/OAS/demographic-codegen.openapi.yaml).
    Users are encouraged to comment on and/or advise on these paragraphs as well as the main content.

    The development version of this document can be found at <https://specifications.openehr.org/releases/ITS-REST/development/demographic.html>.
servers:
  - url: https://{baseUrl}/v1
    description: An example openEHR server URL.
    variables:
      baseUrl:
        default: openEHRSys.example.com
        description: The (example) server base URL prefix providing openEHR services. This may contain server name, port and base path prefix.
security: []
tags:
  - name: AGENT
    description: |
      Management of the [AGENT](https://specifications.openehr.org/releases/RM/latest/demographic.html#_agent_class) class.
  - name: GROUP
    description: |
      Management of the [GROUP](https://specifications.openehr.org/releases/RM/latest/demographic.html#_group_class) class.
  - name: ORGANISATION
    description: |
      Management of the [ORGANISATION](https://specifications.openehr.org/releases/RM/latest/demographic.html#_organisation_class) class.
  - name: PERSON
    description: |
      Management of the [PERSON](https://specifications.openehr.org/releases/RM/latest/demographic.html#_person_class) class.
  - name: ROLE
    description: |
      Management of the [ROLE](https://specifications.openehr.org/releases/RM/latest/demographic.html#_role_class) class.
  - name: VERSIONED_PARTY
    description: |
      Management of the [VERSIONED_PARTY](https://specifications.openehr.org/releases/RM/latest/demographic.html#_versioned_party_class) class.
  - name: CONTRIBUTION
    description: |
      Management of [CONTRIBUTION](https://specifications.openehr.org/releases/RM/latest/common.html#_contribution_class) class.
  - name: CAPABILITY_schema
    x-displayName: CAPABILITY
    description: |
      The `CAPABILITY` schema, formally specified in the Reference Model as the [CAPABILITY](https://specifications.openehr.org/releases/RM/latest/demographic.html#_capability_class) class:
      <SchemaDefinition schemaRef="#/components/schemas/Capability" />
  - name: CONTACT_schema
    x-displayName: CONTACT
    description: |
      The `CONTACT` schema, formally specified in the Reference Model as the [CONTACT](https://specifications.openehr.org/releases/RM/latest/demographic.html#_contact_class) class:
      <SchemaDefinition schemaRef="#/components/schemas/Contact" />
  - name: PARTY_IDENTITY_schema
    x-displayName: PARTY_IDENTITY
    description: |
      The `PARTY_IDENTITY` schema, formally specified in the Reference Model as the [PARTY_IDENTITY](https://specifications.openehr.org/releases/RM/latest/demographic.html#_party_identity_class) class:
      <SchemaDefinition schemaRef="#/components/schemas/PartyIdentity" />
  - name: PARTY_RELATIONSHIP_schema
    x-displayName: PARTY_RELATIONSHIP
    description: |
      The `PARTY_RELATIONSHIP` resource, formally specified in the Reference Model as the [PARTY_RELATIONSHIP](https://specifications.openehr.org/releases/RM/latest/demographic.html#_party_relationship_class) class:
      <SchemaDefinition schemaRef="#/components/schemas/PartyRelationship" />
  - name: ITEM_schema
    x-displayName: ITEM
    description: |
      The abstract `ITEM` class:
      <SchemaDefinition schemaRef="#/components/schemas/UItem" />
  - name: ITEM_STRUCTURE_schema
    x-displayName: ITEM_STRUCTURE
    description: |
      The abstract `ITEM_STRUCTURE` class:
      <SchemaDefinition schemaRef="#/components/schemas/UItemStructure" />
paths:
  /demographic/agent:
    post:
      operationId: agent_create
      summary: Create AGENT
      description: |
        Creates the first version of a new AGENT.
      tags:
        - AGENT
      parameters:
        - $ref: '#/components/parameters/Prefer'
      requestBody:
        description: |
          The AGENT.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Agent'
        required: true
      responses:
        '201':
          $ref: '#/components/responses/201_AGENT'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
  /demographic/agent/{uid_based_id}:
    get:
      operationId: agent_get
      summary: Get AGENT
      description: |
        Retrieves a version of the AGENT identified by `uid_based_id`.

        The `uid_based_id` can take a form of an OBJECT_VERSION_ID identifier taken from VERSION.uid.value (i.e. a `version_uid`), or a form of a HIER_OBJECT_ID identifier taken from VERSIONED_OBJECT.uid.value (i.e. a `versioned_object_uid`).
        The former is used to retrieve a specific known version of the AGENT (e.g. one identified by `8849182c-82ad-4088-a07f-48ead4180515::openEHRSys.example.com::1`), whereas the later (e.g. an identifier like `8849182c-82ad-4088-a07f-48ead4180515`) is be used to retrieve a version from the version container whenever the _version_tree_id_ is unknown or irrelevant (such as when most recent version is requested).

        When the `uid_based_id` has the form of a HIER_OBJECT_ID, if the `version_at_time` is supplied, retrieves the version extant _at specified time_, otherwise retrieves the _latest_ AGENT version.

        See [Resource identification](overview.html#tag/Resources/Resource-identification) for more details about the identifiers usage and meaning.
      tags:
        - AGENT
      parameters:
        - $ref: '#/components/parameters/uid_based_id'
        - $ref: '#/components/parameters/version_at_time'
      responses:
        '200':
          $ref: '#/components/responses/200_AGENT_retrieved'
        '204':
          $ref: '#/components/responses/204_because_deleted_at_time'
        '404':
          $ref: '#/components/responses/404_not_found_or_no_version_at_time'
    put:
      operationId: agent_update
      summary: Update AGENT
      description: |
        Updates AGENT identified by `uid_based_id`.

        The `uid_based_id` can take only a form of an HIER_OBJECT_ID identifier taken from VERSIONED_OBJECT.uid.value (i.e. a `versioned_object_uid`).

        If the request body already contains a AGENT.uid.value, it must match the `uid_based_id` in the URL. 

        The existing latest `version_uid` of AGENT resource (i.e. the `preceding_version_uid`) must be specified in the `If-Match` header.
      tags:
        - AGENT
      parameters:
        - $ref: '#/components/parameters/uid_based_id_as_versioned_object_uid'
        - $ref: '#/components/parameters/If-Match'
        - $ref: '#/components/parameters/Prefer'
      requestBody:
        description: |
          The new AGENT.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Agent'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/200_AGENT_updated'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
        '412':
          $ref: '#/components/responses/412_AGENT'
        '422':
          $ref: '#/components/responses/422'
    delete:
      operationId: agent_delete
      summary: Delete AGENT
      description: |
        Deletes the AGENT identified by `uid_based_id`.

        The `uid_based_id` MUST be in a form of an OBJECT_VERSION_ID identifier taken from the last (most recent) VERSION.uid.value, representing the `preceding_version_uid` to be deleted.
      tags:
        - AGENT
      parameters:
        - $ref: '#/components/parameters/uid_based_id_as_version_uid'
      responses:
        '204':
          $ref: '#/components/responses/204_AGENT_deleted'
        '400':
          $ref: '#/components/responses/400_already_deleted'
        '404':
          $ref: '#/components/responses/404'
        '409':
          $ref: '#/components/responses/409_AGENT_with_uid_based_id'
  /demographic/group:
    post:
      operationId: group_create
      summary: Create GROUP
      description: |
        Creates the first version of a new GROUP.
      tags:
        - GROUP
      parameters:
        - $ref: '#/components/parameters/Prefer'
      requestBody:
        description: |
          The GROUP.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Group'
        required: true
      responses:
        '201':
          $ref: '#/components/responses/201_GROUP'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
  /demographic/group/{uid_based_id}:
    get:
      operationId: group_get
      summary: Get GROUP
      description: |
        Retrieves a version of the GROUP identified by `uid_based_id`.

        The `uid_based_id` can take a form of an OBJECT_VERSION_ID identifier taken from VERSION.uid.value (i.e. a `version_uid`), or a form of a HIER_OBJECT_ID identifier taken from VERSIONED_OBJECT.uid.value (i.e. a `versioned_object_uid`).
        The former is used to retrieve a specific known version of the GROUP (e.g. one identified by `8849182c-82ad-4088-a07f-48ead4180515::openEHRSys.example.com::1`), whereas the later (e.g. an identifier like `8849182c-82ad-4088-a07f-48ead4180515`) is be used to retrieve a version from the version container whenever the _version_tree_id_ is unknown or irrelevant (such as when most recent version is requested).

        When the `uid_based_id` has the form of a HIER_OBJECT_ID, if the `version_at_time` is supplied, retrieves the version extant _at specified time_, otherwise retrieves the _latest_ GROUP version.

        See [Resource identification](overview.html#tag/Resources/Resource-identification) for more details about the identifiers usage and meaning.
      tags:
        - GROUP
      parameters:
        - $ref: '#/components/parameters/uid_based_id'
        - $ref: '#/components/parameters/version_at_time'
      responses:
        '200':
          $ref: '#/components/responses/200_GROUP_retrieved'
        '204':
          $ref: '#/components/responses/204_because_deleted_at_time'
        '404':
          $ref: '#/components/responses/404_not_found_or_no_version_at_time'
    put:
      operationId: group_update
      summary: Update GROUP
      description: |
        Updates GROUP identified by `uid_based_id`.

        The `uid_based_id` can take only a form of an HIER_OBJECT_ID identifier taken from VERSIONED_OBJECT.uid.value (i.e. a `versioned_object_uid`).

        If the request body already contains a GROUP.uid.value, it must match the `uid_based_id` in the URL. 

        The existing latest `version_uid` of GROUP resource (i.e. the `preceding_version_uid`) must be specified in the `If-Match` header.
      tags:
        - GROUP
      parameters:
        - $ref: '#/components/parameters/uid_based_id_as_versioned_object_uid'
        - $ref: '#/components/parameters/If-Match'
        - $ref: '#/components/parameters/Prefer'
      requestBody:
        description: |
          The new GROUP.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Group'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/200_GROUP_updated'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
        '412':
          $ref: '#/components/responses/412_GROUP'
        '422':
          $ref: '#/components/responses/422'
    delete:
      operationId: group_delete
      summary: Delete GROUP
      description: |
        Deletes the GROUP identified by `uid_based_id`.

        The `uid_based_id` MUST be in a form of an OBJECT_VERSION_ID identifier taken from the last (most recent) VERSION.uid.value, representing the `preceding_version_uid` to be deleted.
      tags:
        - GROUP
      parameters:
        - $ref: '#/components/parameters/uid_based_id_as_version_uid'
      responses:
        '204':
          $ref: '#/components/responses/204_GROUP_deleted'
        '400':
          $ref: '#/components/responses/400_already_deleted'
        '404':
          $ref: '#/components/responses/404'
        '409':
          $ref: '#/components/responses/409_GROUP_with_uid_based_id'
  /demographic/organisation:
    post:
      operationId: organisation_create
      summary: Create ORGANISATION
      description: |
        Creates the first version of a new ORGANISATION.
      tags:
        - ORGANISATION
      parameters:
        - $ref: '#/components/parameters/Prefer'
      requestBody:
        description: |
          The ORGANISATION.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Organisation'
        required: true
      responses:
        '201':
          $ref: '#/components/responses/201_ORGANISATION'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
  /demographic/organisation/{uid_based_id}:
    get:
      operationId: organisation_get
      summary: Get ORGANISATION
      description: |
        Retrieves a version of the ORGANISATION identified by `uid_based_id`.

        The `uid_based_id` can take a form of an OBJECT_VERSION_ID identifier taken from VERSION.uid.value (i.e. a `version_uid`), or a form of a HIER_OBJECT_ID identifier taken from VERSIONED_OBJECT.uid.value (i.e. a `versioned_object_uid`).
        The former is used to retrieve a specific known version of the ORGANISATION (e.g. one identified by `8849182c-82ad-4088-a07f-48ead4180515::openEHRSys.example.com::1`), whereas the later (e.g. an identifier like `8849182c-82ad-4088-a07f-48ead4180515`) is be used to retrieve a version from the version container whenever the _version_tree_id_ is unknown or irrelevant (such as when most recent version is requested).

        When the `uid_based_id` has the form of a HIER_OBJECT_ID, if the `version_at_time` is supplied, retrieves the version extant _at specified time_, otherwise retrieves the _latest_ ORGANISATION version.

        See [Resource identification](overview.html#tag/Resources/Resource-identification) for more details about the identifiers usage and meaning.
      tags:
        - ORGANISATION
      parameters:
        - $ref: '#/components/parameters/uid_based_id'
        - $ref: '#/components/parameters/version_at_time'
      responses:
        '200':
          $ref: '#/components/responses/200_ORGANISATION_retrieved'
        '204':
          $ref: '#/components/responses/204_because_deleted_at_time'
        '404':
          $ref: '#/components/responses/404_not_found_or_no_version_at_time'
    put:
      operationId: organisation_update
      summary: Update ORGANISATION
      description: |
        Updates ORGANISATION identified by `uid_based_id`.

        The `uid_based_id` can take only a form of an HIER_OBJECT_ID identifier taken from VERSIONED_OBJECT.uid.value (i.e. a `versioned_object_uid`).

        If the request body already contains a ORGANISATION.uid.value, it must match the `uid_based_id` in the URL. 

        The existing latest `version_uid` of ORGANISATION resource (i.e. the `preceding_version_uid`) must be specified in the `If-Match` header.
      tags:
        - ORGANISATION
      parameters:
        - $ref: '#/components/parameters/uid_based_id_as_versioned_object_uid'
        - $ref: '#/components/parameters/If-Match'
        - $ref: '#/components/parameters/Prefer'
      requestBody:
        description: |
          The new ORGANISATION.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Organisation'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/200_ORGANISATION_updated'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
        '412':
          $ref: '#/components/responses/412_ORGANISATION'
        '422':
          $ref: '#/components/responses/422'
    delete:
      operationId: organisation_delete
      summary: Delete ORGANISATION
      description: |
        Deletes the ORGANISATION identified by `uid_based_id`.

        The `uid_based_id` MUST be in a form of an OBJECT_VERSION_ID identifier taken from the last (most recent) VERSION.uid.value, representing the `preceding_version_uid` to be deleted.
      tags:
        - ORGANISATION
      parameters:
        - $ref: '#/components/parameters/uid_based_id_as_version_uid'
      responses:
        '204':
          $ref: '#/components/responses/204_ORGANISATION_deleted'
        '400':
          $ref: '#/components/responses/400_already_deleted'
        '404':
          $ref: '#/components/responses/404'
        '409':
          $ref: '#/components/responses/409_ORGANISATION_with_uid_based_id'
  /demographic/person:
    post:
      operationId: person_create
      summary: Create PERSON
      description: |
        Creates the first version of a new PERSON.
      tags:
        - PERSON
      parameters:
        - $ref: '#/components/parameters/Prefer'
      requestBody:
        description: |
          The PERSON.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Person'
        required: true
      responses:
        '201':
          $ref: '#/components/responses/201_PERSON'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
  /demographic/person/{uid_based_id}:
    get:
      operationId: person_get
      summary: Get PERSON
      description: |
        Retrieves a version of the PERSON identified by `uid_based_id`.

        The `uid_based_id` can take a form of an OBJECT_VERSION_ID identifier taken from VERSION.uid.value (i.e. a `version_uid`), or a form of a HIER_OBJECT_ID identifier taken from VERSIONED_OBJECT.uid.value (i.e. a `versioned_object_uid`).
        The former is used to retrieve a specific known version of the PERSON (e.g. one identified by `8849182c-82ad-4088-a07f-48ead4180515::openEHRSys.example.com::1`), whereas the later (e.g. an identifier like `8849182c-82ad-4088-a07f-48ead4180515`) is be used to retrieve a version from the version container whenever the _version_tree_id_ is unknown or irrelevant (such as when most recent version is requested).

        When the `uid_based_id` has the form of a HIER_OBJECT_ID, if the `version_at_time` is supplied, retrieves the version extant _at specified time_, otherwise retrieves the _latest_ PERSON version.

        See [Resource identification](overview.html#tag/Resources/Resource-identification) for more details about the identifiers usage and meaning.
      tags:
        - PERSON
      parameters:
        - $ref: '#/components/parameters/uid_based_id'
        - $ref: '#/components/parameters/version_at_time'
      responses:
        '200':
          $ref: '#/components/responses/200_PERSON_retrieved'
        '204':
          $ref: '#/components/responses/204_because_deleted_at_time'
        '404':
          $ref: '#/components/responses/404_not_found_or_no_version_at_time'
    put:
      operationId: person_update
      summary: Update PERSON
      description: |
        Updates PERSON identified by `uid_based_id`.

        The `uid_based_id` can take only a form of an HIER_OBJECT_ID identifier taken from VERSIONED_OBJECT.uid.value (i.e. a `versioned_object_uid`).

        If the request body already contains a PERSON.uid.value, it must match the `uid_based_id` in the URL. 

        The existing latest `version_uid` of PERSON resource (i.e. the `preceding_version_uid`) must be specified in the `If-Match` header.
      tags:
        - PERSON
      parameters:
        - $ref: '#/components/parameters/uid_based_id_as_versioned_object_uid'
        - $ref: '#/components/parameters/If-Match'
        - $ref: '#/components/parameters/Prefer'
      requestBody:
        description: |
          The new PERSON.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Person'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/200_PERSON_updated'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
        '412':
          $ref: '#/components/responses/412_PERSON'
        '422':
          $ref: '#/components/responses/422'
    delete:
      operationId: person_delete
      summary: Delete PERSON
      description: |
        Deletes the PERSON identified by `uid_based_id`.

        The `uid_based_id` MUST be in a form of an OBJECT_VERSION_ID identifier taken from the last (most recent) VERSION.uid.value, representing the `preceding_version_uid` to be deleted.
      tags:
        - PERSON
      parameters:
        - $ref: '#/components/parameters/uid_based_id_as_version_uid'
      responses:
        '204':
          $ref: '#/components/responses/204_PERSON_deleted'
        '400':
          $ref: '#/components/responses/400_already_deleted'
        '404':
          $ref: '#/components/responses/404'
        '409':
          $ref: '#/components/responses/409_PERSON_with_uid_based_id'
  /demographic/role:
    post:
      operationId: role_create
      summary: Create ROLE
      description: |
        Creates the first version of a new ROLE.
      tags:
        - ROLE
      parameters:
        - $ref: '#/components/parameters/Prefer'
      requestBody:
        description: |
          The ROLE.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Role'
        required: true
      responses:
        '201':
          $ref: '#/components/responses/201_ROLE'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
  /demographic/role/{uid_based_id}:
    get:
      operationId: role_get
      summary: Get ROLE
      description: |
        Retrieves a version of the ROLE identified by `uid_based_id`.

        The `uid_based_id` can take a form of an OBJECT_VERSION_ID identifier taken from VERSION.uid.value (i.e. a `version_uid`), or a form of a HIER_OBJECT_ID identifier taken from VERSIONED_OBJECT.uid.value (i.e. a `versioned_object_uid`).
        The former is used to retrieve a specific known version of the ROLE (e.g. one identified by `8849182c-82ad-4088-a07f-48ead4180515::openEHRSys.example.com::1`), whereas the later (e.g. an identifier like `8849182c-82ad-4088-a07f-48ead4180515`) is be used to retrieve a version from the version container whenever the _version_tree_id_ is unknown or irrelevant (such as when most recent version is requested).

        When the `uid_based_id` has the form of a HIER_OBJECT_ID, if the `version_at_time` is supplied, retrieves the version extant _at specified time_, otherwise retrieves the _latest_ ROLE version.

        See [Resource identification](overview.html#tag/Resources/Resource-identification) for more details about the identifiers usage and meaning.
      tags:
        - ROLE
      parameters:
        - $ref: '#/components/parameters/uid_based_id'
        - $ref: '#/components/parameters/version_at_time'
      responses:
        '200':
          $ref: '#/components/responses/200_ROLE_retrieved'
        '204':
          $ref: '#/components/responses/204_because_deleted_at_time'
        '404':
          $ref: '#/components/responses/404_not_found_or_no_version_at_time'
    put:
      operationId: role_update
      summary: Update ROLE
      description: |
        Updates ROLE identified by `uid_based_id`.

        The `uid_based_id` can take only a form of an HIER_OBJECT_ID identifier taken from VERSIONED_OBJECT.uid.value (i.e. a `versioned_object_uid`).

        If the request body already contains a ROLE.uid.value, it must match the `uid_based_id` in the URL. 

        The existing latest `version_uid` of ROLE resource (i.e. the `preceding_version_uid`) must be specified in the `If-Match` header.
      tags:
        - ROLE
      parameters:
        - $ref: '#/components/parameters/uid_based_id_as_versioned_object_uid'
        - $ref: '#/components/parameters/If-Match'
        - $ref: '#/components/parameters/Prefer'
      requestBody:
        description: |
          The new ROLE.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Role'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/200_ROLE_updated'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
        '412':
          $ref: '#/components/responses/412_ROLE'
        '422':
          $ref: '#/components/responses/422'
    delete:
      operationId: role_delete
      summary: Delete ROLE
      description: |
        Deletes the ROLE identified by `uid_based_id`.

        The `uid_based_id` MUST be in a form of an OBJECT_VERSION_ID identifier taken from the last (most recent) VERSION.uid.value, representing the `preceding_version_uid` to be deleted.
      tags:
        - ROLE
      parameters:
        - $ref: '#/components/parameters/uid_based_id_as_version_uid'
      responses:
        '204':
          $ref: '#/components/responses/204_ROLE_deleted'
        '400':
          $ref: '#/components/responses/400_already_deleted'
        '404':
          $ref: '#/components/responses/404'
        '409':
          $ref: '#/components/responses/409_ROLE_with_uid_based_id'
  /demographic/versioned_party/{versioned_object_uid}:
    get:
      operationId: versioned_party_get
      summary: Get VERSIONED_PARTY
      description: |
        Retrieves a VERSIONED_PARTY identified by `versioned_object_uid`.
      tags:
        - VERSIONED_PARTY
      parameters:
        - $ref: '#/components/parameters/versioned_object_uid_PARTY'
      responses:
        '200':
          $ref: '#/components/responses/200_VERSIONED_PARTY'
        '404':
          $ref: '#/components/responses/404'
  /demographic/versioned_party/{versioned_object_uid}/revision_history:
    get:
      operationId: versioned_party_revision_history
      summary: Get VERSIONED_PARTY revision history
      description: |
        Retrieves revision history of the VERSIONED_PARTY identified by `versioned_object_uid`.
      tags:
        - VERSIONED_PARTY
      parameters:
        - $ref: '#/components/parameters/versioned_object_uid_PARTY'
      responses:
        '200':
          $ref: '#/components/responses/200_REVISION_HISTORY'
        '404':
          $ref: '#/components/responses/404'
  /demographic/versioned_party/{versioned_object_uid}/version:
    get:
      operationId: versioned_party_version_get_at_time
      summary: Get VERSIONED_PARTY version at time
      description: |
        Retrieves a VERSION from the VERSIONED_PARTY identified by `versioned_object_uid`.

        If `version_at_time` is supplied, retrieves the VERSION extant _at specified time_, otherwise retrieves the _latest_ VERSION.
      tags:
        - VERSIONED_PARTY
      parameters:
        - $ref: '#/components/parameters/versioned_object_uid_PARTY'
        - $ref: '#/components/parameters/version_at_time'
      responses:
        '200':
          $ref: '#/components/responses/200_VERSION_of_PARTY_at_time'
        '404':
          $ref: '#/components/responses/404_not_found_or_no_version_at_time'
  /demographic/versioned_party/{versioned_object_uid}/version/{version_uid}:
    get:
      operationId: versioned_party_version_get_by_id
      summary: Get VERSIONED_PARTY version by id
      description: |
        Retrieves a VERSION identified by `version_uid` of a VERSIONED_PARTY identified by `versioned_object_uid`.
      tags:
        - VERSIONED_PARTY
      parameters:
        - $ref: '#/components/parameters/versioned_object_uid_PARTY'
        - $ref: '#/components/parameters/version_uid'
      responses:
        '200':
          $ref: '#/components/responses/200_VERSION_of_PARTY_by_id'
        '404':
          $ref: '#/components/responses/404'
  /demographic/contribution:
    post:
      operationId: contribution_create
      summary: Create CONTRIBUTION
      description: |
        We will use the relaxed CONTRIBUTION with the following optional attributes:
          - `uid`: when provided, it will be accepted in case is not in-use, otherwise error will be returned
          - `audit.time_committed`: server will always set it
          - `audit.system_id`: when provided, it will be validated
      tags:
        - CONTRIBUTION
      parameters:
        - $ref: '#/components/parameters/Prefer'
      requestBody:
        description: |
          The CONTRIBUTION.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewContribution'
        required: true
      responses:
        '201':
          $ref: '#/components/responses/201_demographic_CONTRIBUTION'
        '400':
          $ref: '#/components/responses/400_CONTRIBUTION'
        '409':
          $ref: '#/components/responses/409'
  /demographic/contribution/{contribution_uid}:
    get:
      operationId: contribution_get
      summary: Get CONTRIBUTION by id
      description: |
        Retrieves a CONTRIBUTION identified by `contribution_uid`.
      tags:
        - CONTRIBUTION
      parameters:
        - $ref: '#/components/parameters/contribution_uid'
      responses:
        '200':
          $ref: '#/components/responses/200_CONTRIBUTION'
        '404':
          $ref: '#/components/responses/404_demographic_CONTRIBUTION'
components:
  schemas:
    UMDvUri:
      title: DV_URI
      required:
        - value
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_URI
          type: string
        value:
          type: string
      example:
        _type: DV_URI
        value: https://www.example.com
    DvEhrUri:
      title: DV_EHR_URI
      type: object
      properties:
        _type:
          enum:
            - DV_EHR_URI
          type: string
        value:
          type: string
      example:
        _type: DV_EHR_URI
        value: ehr://system_id/ehr_id/top_level_structure_locator/path_inside_top_level_structure
      required:
        - value
    UMDvEhrUri:
      title: DV_EHR_URI
      required:
        - value
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_EHR_URI
          type: string
        value:
          type: string
      example:
        _type: DV_EHR_URI
        value: ehr://system_id/ehr_id/top_level_structure_locator/path_inside_top_level_structure
    UDvUri:
      title: DV_URI
      type: object
      oneOf:
        - $ref: '#/components/schemas/UMDvUri'
        - $ref: '#/components/schemas/UMDvEhrUri'
      discriminator:
        propertyName: _type
        mapping:
          DV_URI: '#/components/schemas/UMDvUri'
          DV_EHR_URI: '#/components/schemas/UMDvEhrUri'
    TerminologyId:
      title: TERMINOLOGY_ID
      type: object
      properties:
        _type:
          enum:
            - TERMINOLOGY_ID
          type: string
        value:
          type: string
      required:
        - value
    CodePhrase:
      title: CODE_PHRASE
      required:
        - terminology_id
        - code_string
      type: object
      properties:
        terminology_id:
          $ref: '#/components/schemas/TerminologyId'
        code_string:
          type: string
        preferred_term:
          type: string
      example:
        terminology_id:
          value: local
        code_string: at0001
    DvCodedText:
      title: DV_CODED_TEXT
      required:
        - value
        - defining_code
      type: object
      properties:
        _type:
          enum:
            - DV_CODED_TEXT
          type: string
        value:
          type: string
        hyperlink:
          $ref: '#/components/schemas/UDvUri'
        formatting:
          type: string
        mappings:
          type: array
          items:
            $ref: '#/components/schemas/TermMapping'
        language:
          $ref: '#/components/schemas/CodePhrase'
        encoding:
          $ref: '#/components/schemas/CodePhrase'
        defining_code:
          $ref: '#/components/schemas/CodePhrase'
      example:
        value: Coded text value
        defining_code:
          terminology_id:
            value: local
          code_string: at0001
    TermMapping:
      title: TERM_MAPPING
      required:
        - match
        - target
      type: object
      properties:
        match:
          pattern: /^[><=?]$/
          type: string
        purpose:
          $ref: '#/components/schemas/DvCodedText'
        target:
          $ref: '#/components/schemas/CodePhrase'
    UMDvText:
      title: DV_TEXT
      required:
        - value
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_TEXT
          type: string
        value:
          type: string
        hyperlink:
          $ref: '#/components/schemas/UDvUri'
        formatting:
          type: string
        mappings:
          type: array
          items:
            $ref: '#/components/schemas/TermMapping'
        language:
          $ref: '#/components/schemas/CodePhrase'
        encoding:
          $ref: '#/components/schemas/CodePhrase'
      example:
        _type: DV_TEXT
        value: Text value
    UMDvCodedText:
      title: DV_CODED_TEXT
      required:
        - value
        - defining_code
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_CODED_TEXT
          type: string
        value:
          type: string
        hyperlink:
          $ref: '#/components/schemas/UDvUri'
        formatting:
          type: string
        mappings:
          type: array
          items:
            $ref: '#/components/schemas/TermMapping'
        language:
          $ref: '#/components/schemas/CodePhrase'
        encoding:
          $ref: '#/components/schemas/CodePhrase'
        defining_code:
          $ref: '#/components/schemas/CodePhrase'
      example:
        value: Coded text value
        defining_code:
          terminology_id:
            value: local
          code_string: at0001
    UDvText:
      title: DV_TEXT
      type: object
      oneOf:
        - $ref: '#/components/schemas/UMDvText'
        - $ref: '#/components/schemas/UMDvCodedText'
      discriminator:
        propertyName: _type
        mapping:
          DV_TEXT: '#/components/schemas/UMDvText'
          DV_CODED_TEXT: '#/components/schemas/UMDvCodedText'
    HierObjectId:
      title: HIER_OBJECT_ID
      required:
        - value
      type: object
      properties:
        _type:
          enum:
            - HIER_OBJECT_ID
          type: string
        value:
          type: string
          format: uuid
      example:
        value: 6cb19121-4307-4648-9da0-d62e4d51f19b
    UMHierObjectId:
      title: HIER_OBJECT_ID
      required:
        - value
        - _type
      type: object
      example:
        _type: HIER_OBJECT_ID
        value: 6cb19121-4307-4648-9da0-d62e4d51f19b
      properties:
        _type:
          enum:
            - HIER_OBJECT_ID
          type: string
        value:
          type: string
          format: uuid
    ObjectVersionId:
      title: OBJECT_VERSION_ID
      required:
        - value
      type: object
      properties:
        _type:
          enum:
            - OBJECT_VERSION_ID
          type: string
        value:
          type: string
      example:
        value: 6cb19121-4307-4648-9da0-d62e4d51f19b::openEHRSys.example.com::2
    UMObjectVersionId:
      title: OBJECT_VERSION_ID
      required:
        - value
        - _type
      type: object
      example:
        _type: OBJECT_VERSION_ID
        value: 6cb19121-4307-4648-9da0-d62e4d51f19b::openEHRSys.example.com::2
      properties:
        _type:
          enum:
            - OBJECT_VERSION_ID
          type: string
        value:
          type: string
    UUidBasedId:
      title: UID_BASED_ID
      type: object
      oneOf:
        - $ref: '#/components/schemas/UMHierObjectId'
        - $ref: '#/components/schemas/UMObjectVersionId'
      discriminator:
        propertyName: _type
        mapping:
          HIER_OBJECT_ID: '#/components/schemas/UMHierObjectId'
          OBJECT_VERSION_ID: '#/components/schemas/UMObjectVersionId'
    Link:
      title: LINK
      required:
        - meaning
        - type
        - target
      type: object
      properties:
        meaning:
          $ref: '#/components/schemas/UDvText'
        type:
          $ref: '#/components/schemas/UDvText'
        target:
          $ref: '#/components/schemas/DvEhrUri'
    ArchetypeId:
      title: ARCHETYPE_ID
      type: object
      properties:
        _type:
          enum:
            - ARCHETYPE_ID
          type: string
        value:
          type: string
      required:
        - value
    TemplateId:
      title: TEMPLATE_ID
      type: object
      properties:
        _type:
          enum:
            - TEMPLATE_ID
          type: string
        value:
          type: string
      required:
        - value
    Archetyped:
      title: ARCHETYPED
      required:
        - archetype_id
        - rm_version
      type: object
      properties:
        archetype_id:
          $ref: '#/components/schemas/ArchetypeId'
        template_id:
          $ref: '#/components/schemas/TemplateId'
        rm_version:
          type: string
      example:
        archetype_id:
          value: openEHR-EHR-COMPOSITION.encounter.v1
        template_id:
          value: Example.v1::c7ec861c-c413-39ff-9965-a198ebf44747
        rm_version: 1.0.2
      additionalProperties: false
    DvIdentifier:
      title: DV_IDENTIFIER
      required:
        - id
      type: object
      properties:
        _type:
          enum:
            - DV_IDENTIFIER
          type: string
        issuer:
          type: string
        assigner:
          type: string
        id:
          type: string
        type:
          type: string
      description: |
        Type for representing identifiers of real-world entities. Typical identifiers include drivers licence number, social security number, veterans affairs number, prescription id, order id, and so on.

        DV_IDENTIFIER is used to represent any identifier of a real thing, issued by some authority or agency.
      example:
        id: 16b74749-e6aa-4945-b760-b42bdc07098a
        type: Patient
    DvMultimedia:
      title: DV_MULTIMEDIA
      required:
        - _type
        - media_type
        - size
      type: object
      properties:
        _type:
          enum:
            - DV_MULTIMEDIA
          type: string
        charset:
          $ref: '#/components/schemas/CodePhrase'
        language:
          $ref: '#/components/schemas/CodePhrase'
        alternate_text:
          type: string
        uri:
          $ref: '#/components/schemas/UDvUri'
        data:
          type: string
        media_type:
          $ref: '#/components/schemas/CodePhrase'
        compression_algorithm:
          $ref: '#/components/schemas/CodePhrase'
        integrity_check:
          type: string
        integrity_check_algorithm:
          $ref: '#/components/schemas/CodePhrase'
        thumbnail:
          $ref: '#/components/schemas/DvMultimedia'
        size:
          type: integer
    UMDvMultimedia:
      title: DV_MULTIMEDIA
      required:
        - _type
        - media_type
        - size
      type: object
      properties:
        _type:
          enum:
            - DV_MULTIMEDIA
          type: string
        charset:
          $ref: '#/components/schemas/CodePhrase'
        language:
          $ref: '#/components/schemas/CodePhrase'
        alternate_text:
          type: string
        uri:
          $ref: '#/components/schemas/UDvUri'
        data:
          type: string
        media_type:
          $ref: '#/components/schemas/CodePhrase'
        compression_algorithm:
          $ref: '#/components/schemas/CodePhrase'
        integrity_check:
          type: string
        integrity_check_algorithm:
          $ref: '#/components/schemas/CodePhrase'
        thumbnail:
          $ref: '#/components/schemas/DvMultimedia'
        size:
          type: integer
    UMDvParsable:
      title: DV_PARSABLE
      required:
        - _type
        - value
        - formalism
      type: object
      properties:
        _type:
          enum:
            - DV_PARSABLE
          type: string
        charset:
          $ref: '#/components/schemas/CodePhrase'
        language:
          $ref: '#/components/schemas/CodePhrase'
        value:
          type: string
        formalism:
          type: string
    UDvEncapsulated:
      title: DV_ENCAPSULATED
      type: object
      oneOf:
        - $ref: '#/components/schemas/UMDvMultimedia'
        - $ref: '#/components/schemas/UMDvParsable'
      discriminator:
        propertyName: _type
        mapping:
          DV_MULTIMEDIA: '#/components/schemas/UMDvMultimedia'
          DV_PARSABLE: '#/components/schemas/UMDvParsable'
    PartyRef:
      title: PARTY_REF
      type: object
      properties:
        namespace:
          type: string
        type:
          pattern: ^PERSON|ORGANISATION|GROUP|AGENT|ROLE|PARTY|ACTOR$
          type: string
        id:
          $ref: '#/components/schemas/UMHierObjectId'
      description: Identifier for parties in a demographic or identity service.
      example:
        id:
          _type: HIER_OBJECT_ID
          value: b52b9408-7048-4ec8-94bd-831fb0727e67
        namespace: local
        type: PERSON
      required:
        - namespace
        - type
        - id
    UMPartyIdentified:
      title: PARTY_IDENTIFIED
      required:
        - _type
      type: object
      properties:
        _type:
          enum:
            - PARTY_IDENTIFIED
          type: string
        external_ref:
          $ref: '#/components/schemas/PartyRef'
        name:
          type: string
        identifiers:
          type: array
          items:
            $ref: '#/components/schemas/DvIdentifier'
      example:
        _type: PARTY_IDENTIFIED
        external_ref:
          id:
            _type: GENERIC_ID
            value: 16b74749-e6aa-4945-b760-b42bdc07098a
            scheme: pid
          namespace: openEHRSys.example.com
          type: PERSON
        name: A name
    UMPartyRelated:
      title: PARTY_RELATED
      required:
        - _type
        - relationship
      type: object
      properties:
        _type:
          enum:
            - PARTY_RELATED
          type: string
        external_ref:
          $ref: '#/components/schemas/PartyRef'
        name:
          type: string
        identifiers:
          type: array
          items:
            $ref: '#/components/schemas/DvIdentifier'
        relationship:
          $ref: '#/components/schemas/DvCodedText'
      example:
        _type: PARTY_IDENTIFIED
        external_ref:
          id:
            _type: GENERIC_ID
            value: 16b74749-e6aa-4945-b760-b42bdc07098a
            scheme: pid
          namespace: openEHRSys.example.com
          type: PERSON
        name: A name
    UPartyIdentified:
      title: PARTY_IDENTIFIED
      type: object
      oneOf:
        - $ref: '#/components/schemas/UMPartyIdentified'
        - $ref: '#/components/schemas/UMPartyRelated'
      discriminator:
        propertyName: _type
        mapping:
          PARTY_IDENTIFIED: '#/components/schemas/UMPartyIdentified'
          PARTY_RELATED: '#/components/schemas/UMPartyRelated'
    UMPartySelf:
      title: PARTY_SELF
      required:
        - _type
      type: object
      properties:
        _type:
          enum:
            - PARTY_SELF
          type: string
        external_ref:
          $ref: '#/components/schemas/PartyRef'
    UPartyProxy:
      title: PARTY_PROXY
      type: object
      oneOf:
        - $ref: '#/components/schemas/UMPartySelf'
        - $ref: '#/components/schemas/UMPartyIdentified'
        - $ref: '#/components/schemas/UMPartyRelated'
      discriminator:
        propertyName: _type
        mapping:
          PARTY_SELF: '#/components/schemas/UMPartySelf'
          PARTY_IDENTIFIED: '#/components/schemas/UMPartyIdentified'
          PARTY_RELATED: '#/components/schemas/UMPartyRelated'
    DvInterval:
      title: DV_INTERVAL
      required:
        - lower_unbounded
        - upper_unbounded
        - lower_included
        - upper_included
      type: object
      properties:
        _type:
          type: string
          default: DV_INTERVAL
        lower_unbounded:
          type: boolean
        upper_unbounded:
          type: boolean
        lower_included:
          type: boolean
        upper_included:
          type: boolean
    ReferenceRange:
      title: REFERENCE_RANGE
      required:
        - meaning
        - range
      type: object
      properties:
        meaning:
          $ref: '#/components/schemas/UDvText'
        range:
          $ref: '#/components/schemas/DvInterval'
    DvDuration:
      title: DV_DURATION
      type: object
      properties:
        _type:
          enum:
            - DV_DURATION
          type: string
        normal_status:
          $ref: '#/components/schemas/CodePhrase'
        normal_range:
          $ref: '#/components/schemas/DvInterval'
        other_reference_ranges:
          type: array
          items:
            $ref: '#/components/schemas/ReferenceRange'
        magnitude_status:
          type: string
          default: '='
        accuracy_is_percent:
          type: boolean
        accuracy:
          type: number
    DvDateTime:
      title: DV_DATE_TIME
      required:
        - value
      type: object
      properties:
        _type:
          enum:
            - DV_DATE_TIME
          type: string
        normal_status:
          $ref: '#/components/schemas/CodePhrase'
        normal_range:
          $ref: '#/components/schemas/DvInterval'
        other_reference_ranges:
          type: array
          items:
            $ref: '#/components/schemas/ReferenceRange'
        magnitude_status:
          type: string
          default: '='
        accuracy:
          $ref: '#/components/schemas/DvDuration'
        value:
          type: string
          format: date-time
      example:
        _type: DV_DATE_TIME
        value: '2017-08-15T10:37:15.422+02:00'
    UMDvBoolean:
      title: DV_BOOLEAN
      required:
        - value
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_BOOLEAN
          type: string
        value:
          type: boolean
    UMDvCount:
      title: DV_COUNT
      required:
        - magnitude
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_COUNT
          type: string
        normal_status:
          $ref: '#/components/schemas/CodePhrase'
        normal_range:
          $ref: '#/components/schemas/DvInterval'
        other_reference_ranges:
          type: array
          items:
            $ref: '#/components/schemas/ReferenceRange'
        magnitude_status:
          type: string
          default: '='
        accuracy_is_percent:
          type: boolean
        accuracy:
          type: number
        magnitude:
          type: integer
    UMDvDate:
      title: DV_DATE
      required:
        - value
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_DATE
          type: string
        normal_status:
          $ref: '#/components/schemas/CodePhrase'
        normal_range:
          $ref: '#/components/schemas/DvInterval'
        other_reference_ranges:
          type: array
          items:
            $ref: '#/components/schemas/ReferenceRange'
        magnitude_status:
          type: string
          default: '='
        accuracy:
          $ref: '#/components/schemas/DvDuration'
        value:
          type: string
          format: date
      example:
        _type: DV_DATE
        value: '2017-08-15'
    UMDvDateTime:
      title: DV_DATE_TIME
      required:
        - value
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_DATE_TIME
          type: string
        normal_status:
          $ref: '#/components/schemas/CodePhrase'
        normal_range:
          $ref: '#/components/schemas/DvInterval'
        other_reference_ranges:
          type: array
          items:
            $ref: '#/components/schemas/ReferenceRange'
        magnitude_status:
          type: string
          default: '='
        accuracy:
          $ref: '#/components/schemas/DvDuration'
        value:
          type: string
          format: date-time
      example:
        _type: DV_DATE_TIME
        value: '2017-08-15T10:37:15.422+02:00'
    UMDvDuration:
      title: DV_DURATION
      required:
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_DURATION
          type: string
        normal_status:
          $ref: '#/components/schemas/CodePhrase'
        normal_range:
          $ref: '#/components/schemas/DvInterval'
        other_reference_ranges:
          type: array
          items:
            $ref: '#/components/schemas/ReferenceRange'
        magnitude_status:
          type: string
          default: '='
        accuracy_is_percent:
          type: boolean
        accuracy:
          type: number
    UMDvIdentifier:
      title: DV_IDENTIFIER
      required:
        - id
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_IDENTIFIER
          type: string
        issuer:
          type: string
        assigner:
          type: string
        id:
          type: string
        type:
          type: string
      example:
        id: 16b74749-e6aa-4945-b760-b42bdc07098a
        type: Patient
    UMDvOrdinal:
      title: DV_ORDINAL
      required:
        - symbol
        - value
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_ORDINAL
          type: string
        normal_status:
          $ref: '#/components/schemas/CodePhrase'
        normal_range:
          $ref: '#/components/schemas/DvInterval'
        other_reference_ranges:
          type: array
          items:
            $ref: '#/components/schemas/ReferenceRange'
        symbol:
          $ref: '#/components/schemas/DvCodedText'
        value:
          type: integer
    UMDvProportion:
      title: DV_PROPORTION
      required:
        - numerator
        - denominator
        - semantic_type
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_PROPORTION
          type: string
        normal_status:
          $ref: '#/components/schemas/CodePhrase'
        normal_range:
          $ref: '#/components/schemas/DvInterval'
        other_reference_ranges:
          type: array
          items:
            $ref: '#/components/schemas/ReferenceRange'
        magnitude_status:
          type: string
          default: '='
        accuracy_is_percent:
          type: boolean
        accuracy:
          type: number
        numerator:
          type: number
        denominator:
          type: number
        semantic_type:
          type: integer
        precision:
          type: integer
    UMDvQuantity:
      title: DV_QUANTITY
      required:
        - magnitude
        - units
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_QUANTITY
          type: string
        normal_status:
          $ref: '#/components/schemas/CodePhrase'
        normal_range:
          $ref: '#/components/schemas/DvInterval'
        other_reference_ranges:
          type: array
          items:
            $ref: '#/components/schemas/ReferenceRange'
        magnitude_status:
          type: string
          default: '='
        accuracy_is_percent:
          type: boolean
        accuracy:
          type: number
        magnitude:
          type: number
        precision:
          type: integer
        units:
          type: string
        units_system:
          type: string
        units_display_name:
          type: string
    UMDvScale:
      title: DV_SCALE
      required:
        - symbol
        - value
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_SCALE
          type: string
        normal_status:
          $ref: '#/components/schemas/CodePhrase'
        normal_range:
          $ref: '#/components/schemas/DvInterval'
        other_reference_ranges:
          type: array
          items:
            $ref: '#/components/schemas/ReferenceRange'
        symbol:
          $ref: '#/components/schemas/DvCodedText'
        value:
          type: number
    UMDvState:
      title: DV_STATE
      required:
        - value
        - is_terminal
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_STATE
          type: string
        value:
          $ref: '#/components/schemas/DvCodedText'
        is_terminal:
          type: boolean
    UMDvTime:
      title: DV_TIME
      required:
        - value
        - _type
      type: object
      properties:
        _type:
          enum:
            - DV_TIME
          type: string
        normal_status:
          $ref: '#/components/schemas/CodePhrase'
        normal_range:
          $ref: '#/components/schemas/DvInterval'
        other_reference_ranges:
          type: array
          items:
            $ref: '#/components/schemas/ReferenceRange'
        magnitude_status:
          type: string
          default: '='
        accuracy:
          $ref: '#/components/schemas/DvDuration'
        value:
          type: string
          format: time
      example:
        _type: DV_TIME
        value: '08:20:12'
    UDataValue:
      title: DATA_VALUE
      type: object
      oneOf:
        - $ref: '#/components/schemas/UMDvBoolean'
        - $ref: '#/components/schemas/UMDvCodedText'
        - $ref: '#/components/schemas/UMDvCount'
        - $ref: '#/components/schemas/UMDvDate'
        - $ref: '#/components/schemas/UMDvDateTime'
        - $ref: '#/components/schemas/UMDvDuration'
        - $ref: '#/components/schemas/UMDvEhrUri'
        - $ref: '#/components/schemas/UMDvIdentifier'
        - $ref: '#/components/schemas/UMDvMultimedia'
        - $ref: '#/components/schemas/UMDvOrdinal'
        - $ref: '#/components/schemas/UMDvParsable'
        - $ref: '#/components/schemas/UMDvProportion'
        - $ref: '#/components/schemas/UMDvQuantity'
        - $ref: '#/components/schemas/UMDvScale'
        - $ref: '#/components/schemas/UMDvState'
        - $ref: '#/components/schemas/UMDvText'
        - $ref: '#/components/schemas/UMDvUri'
      discriminator:
        propertyName: _type
        mapping:
          DV_BOOLEAN: '#/components/schemas/UMDvBoolean'
          DV_CODED_TEXT: '#/components/schemas/UMDvCodedText'
          DV_COUNT: '#/components/schemas/UMDvCount'
          DV_DATE: '#/components/schemas/UMDvDate'
          DV_DATE_TIME: '#/components/schemas/UMDvDateTime'
          DV_DURATION: '#/components/schemas/UMDvDuration'
          DV_EHR_URI: '#/components/schemas/UMDvEhrUri'
          DV_IDENTIFIER: '#/components/schemas/UMDvIdentifier'
          DV_MULTIMEDIA: '#/components/schemas/UMDvMultimedia'
          DV_ORDINAL: '#/components/schemas/UMDvOrdinal'
          DV_PARSABLE: '#/components/schemas/UMDvParsable'
          DV_PROPORTION: '#/components/schemas/UMDvProportion'
          DV_QUANTITY: '#/components/schemas/UMDvQuantity'
          DV_SCALE: '#/components/schemas/UMDvScale'
          DV_STATE: '#/components/schemas/UMDvState'
          DV_TEXT: '#/components/schemas/UMDvText'
          DV_TIME: '#/components/schemas/UMDvTime'
          DV_URI: '#/components/schemas/UMDvUri'
    Element:
      title: ELEMENT
      type: object
      properties:
        _type:
          enum:
            - ELEMENT
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        null_flavour:
          $ref: '#/components/schemas/DvCodedText'
        value:
          $ref: '#/components/schemas/UDataValue'
        null_reason:
          $ref: '#/components/schemas/UDvText'
      required:
        - name
        - archetype_node_id
    ItemSingle:
      title: ITEM_SINGLE
      required:
        - name
        - archetype_node_id
        - item
      type: object
      properties:
        _type:
          enum:
            - ITEM_SINGLE
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        item:
          $ref: '#/components/schemas/Element'
    ItemList:
      title: ITEM_LIST
      type: object
      properties:
        _type:
          enum:
            - ITEM_LIST
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        items:
          type: array
          items:
            $ref: '#/components/schemas/Element'
      required:
        - name
        - archetype_node_id
    Clstr:
      title: CLUSTER
      required:
        - name
        - archetype_node_id
        - items
      type: object
      properties:
        _type:
          enum:
            - CLUSTER
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        items:
          type: array
          items:
            $ref: '#/components/schemas/UItem'
    UItem:
      title: ITEM
      type: object
      oneOf:
        - $ref: '#/components/schemas/Element'
        - $ref: '#/components/schemas/Clstr'
      discriminator:
        propertyName: _type
        mapping:
          ELEMENT: '#/components/schemas/Element'
          CLUSTER: '#/components/schemas/Clstr'
    ItemTable:
      title: ITEM_TABLE
      type: object
      properties:
        _type:
          enum:
            - ITEM_TABLE
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        items:
          type: array
          items:
            $ref: '#/components/schemas/Clstr'
      required:
        - name
        - archetype_node_id
    ItemTree:
      title: ITEM_TREE
      type: object
      properties:
        _type:
          enum:
            - ITEM_TREE
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        items:
          type: array
          items:
            $ref: '#/components/schemas/UItem'
          description: See [ITEM](#tag/ITEM_schema) schema details.
      required:
        - name
        - archetype_node_id
    UItemStructure:
      title: ITEM_STRUCTURE
      type: object
      oneOf:
        - $ref: '#/components/schemas/ItemSingle'
        - $ref: '#/components/schemas/ItemList'
        - $ref: '#/components/schemas/ItemTable'
        - $ref: '#/components/schemas/ItemTree'
      discriminator:
        propertyName: _type
        mapping:
          ITEM_SINGLE: '#/components/schemas/ItemSingle'
          ITEM_LIST: '#/components/schemas/ItemList'
          ITEM_TABLE: '#/components/schemas/ItemTable'
          ITEM_TREE: '#/components/schemas/ItemTree'
    FeederAuditDetails:
      title: FEEDER_AUDIT_DETAILS
      required:
        - system_id
      type: object
      properties:
        system_id:
          type: string
        location:
          $ref: '#/components/schemas/UPartyIdentified'
        subject:
          $ref: '#/components/schemas/UPartyProxy'
        provider:
          $ref: '#/components/schemas/UPartyIdentified'
        time:
          $ref: '#/components/schemas/DvDateTime'
        version_id:
          type: string
        other_details:
          $ref: '#/components/schemas/UItemStructure'
    FeederAudit:
      title: FEEDER_AUDIT
      required:
        - originating_system_audit
      type: object
      properties:
        originating_system_item_ids:
          type: array
          items:
            $ref: '#/components/schemas/DvIdentifier'
        feeder_system_item_ids:
          type: array
          items:
            $ref: '#/components/schemas/DvIdentifier'
        original_content:
          $ref: '#/components/schemas/UDvEncapsulated'
        originating_system_audit:
          $ref: '#/components/schemas/FeederAuditDetails'
        feeder_system_audit:
          $ref: '#/components/schemas/FeederAuditDetails'
    PartyIdentity:
      title: PARTY_IDENTITY
      required:
        - name
        - archetype_node_id
        - details
      type: object
      properties:
        _type:
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        details:
          $ref: '#/components/schemas/UItemStructure'
    ListOfPartyIdentity:
      title: ListOfPartyIdentity
      type: array
      items:
        $ref: '#/components/schemas/PartyIdentity'
    Address:
      title: ADDRESS
      required:
        - name
        - archetype_node_id
        - details
      type: object
      properties:
        _type:
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        details:
          $ref: '#/components/schemas/UItemStructure'
    DvIntervalOfDate:
      title: DV_INTERVAL_of_DATE
      type: object
      properties:
        _type:
          type: string
          default: DV_INTERVAL
        lower_unbounded:
          type: boolean
        upper_unbounded:
          type: boolean
        lower_included:
          type: boolean
        upper_included:
          type: boolean
        lower:
          $ref: '#/components/schemas/UMDvDate'
        upper:
          $ref: '#/components/schemas/UMDvDate'
      required:
        - lower_unbounded
        - upper_unbounded
        - lower_included
        - upper_included
    Contact:
      title: CONTACT
      required:
        - name
        - archetype_node_id
        - addresses
      type: object
      properties:
        _type:
          enum:
            - CONTACT
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        addresses:
          type: array
          items:
            $ref: '#/components/schemas/Address'
        time_validity:
          $ref: '#/components/schemas/DvIntervalOfDate'
    ListOfContact:
      title: ListOfContact
      type: array
      items:
        $ref: '#/components/schemas/Contact'
    PartyRelationship:
      title: PARTY_RELATIONSHIP
      required:
        - name
        - archetype_node_id
        - source
        - target
      type: object
      properties:
        _type:
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        source:
          $ref: '#/components/schemas/PartyRef'
        target:
          $ref: '#/components/schemas/PartyRef'
        details:
          $ref: '#/components/schemas/UItemStructure'
        time_validity:
          $ref: '#/components/schemas/DvIntervalOfDate'
    ListOfPartyRelationship:
      title: ListOfPartyRelationShip
      type: array
      items:
        $ref: '#/components/schemas/PartyRelationship'
    Agent:
      title: AGENT
      type: object
      properties:
        _type:
          enum:
            - AGENT
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        identities:
          $ref: '#/components/schemas/ListOfPartyIdentity'
        contacts:
          $ref: '#/components/schemas/ListOfContact'
        details:
          $ref: '#/components/schemas/UItemStructure'
        relationships:
          $ref: '#/components/schemas/ListOfPartyRelationship'
        languages:
          type: array
          items:
            $ref: '#/components/schemas/UDvText'
        roles:
          type: array
          items:
            $ref: '#/components/schemas/PartyRef'
      required:
        - name
        - archetype_node_id
        - identities
    Error:
      title: Error
      required:
        - message
        - validationErrors
      type: object
      properties:
        message:
          type: string
        validationErrors:
          type: array
          items:
            type: string
          description: ''
      example:
        message: Error message
        validationErrors:
          - error1
          - error2
    Group:
      title: GROUP
      type: object
      properties:
        _type:
          enum:
            - GROUP
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        identities:
          $ref: '#/components/schemas/ListOfPartyIdentity'
        contacts:
          $ref: '#/components/schemas/ListOfContact'
        details:
          $ref: '#/components/schemas/UItemStructure'
        relationships:
          $ref: '#/components/schemas/ListOfPartyRelationship'
        languages:
          type: array
          items:
            $ref: '#/components/schemas/UDvText'
        roles:
          type: array
          items:
            $ref: '#/components/schemas/PartyRef'
      required:
        - name
        - archetype_node_id
        - identities
    Organisation:
      title: ORGANISATION
      type: object
      properties:
        _type:
          enum:
            - ORGANISATION
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        identities:
          $ref: '#/components/schemas/ListOfPartyIdentity'
        contacts:
          $ref: '#/components/schemas/ListOfContact'
        details:
          $ref: '#/components/schemas/UItemStructure'
        relationships:
          $ref: '#/components/schemas/ListOfPartyRelationship'
        languages:
          type: array
          items:
            $ref: '#/components/schemas/UDvText'
        roles:
          type: array
          items:
            $ref: '#/components/schemas/PartyRef'
      required:
        - name
        - archetype_node_id
        - identities
    Person:
      title: PERSON
      type: object
      properties:
        _type:
          enum:
            - PERSON
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        identities:
          $ref: '#/components/schemas/ListOfPartyIdentity'
        contacts:
          $ref: '#/components/schemas/ListOfContact'
        details:
          $ref: '#/components/schemas/UItemStructure'
        relationships:
          $ref: '#/components/schemas/ListOfPartyRelationship'
        languages:
          type: array
          items:
            $ref: '#/components/schemas/UDvText'
        roles:
          type: array
          items:
            $ref: '#/components/schemas/PartyRef'
      required:
        - name
        - archetype_node_id
        - identities
    Capability:
      title: CAPABILITY
      required:
        - name
        - archetype_node_id
        - credentials
      type: object
      properties:
        _type:
          enum:
            - CAPABILITY
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        credentials:
          $ref: '#/components/schemas/UItemStructure'
        time_validity:
          $ref: '#/components/schemas/DvIntervalOfDate'
    ListOfCapability:
      title: ListOfCapability
      type: array
      items:
        $ref: '#/components/schemas/Capability'
    Role:
      title: ROLE
      required:
        - name
        - archetype_node_id
        - identities
        - performer
      type: object
      properties:
        _type:
          enum:
            - ROLE
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        identities:
          $ref: '#/components/schemas/ListOfPartyIdentity'
        contacts:
          $ref: '#/components/schemas/ListOfContact'
        details:
          $ref: '#/components/schemas/UItemStructure'
        relationships:
          $ref: '#/components/schemas/ListOfPartyRelationship'
        time_validity:
          $ref: '#/components/schemas/DvIntervalOfDate'
        performer:
          $ref: '#/components/schemas/PartyRef'
        capabilities:
          $ref: '#/components/schemas/ListOfCapability'
    ObjectRefOfHierObjectId:
      title: OBJECT_REF
      type: object
      properties:
        namespace:
          type: string
        type:
          type: string
        id:
          $ref: '#/components/schemas/UMHierObjectId'
      example:
        id:
          _type: HIER_OBJECT_ID
          value: 6cb19121-4307-4648-9da0-d62e4d51f19b
        namespace: local
        type: CONTRIBUTION
      required:
        - namespace
        - type
        - id
    VersionedParty:
      title: VERSIONED_PARTY
      type: object
      properties:
        _type:
          enum:
            - VERSIONED_PARTY
          type: string
        uid:
          $ref: '#/components/schemas/HierObjectId'
        owner_id:
          $ref: '#/components/schemas/ObjectRefOfHierObjectId'
        time_created:
          $ref: '#/components/schemas/DvDateTime'
      description: A VERSIONED_PARTY resource
      example:
        uid:
          value: 8849182c-82ad-4088-a07f-48ead4180515
        owner_id:
          id:
            _type: HIER_OBJECT_ID
            value: 7d44b88c-4199-4bad-97dc-d78268e01398
          namespace: local
          type: SYSTEM
        time_created:
          value: '2015-01-20T19:30:22.765+01:00'
      required:
        - uid
        - owner_id
        - time_created
    AuditDetails:
      title: AUDIT_DETAILS
      required:
        - system_id
        - time_committed
        - change_type
        - committer
      type: object
      properties:
        _type:
          type: string
          default: AUDIT_DETAILS
        system_id:
          type: string
        time_committed:
          $ref: '#/components/schemas/DvDateTime'
        change_type:
          $ref: '#/components/schemas/DvCodedText'
        description:
          $ref: '#/components/schemas/UDvText'
        committer:
          $ref: '#/components/schemas/UPartyProxy'
      description: The set of attributes required to document the committal of an information item to a repository.
      example:
        system_id: 9624982A-9F42-41A5-9318-AE13D5F5031F
        committer:
          _type: PARTY_IDENTIFIED
          name: A user name
        time_committed:
          value: '2017-08-15T10:37:15.422+02:00'
        change_type:
          value: creation
          defining_code:
            terminology_id:
              value: openehr
            code_string: '249'
        description:
          value: Description text
    RevisionHistoryItem:
      title: REVISION_HISTORY_ITEM
      required:
        - version_id
        - audits
      type: object
      properties:
        version_id:
          $ref: '#/components/schemas/ObjectVersionId'
        audits:
          type: array
          items:
            $ref: '#/components/schemas/AuditDetails'
      description: A REVISION_HISTORY_ITEM resource
      example:
        version_id:
          value: 8849182c-82ad-4088-a07f-48ead4180515::openEHRSys.example.com::1
        audits:
          - system_id: d60e2348-b083-48ce-93b9-916cef1d3a5a
            time_committed:
              value: '2015-01-20T19:30:22.765+01:00'
            change_type:
              value: creation
              defining_code:
                terminology_id:
                  value: openehr
                code_string: '249'
            description:
              value: An optional description string
            committer:
              _type: PARTY_IDENTIFIED
              name: A user name
    RevisionHistory:
      title: REVISION_HISTORY
      required:
        - items
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/RevisionHistoryItem'
      description: A REVISION_HISTORY resource
    UMAgent:
      title: AGENT
      required:
        - name
        - archetype_node_id
        - identities
        - _type
      type: object
      properties:
        _type:
          enum:
            - AGENT
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        identities:
          $ref: '#/components/schemas/ListOfPartyIdentity'
        contacts:
          $ref: '#/components/schemas/ListOfContact'
        details:
          $ref: '#/components/schemas/UItemStructure'
        relationships:
          $ref: '#/components/schemas/ListOfPartyRelationship'
        languages:
          type: array
          items:
            $ref: '#/components/schemas/UDvText'
        roles:
          type: array
          items:
            $ref: '#/components/schemas/PartyRef'
    UMGroup:
      title: GROUP
      required:
        - name
        - archetype_node_id
        - identities
        - _type
      type: object
      properties:
        _type:
          enum:
            - GROUP
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        identities:
          $ref: '#/components/schemas/ListOfPartyIdentity'
        contacts:
          $ref: '#/components/schemas/ListOfContact'
        details:
          $ref: '#/components/schemas/UItemStructure'
        relationships:
          $ref: '#/components/schemas/ListOfPartyRelationship'
        languages:
          type: array
          items:
            $ref: '#/components/schemas/UDvText'
        roles:
          type: array
          items:
            $ref: '#/components/schemas/PartyRef'
    UMOrganisation:
      title: ORGANISATION
      required:
        - name
        - archetype_node_id
        - identities
        - _type
      type: object
      properties:
        _type:
          enum:
            - ORGANISATION
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        identities:
          $ref: '#/components/schemas/ListOfPartyIdentity'
        contacts:
          $ref: '#/components/schemas/ListOfContact'
        details:
          $ref: '#/components/schemas/UItemStructure'
        relationships:
          $ref: '#/components/schemas/ListOfPartyRelationship'
        languages:
          type: array
          items:
            $ref: '#/components/schemas/UDvText'
        roles:
          type: array
          items:
            $ref: '#/components/schemas/PartyRef'
    UMPerson:
      title: PERSON
      required:
        - name
        - archetype_node_id
        - identities
        - _type
      type: object
      properties:
        _type:
          enum:
            - PERSON
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        identities:
          $ref: '#/components/schemas/ListOfPartyIdentity'
        contacts:
          $ref: '#/components/schemas/ListOfContact'
        details:
          $ref: '#/components/schemas/UItemStructure'
        relationships:
          $ref: '#/components/schemas/ListOfPartyRelationship'
        languages:
          type: array
          items:
            $ref: '#/components/schemas/UDvText'
        roles:
          type: array
          items:
            $ref: '#/components/schemas/PartyRef'
    UMRole:
      title: ROLE
      required:
        - name
        - archetype_node_id
        - identities
        - performer
        - _type
      type: object
      properties:
        _type:
          enum:
            - ROLE
          type: string
        name:
          $ref: '#/components/schemas/UDvText'
        archetype_node_id:
          type: string
          xml:
            attribute: true
        uid:
          $ref: '#/components/schemas/UUidBasedId'
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        archetype_details:
          $ref: '#/components/schemas/Archetyped'
        feeder_audit:
          $ref: '#/components/schemas/FeederAudit'
        identities:
          $ref: '#/components/schemas/ListOfPartyIdentity'
        contacts:
          $ref: '#/components/schemas/ListOfContact'
        details:
          $ref: '#/components/schemas/UItemStructure'
        relationships:
          $ref: '#/components/schemas/ListOfPartyRelationship'
        time_validity:
          $ref: '#/components/schemas/DvIntervalOfDate'
        performer:
          $ref: '#/components/schemas/PartyRef'
        capabilities:
          $ref: '#/components/schemas/ListOfCapability'
    UVersionable:
      title: Versionable
      type: object
      oneOf:
        - $ref: '#/components/schemas/UMAgent'
        - $ref: '#/components/schemas/UMGroup'
        - $ref: '#/components/schemas/UMOrganisation'
        - $ref: '#/components/schemas/UMPerson'
        - $ref: '#/components/schemas/UMRole'
      discriminator:
        propertyName: _type
        mapping:
          AGENT: '#/components/schemas/UMAgent'
          GROUP: '#/components/schemas/UMGroup'
          ORGANISATION: '#/components/schemas/UMOrganisation'
          PERSON: '#/components/schemas/UMPerson'
          ROLE: '#/components/schemas/UMRole'
    Attestation:
      title: ATTESTATION
      required:
        - system_id
        - time_committed
        - change_type
        - committer
        - reason
        - is_pending
      type: object
      properties:
        _type:
          enum:
            - ATTESTATION
          type: string
        system_id:
          type: string
        time_committed:
          $ref: '#/components/schemas/DvDateTime'
        change_type:
          $ref: '#/components/schemas/DvCodedText'
        description:
          $ref: '#/components/schemas/UDvText'
        committer:
          $ref: '#/components/schemas/UPartyProxy'
        attested_view:
          $ref: '#/components/schemas/DvMultimedia'
        proof:
          type: string
        items:
          type: array
          items:
            $ref: '#/components/schemas/DvEhrUri'
        reason:
          $ref: '#/components/schemas/UDvText'
        is_pending:
          type: boolean
      example:
        system_id: 9624982A-9F42-41A5-9318-AE13D5F5031F
        committer:
          _type: PARTY_IDENTIFIED
          name: A user name
        time_committed:
          value: '2017-08-15T10:37:15.422+02:00'
        change_type:
          value: creation
          defining_code:
            terminology_id:
              value: openehr
            code_string: '249'
        description:
          value: Description text
    UParty:
      title: PARTY
      type: object
      oneOf:
        - $ref: '#/components/schemas/UMAgent'
        - $ref: '#/components/schemas/UMGroup'
        - $ref: '#/components/schemas/UMOrganisation'
        - $ref: '#/components/schemas/UMPerson'
        - $ref: '#/components/schemas/UMRole'
      discriminator:
        propertyName: _type
        mapping:
          AGENT: '#/components/schemas/UMAgent'
          GROUP: '#/components/schemas/UMGroup'
          ORGANISATION: '#/components/schemas/UMOrganisation'
          PERSON: '#/components/schemas/UMPerson'
          ROLE: '#/components/schemas/UMRole'
    UMOriginalVersionOfParty:
      title: ORIGINAL_VERSION
      required:
        - contribution
        - commit_audit
        - data
        - uid
        - lifecycle_state
        - _type
      type: object
      properties:
        _type:
          enum:
            - ORIGINAL_VERSION
          type: string
        contribution:
          $ref: '#/components/schemas/ObjectRefOfHierObjectId'
        signature:
          type: string
        commit_audit:
          $ref: '#/components/schemas/AuditDetails'
        data:
          $ref: '#/components/schemas/UParty'
        uid:
          $ref: '#/components/schemas/ObjectVersionId'
        preceding_version_uid:
          $ref: '#/components/schemas/ObjectVersionId'
        other_input_version_uids:
          type: array
          items:
            $ref: '#/components/schemas/ObjectVersionId'
        lifecycle_state:
          $ref: '#/components/schemas/DvCodedText'
        attestations:
          type: array
          items:
            $ref: '#/components/schemas/Attestation'
    UMImportedVersionOfParty:
      title: IMPORTED_VERSION
      required:
        - contribution
        - commit_audit
        - data
        - item
        - _type
      type: object
      properties:
        _type:
          enum:
            - IMPORTED_VERSION
          type: string
        contribution:
          $ref: '#/components/schemas/ObjectRefOfHierObjectId'
        signature:
          type: string
        commit_audit:
          $ref: '#/components/schemas/AuditDetails'
        data:
          $ref: '#/components/schemas/UParty'
        item:
          $ref: '#/components/schemas/UMOriginalVersionOfParty'
    UVersionOfParty:
      title: VERSION
      type: object
      oneOf:
        - $ref: '#/components/schemas/UMOriginalVersionOfParty'
        - $ref: '#/components/schemas/UMImportedVersionOfParty'
      discriminator:
        propertyName: _type
        mapping:
          ORIGINAL_VERSION: '#/components/schemas/UMOriginalVersionOfParty'
          IMPORTED_VERSION: '#/components/schemas/UMImportedVersionOfParty'
    TerminologyCode:
      title: TERMINOLOGY_CODE
      required:
        - terminology_id
        - code_string
      type: object
      properties:
        terminology_id:
          type: string
        terminology_version:
          type: string
        code_string:
          type: string
        uri:
          type: string
          format: uri
      example:
        terminology_id: snomed_ct
        code_string: '308335008'
    UpdateAudit:
      title: UPDATE_AUDIT
      required:
        - change_type
        - committer
      type: object
      properties:
        _type:
          type: string
          default: UPDATE_AUDIT
        change_type:
          $ref: '#/components/schemas/TerminologyCode'
        description:
          $ref: '#/components/schemas/UDvText'
        committer:
          $ref: '#/components/schemas/UPartyProxy'
      description: The set of attributes required to document the committal of an information item to a repository. Used by the server to create an AUDIT_DETAILS object.
      example:
        change_type:
          value: creation
          defining_code:
            terminology_id: openehr
            code_string: '249'
        description: Description text
        committer:
          _type: PARTY_IDENTIFIED
          name: A user name
    UpdateAttestation:
      title: UPDATE_ATTESTATION
      required:
        - change_type
        - committer
        - reason
        - is_pending
      type: object
      properties:
        _type:
          enum:
            - UPDATE_ATTESTATION
          type: string
        change_type:
          $ref: '#/components/schemas/TerminologyCode'
        description:
          $ref: '#/components/schemas/UDvText'
        committer:
          $ref: '#/components/schemas/UPartyProxy'
        attested_view:
          $ref: '#/components/schemas/DvMultimedia'
        proof:
          type: string
        items:
          type: array
          items:
            $ref: '#/components/schemas/DvEhrUri'
        reason:
          $ref: '#/components/schemas/UDvText'
        is_pending:
          type: boolean
      example:
        change_type:
          value: creation
          defining_code:
            terminology_id: openehr
            code_string: '249'
        description: Description text
        committer:
          _type: PARTY_IDENTIFIED
          name: A user name
    UpdateVersion:
      title: UPDATE_VERSION
      required:
        - lifecycle_state
        - data
        - commit_audit
      type: object
      properties:
        preceding_version_uid:
          $ref: '#/components/schemas/ObjectVersionId'
        signature:
          type: string
        lifecycle_state:
          $ref: '#/components/schemas/TerminologyCode'
        attestations:
          type: array
          items:
            $ref: '#/components/schemas/UpdateAttestation'
        data:
          $ref: '#/components/schemas/UVersionable'
        commit_audit:
          $ref: '#/components/schemas/UpdateAudit'
    NewContribution:
      title: NewContribution
      required:
        - versions
        - audit
      type: object
      properties:
        uid:
          $ref: '#/components/schemas/HierObjectId'
        versions:
          type: array
          items:
            $ref: '#/components/schemas/UpdateVersion'
        audit:
          $ref: '#/components/schemas/UpdateAudit'
      description: A new (un-committed) CONTRIBUTION resource for Demographic
    ObjectRefOfObjectVersionId:
      title: OBJECT_REF
      type: object
      properties:
        namespace:
          type: string
        type:
          type: string
        id:
          $ref: '#/components/schemas/UMObjectVersionId'
      example:
        id:
          _type: OBJECT_VERSION_ID
          value: fb458d9c-1323-42bc-b7f8-787f3660a0b5::openEHRSys.example.com::1
        namespace: local
        type: COMPOSITION
      required:
        - namespace
        - type
        - id
    Contribution:
      title: CONTRIBUTION
      required:
        - uid
        - versions
        - audit
      type: object
      properties:
        uid:
          $ref: '#/components/schemas/HierObjectId'
        versions:
          type: array
          items:
            $ref: '#/components/schemas/ObjectRefOfObjectVersionId'
        audit:
          $ref: '#/components/schemas/AuditDetails'
      description: A CONTRIBUTION resource
      example:
        uid:
          value: 0826851c-c4c2-4d61-92b9-410fb8275ff0
        versions:
          - _type: OBJECT_REF
            id:
              _type: OBJECT_VERSION_ID
              value: fb458d9c-1323-42bc-b7f8-787f3660a0b5::openEHRSys.example.com::1
            namespace: local
            type: COMPOSITION
          - _type: OBJECT_REF
            id:
              _type: OBJECT_VERSION_ID
              value: abcdefgh-1323-42bc-b7f8-787f3660a0ba::openEHRSys.example.com::1
            namespace: local
            type: FOLDER
        audit:
          system_id: 9624982A-9F42-41A5-9318-AE13D5F5031F
          committer:
            _type: PARTY_IDENTIFIED
            name: A user name
          time_committed:
            value: '2017-08-15T10:37:15.422+02:00'
          change_type:
            value: creation
            defining_code:
              terminology_id:
                value: openehr
              code_string: '249'
          description:
            value: Description text
  parameters:
    Prefer:
      name: Prefer
      in: header
      description: |
        Request header to indicate the preference over response details.
        The response will contain the entire resource when the `Prefer` header has a value of `return=representation`.
      required: false
      style: simple
      schema:
        type: string
        enum:
          - return=representation
          - return=minimal
        default: return=minimal
    uid_based_id:
      name: uid_based_id
      in: path
      description: |
        An abstract identifier: it can take a form of an OBJECT_VERSION_ID identifier taken from VERSION.uid.value (i.e. a `version_uid`), or a form of a HIER_OBJECT_ID identifier taken from VERSIONED_OBJECT.uid.value (i.e. a `versioned_object_uid`).
      required: true
      style: simple
      schema:
        type: string
        example: 8849182c-82ad-4088-a07f-48ead4180515::openEHRSys.example.com::1
    version_at_time:
      name: version_at_time
      in: query
      description: |
        A given time in the extended ISO 8601 format.
      style: form
      explode: true
      schema:
        type: string
        example: '2015-01-20T19:30:22.765+01:00'
    uid_based_id_as_versioned_object_uid:
      name: uid_based_id
      in: path
      description: |
        An identifier in a form of a HIER_OBJECT_ID identifier taken from VERSIONED_OBJECT.uid.value (i.e. a `versioned_object_uid`).
      required: true
      style: simple
      schema:
        type: string
        example: 8849182c-82ad-4088-a07f-48ead4180515
    If-Match:
      name: If-Match
      in: header
      description: |
        Header to make the request conditional. 
        Together with `ETag` request tag, it helps to prevent simultaneous updates of a resource from overwriting each other ("mid-air collisions").
        The format is always an `version_uid` identifier enclosed by double quotes.
        The operation will be performed only if the existing latest `version_uid` of the resource (i.e. the `preceding_version_uid`) matches this header's value.
      required: true
      style: simple
      schema:
        type: string
        example: '"6cb19121-4307-4648-9da0-d62e4d51f19b::openEHRSys.example.com::1"'
    uid_based_id_as_version_uid:
      name: uid_based_id
      in: path
      description: |
        An identifier in a form of an OBJECT_VERSION_ID identifier taken from VERSION.uid.value (i.e. a `version_uid`).
      required: true
      style: simple
      schema:
        type: string
        example: 8849182c-82ad-4088-a07f-48ead4180515::openEHRSys.example.com::1
    versioned_object_uid_PARTY:
      name: versioned_object_uid
      in: path
      description: |
        VERSIONED_PARTY identifier taken from VERSIONED_PARTY.uid.value.
      required: true
      style: simple
      schema:
        type: string
        example: 6cb19121-4307-4648-9da0-d62e4d51f19b
    version_uid:
      name: version_uid
      in: path
      description: |
        VERSION identifier taken from VERSION.uid.value.
      required: true
      style: simple
      schema:
        type: string
        example: 6cb19121-4307-4648-9da0-d62e4d51f19b::openEHRSys.example.com::2
    contribution_uid:
      name: contribution_uid
      in: path
      description: |
        The CONTRIBUTION uid.
      required: true
      style: simple
      schema:
        type: string
        example: 0826851c-c4c2-4d61-92b9-410fb8275ff0
  headers:
    ETag:
      description: |
        The `ETag` (i.e. entity tag) response header is an identifier (e.g. a `version_uid` enclosed by double quotes) for a specific version of a resource.
      schema:
        type: string
        example: '"6cb19121-4307-4648-9da0-d62e4d51f19b::openEHRSys.example.com::2"'
    Location_AGENT:
      description: |
        The `Location` response header indicates the URL of the AGENT resource.
      schema:
        type: string
        format: url
        example: https://openEHRSys.example.com/v1/demographic/agent/6cb19121-4307-4648-9da0-d62e4d51f19b::openEHRSys.example.com::2
    Location_GROUP:
      description: |
        The `Location` response header indicates the URL of the GROUP resource.
      schema:
        type: string
        format: url
        example: https://openEHRSys.example.com/v1/demographic/group/6cb19121-4307-4648-9da0-d62e4d51f19b::openEHRSys.example.com::2
    Location_ORGANISATION:
      description: |
        The `Location` response header indicates the URL of the ORGANISATION resource.
      schema:
        type: string
        format: url
        example: https://openEHRSys.example.com/v1/demographic/organisation/6cb19121-4307-4648-9da0-d62e4d51f19b::openEHRSys.example.com::2
    Location_PERSON:
      description: |
        The `Location` response header indicates the URL of the PERSON resource.
      schema:
        type: string
        format: url
        example: https://openEHRSys.example.com/v1/demographic/person/6cb19121-4307-4648-9da0-d62e4d51f19b::openEHRSys.example.com::2
    Location_ROLE:
      description: |
        The `Location` response header indicates the URL of the ROLE resource.
      schema:
        type: string
        format: url
        example: https://openEHRSys.example.com/v1/demographic/role/6cb19121-4307-4648-9da0-d62e4d51f19b::openEHRSys.example.com::2
    ETag_VERSION:
      description: |
        The `ETag` (i.e. entity tag) response header is the VERSION identifier (i.e. the `version_uid`) enclosed by double quotes.
      schema:
        type: string
        example: '"6cb19121-4307-4648-9da0-d62e4d51f19b::openEHRSys.example.com::2"'
    Location_VERSIONED_PARTY_VERSION:
      description: |
        The `Location` response header indicates the URL of the VERSION resource.
      schema:
        type: string
        format: url
        example: https://openEHRSys.example.com/v1/demographic/versioned_party/6cb19121-4307-4648-9da0-d62e4d51f19b/version/6cb19121-4307-4648-9da0-d62e4d51f19b::openEHRSys.example.com::1
    ETag_CONTRIBUTION:
      description: |
        The `ETag` (i.e. entity tag) response header is the `contribution_uid` identifier, enclosed by double quotes.
      schema:
        type: string
        example: '"0826851c-c4c2-4d61-92b9-410fb8275ff0"'
    Location_demographic_CONTRIBUTION:
      description: |
        The `Location` response header indicates the URL of the CONTRIBUTION resource.
      schema:
        type: string
        format: url
        example: https://openEHRSys.example.com/v1/demographic/contribution/0826851c-c4c2-4d61-92b9-410fb8275ff0
  responses:
    '400':
      description: |
        `400 Bad Request` is returned when the request could not be parsed or is invalid (e.g. malformed request URL syntax, missing required header or parameter, or syntactically invalid header, parameter or content). 
        The response body MAY contain error details.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    '404':
      description: |
        `404 Not Found` is returned when either the URL configured doesn't exist at all, or the targeted resource doesn't exist.
    '409':
      description: |
        `409 Conflict` is returned when a resource with same identifier(s) already exists.
    '422':
      description: |
        `422 Unprocessable Entity` is returned when the content type and syntax is correct, could be converted to a resource, but there are semantic validation errors, such as the underlying template is not known or is not validating the supplied resource.
    201_AGENT:
      description: |
        `201 Created` is returned when the AGENT was created. 
        Content body is only returned when `Prefer` header has `return=representation`, otherwise only headers are returned.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_AGENT'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Agent'
    200_AGENT_retrieved:
      description: |
        `200 OK` is returned when the requested AGENT is successfully retrieved.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_AGENT'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Agent'
    204_because_deleted_at_time:
      description: |
        `204 No Content` is returned when the resource identified by the request parameters (at specified `version_at_time`) time has been deleted.
    404_not_found_or_no_version_at_time:
      description: |
        `404 Not Found` is returned when either the URL configured doesn't exist at all, or the targeted resource doesn't exist, or when a VERSION of the resource does not exist at the specified `version_at_time`.
    200_AGENT_updated:
      description: |
        `200 OK` is returned when the AGENT is successfully updated and the updated resource is returned in the body when `Prefer` header value is `return=representation`.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_AGENT'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Agent'
    412_AGENT:
      description: |
        `412 Precondition Failed` is returned when `If-Match` request header doesn't match the latest version on the service side.
        Returns also latest `version_uid` in the `Location` and `ETag` headers.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_AGENT'
    204_AGENT_deleted:
      description: |
        `204 No Content` is returned when AGENT was deleted.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_AGENT'
    400_already_deleted:
      description: |
        `400 Bad Request` is returned when the request could not be parsed or is invalid (e.g. malformed request URL syntax, missing required header or parameter, or syntactically invalid header, parameter or content) or when the resource identified by the request parameters is already deleted.
    409_AGENT_with_uid_based_id:
      description: |
        `409 Conflict` is returned when supplied `uid_based_id` doesn't match the latest version.
        Returns also latest version in the `Location` and `ETag` headers.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_AGENT'
    201_GROUP:
      description: |
        `201 Created` is returned when the GROUP was created. 
        Content body is only returned when `Prefer` header has `return=representation`, otherwise only headers are returned.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_GROUP'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Group'
    200_GROUP_retrieved:
      description: |
        `200 OK` is returned when the requested GROUP is successfully retrieved.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_GROUP'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Group'
    200_GROUP_updated:
      description: |
        `200 OK` is returned when the GROUP is successfully updated and the updated resource is returned in the body when `Prefer` header value is `return=representation`.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_GROUP'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Group'
    412_GROUP:
      description: |
        `412 Precondition Failed` is returned when `If-Match` request header doesn't match the latest version on the service side.
        Returns also latest `version_uid` in the `Location` and `ETag` headers.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_GROUP'
    204_GROUP_deleted:
      description: |
        `204 No Content` is returned when GROUP was deleted.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_GROUP'
    409_GROUP_with_uid_based_id:
      description: |
        `409 Conflict` is returned when supplied `uid_based_id` doesn't match the latest version.
        Returns also latest version in the `Location` and `ETag` headers.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_GROUP'
    201_ORGANISATION:
      description: |
        `201 Created` is returned when the ORGANISATION was created. 
        Content body is only returned when `Prefer` header has `return=representation`, otherwise only headers are returned.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_ORGANISATION'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Organisation'
    200_ORGANISATION_retrieved:
      description: |
        `200 OK` is returned when the requested ORGANISATION is successfully retrieved.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_ORGANISATION'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Organisation'
    200_ORGANISATION_updated:
      description: |
        `200 OK` is returned when the ORGANISATION is successfully updated and the updated resource is returned in the body when `Prefer` header value is `return=representation`.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_ORGANISATION'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Organisation'
    412_ORGANISATION:
      description: |
        `412 Precondition Failed` is returned when `If-Match` request header doesn't match the latest version on the service side.
        Returns also latest `version_uid` in the `Location` and `ETag` headers.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_ORGANISATION'
    204_ORGANISATION_deleted:
      description: |
        `204 No Content` is returned when ORGANISATION was deleted.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_ORGANISATION'
    409_ORGANISATION_with_uid_based_id:
      description: |
        `409 Conflict` is returned when supplied `uid_based_id` doesn't match the latest version.
        Returns also latest version in the `Location` and `ETag` headers.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_ORGANISATION'
    201_PERSON:
      description: |
        `201 Created` is returned when the PERSON was created. 
        Content body is only returned when `Prefer` header has `return=representation`, otherwise only headers are returned.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_PERSON'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Person'
    200_PERSON_retrieved:
      description: |
        `200 OK` is returned when the requested PERSON is successfully retrieved.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_PERSON'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Person'
    200_PERSON_updated:
      description: |
        `200 OK` is returned when the PERSON is successfully updated and the updated resource is returned in the body when `Prefer` header value is `return=representation`.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_PERSON'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Person'
    412_PERSON:
      description: |
        `412 Precondition Failed` is returned when `If-Match` request header doesn't match the latest version on the service side.
        Returns also latest `version_uid` in the `Location` and `ETag` headers.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_PERSON'
    204_PERSON_deleted:
      description: |
        `204 No Content` is returned when PERSON was deleted.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_PERSON'
    409_PERSON_with_uid_based_id:
      description: |
        `409 Conflict` is returned when supplied `uid_based_id` doesn't match the latest version.
        Returns also latest version in the `Location` and `ETag` headers.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_PERSON'
    201_ROLE:
      description: |
        `201 Created` is returned when the ROLE was created. 
        Content body is only returned when `Prefer` header has `return=representation`, otherwise only headers are returned.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_ROLE'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Role'
    200_ROLE_retrieved:
      description: |
        `200 OK` is returned when the requested ROLE is successfully retrieved.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_ROLE'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Role'
    200_ROLE_updated:
      description: |
        `200 OK` is returned when the ROLE is successfully updated and the updated resource is returned in the body when `Prefer` header value is `return=representation`.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_ROLE'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Role'
    412_ROLE:
      description: |
        `412 Precondition Failed` is returned when `If-Match` request header doesn't match the latest version on the service side.
        Returns also latest `version_uid` in the `Location` and `ETag` headers.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_ROLE'
    204_ROLE_deleted:
      description: |
        `204 No Content` is returned when ROLE was deleted.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_ROLE'
    409_ROLE_with_uid_based_id:
      description: |
        `409 Conflict` is returned when supplied `uid_based_id` doesn't match the latest version.
        Returns also latest version in the `Location` and `ETag` headers.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Location:
          $ref: '#/components/headers/Location_ROLE'
    200_VERSIONED_PARTY:
      description: |
        `200 OK` is returned when the requested VERSIONED_PARTY is successfully retrieved.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/VersionedParty'
    200_REVISION_HISTORY:
      description: |
        `200 OK` is returned when the requested REVISION_HISTORY is successfully retrieved.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RevisionHistory'
    200_VERSION_of_PARTY_at_time:
      description: |
        `200 OK` is returned when the requested VERSION is successfully retrieved.
      headers:
        ETag:
          $ref: '#/components/headers/ETag_VERSION'
        Location:
          $ref: '#/components/headers/Location_VERSIONED_PARTY_VERSION'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UVersionOfParty'
    200_VERSION_of_PARTY_by_id:
      description: |
        `200 OK` is returned when the requested VERSION is successfully retrieved.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UVersionOfParty'
    201_demographic_CONTRIBUTION:
      description: |
        `201 Created` is returned when the CONTRIBUTION was created. 
        Content body is only returned when `Prefer` header has `return=representation`, otherwise only headers are returned.
      headers:
        ETag:
          $ref: '#/components/headers/ETag_CONTRIBUTION'
        Location:
          $ref: '#/components/headers/Location_demographic_CONTRIBUTION'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Contribution'
    400_CONTRIBUTION:
      description: |
        `400 Bad Request` is returned when the request could not be parsed or is invalid (e.g. malformed request URL syntax, missing required header or parameter, or syntactically invalid header, parameter or content, or the modification type does not match the operation - i.e. first version of a MODIFICATION).
        The response body MAY contain error details.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    200_CONTRIBUTION:
      description: |
        `200 OK` is returned when the CONTRIBUTION is successfully retrieved.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Contribution'
    404_demographic_CONTRIBUTION:
      description: |
        `404 Not Found` is returned when a CONTRIBUTION with `contribution_uid` does not exist.
x-tagGroups:
  - name: Resource endpoints
    tags:
      - AGENT
      - GROUP
      - ORGANISATION
      - PERSON
      - ROLE
      - VERSIONED_PARTY
      - CONTRIBUTION
  - name: Related schemas
    tags:
      - CAPABILITY_schema
      - CONTACT_schema
      - ITEM_schema
      - ITEM_STRUCTURE_schema
      - PARTY_IDENTITY_schema
      - PARTY_RELATIONSHIP_schema
