Search... (alt + k)

Как добавить расширение простому типу данных

updated

2022-07-23

Задача: определить профиль для ресурса Пациент, добавив для атрибута Пол расширение для кодирования по справочнику ФНСИ.

Как добавлять расширения элементам примитивного типа данных - см.[2.6.2.3 JSON representation of primitive elements](https://build.fhir.org/json.html#primitive)..

Почему NamingSystem, а не CodeSystem - см. Отличие NamingSystem от CodeSystem.

  • в папке docs/systems создаем файл, название которого соответствует пункту "терминологии" соглашения conventions.
  • в файле по шаблону artifacts.codesystems.cs-template заполняем атрибуты. В данном случае кроме своего идентификатора даем ссылку на OID НСИ ЕГИСЗ
  • получаем следующий текст:
{
  "id": "core-ns-nsi-gender",
  "resourceType": "NamingSystem",  
  "status": "active",    
  "kind": "codesystem",
  "name": "CoreNsiGender",
  "description": "НСИ Минздрава Пол пациента",
  "text": {
    "div": "
CodeSystem: НСИ Минздрава Пол пациента, может быть известен под следующими идентификаторами:
    \n
  1. OID: 1.2.643.5.1.13.13.11.1040
  2. \n
  3. [предпочтительно] URI: http://fhir.ru/core/systems/gender
  4. \n
\n
", "status": "generated" }, "uniqueId": [ { "type": "oid", "value": "1.2.643.5.1.13.13.11.1040" }, { "type": "uri", "preferred": true, "value": "http://fhir.ru/core/cs/core-cs-nsi-gender", } ] }

  • 2) Создаём определение набора значений из этого справочника (по шаблону artifacts.valuesets.vs-template):
{
  "resourceType": "ValueSet",
  "id": "core-vs-nsi-gender",
  "name": "CoreVsNsiGender",
  "title": "Core ValueSet Пол пациента",
  "url" : "http://fhir.ru/core/vs/core-vs-nsi-gender",
  "status": "active",
  "compose": {
    "include": [
      {
        "system": "http://fhir.ru/core/systems/nsi-gender",
        "concept": [
          {
            "code": "1",
            "display": "Мужской"
          },
          {
            "code": "2",
            "display": "Женский"
          },
          {
            "code": "3",
            "display": "Неопределенный"
          }
        ]
      }
    ]
  }
}

и соответствующую zen-схему

{ns fhir.ru.core.vs-nsi-gender
 import #{fhir zen.fhir}

 CoreVsNsiGender
 {:zen/tags #{zen.fhir/value-set}
  :zen/desc "Справочник НСИ Минздрава Пол пациента"
  :zen.fhir/version "0.5.8"
  :fhir/code-systems
  #{{:fhir/url "https://nsi.rosminzdrav.ru/#!/refbook/1.2.643.5.1.13.13.11.1040",
     :zen.fhir/content :not-present}},
  :uri "http://fhir.ru/core/vs/core-vs-nsi-gender"
  :version "2.1"
  :zendoc "artifacts.valuesets.core-vs-nsi-gender"}}

  • 3) Создаём определение расширения для кодирования пола пациента по справочнику ФНСИ:
{ns fhir.ru.core.ext-nsi-gender

 import #{fhir zen.fhir fhir.ru.core.vs-nsi-gender/CoreVsNsiGender}

 CoreNsiGender
 {:zen/tags #{zen/schema zen.fhir/structure-schema zen.fhir/extension}
  :zen.fhir/type "Coding"
  :zen.fhir/profileUri "http://fhir.ru/core/sd/core-ex-nsi-gender"
  :type zen/map
  :zen/desc "Кодирование пола по справочнику ФНСИ"
  :zen.fhir/version "0.5.8"
  :confirms #{fhir/Coding}
  :zen.fhir/value-set
  {:symbol fhir.ru.core.vs-nsi-gender/CoreVsNsiGender
   :strength :required}
  :zendoc "artifacts.extensions.ext-nsi-gender"}}
  • и страницу для вывода схемы и дополнительной документации - в папке docs/artifacts/extensions создаем файл с расширением .zd, название которого соответствует пункту "терминологии" соглашения support.conventions
  • выводим схему на странице документации:

НазваниеФлагиКол-воТипОписание
CoreNsiGender
0..1Extension
Кодирование пола по справочнику ФНСИ
Binding: CoreVsNsiGender (required) Справочник НСИ Минздрава Пол пациента
url
0..1uri
http://fhir.ru/core/sd/core-ex-nsi-gender
valueCoding
0..1Coding
Значение из справочника https://nsi.rosminzdrav.ru/#!/refbook/1.2.643.5.1.13.13.11.1040
system
1..1uri
Система
Fixed value: http://fhir.ru/core/systems/nsi-gender
code
1..1code
Код
display
1..1string
Значение для отображения
НазваниеФлагиКол-воТипОписание
CoreNsiGender
0..1Extension
Кодирование пола по справочнику ФНСИ
Binding: CoreVsNsiGender (required) Справочник НСИ Минздрава Пол пациента
id
0..1string
Unique id for inter-element referencing
extension
0..*Extension
valueCoding
0..1Coding
Значение из справочника https://nsi.rosminzdrav.ru/#!/refbook/1.2.643.5.1.13.13.11.1040
system
1..1uri
Система
Fixed value: http://fhir.ru/core/systems/nsi-gender
code
1..1code
Код
display
1..1string
Значение для отображения
url
1..1uri
http://fhir.ru/core/sd/core-ex-nsi-gender
value
0..1
Value of extension
unsignedInt
0..1unsignedInt
Signature
0..1Signature
markdown
0..1markdown
date
0..1date
1
Dosage
0..1Dosage
ContactDetail
0..1ContactDetail
RelatedArtifact
0..1RelatedArtifact
instant
0..1instant
1
UsageContext
0..1UsageContext
time
0..1time
DataRequirement
0..1DataRequirement
base64Binary
0..1base64Binary
Meta
0..1Meta
Distance
0..1Distance
SampledData
0..1SampledData
TriggerDefinition
0..1TriggerDefinition
Identifier
0..1Identifier
string
0..1string
Address
0..1Address
Expression
0..1Expression
dateTime
0..1dateTime
Range
0..1Range
1
integer
0..1integer
Ratio
0..1Ratio
oid
0..1oid
ContactPoint
0..1ContactPoint
Money
0..1Money
decimal
0..1decimal
id
0..1id
Attachment
0..1Attachment
Contributor
0..1Contributor
Period
0..1Period
canonical
0..1canonical
url
0..1url
code
0..1code
HumanName
0..1HumanName
1
positiveInt
0..1positiveInt
ParameterDefinition
0..1ParameterDefinition
Coding
0..1Coding
Timing
0..1Timing
Duration
0..1Duration
uri
0..1uri
CodeableConcept
0..1CodeableConcept
uuid
0..1uuid
Count
0..1Count
Quantity
0..1Quantity
boolean
0..1boolean
Annotation
0..1Annotation
1
Age
0..1Age
Reference
0..1Reference()
  • Схема валидна

  • 4) Создаём профиль для ресурса Пациент с добавленным расширением для кодирования пола пациента по справочнику ФНСИ:
{ns fhir.ru.core.tutorial-patient

 import #{fhir
          zen.fhir
          fhir.ru.core.ext-nsi-gender}

 TutorialPatient
 {:zen/tags #{zen.fhir/profile-schema zen/schema}
  :zen/desc "Пациент"
  :zen.fhir/version "0.5.8"
  :confirms #{fhir/Patient}
  :zen.fhir/id "tutorial-patient"
  :zen.fhir/name "TutorialPatient"
  :zen.fhir/type "Patient"
  :zen.fhir/profileUri "http://fhir.ru/core/sd/tutorial-patient"
  :type zen/map
  :keys {:_gender {:zen/desc "Пол пациента по справочнику НСИ"
                   :type zen/map
                   :confirms #{fhir/Element}
                   :keys {:nsiGender {:confirms #{fhir.ru.core.ext-nsi-gender/CoreNsiGender}
                                      :type zen/map
                                      :zen/desc "Расширение: Пол пациента по справочнику НСИ, vs:http://fhir.ru/core/vs/core-vs-nsi-gender"
                                      :fhir/extensionUri "http://fhir.ru/core/sd/core-ex-nsi-gender"}}}}}}

результат - https://docs.miramedix.ru/fhir/IG/StructureDefinition-fhir-ru-patient-gender.html

  • 5) Создаём пример ресурса, соответствующего данному профилю:

{
  "name": [
    {
      "use": "official",
      "given": [
        "BARBARA",
        "A"
      ],
      "family": "KENNEDY"
    }
  ],
  "gender": "female",
  "_gender": {
    "nsiGender": {
      "system": "http://fhir.ru/core/systems/nsi-gender",
      "code": "2",
      "display": "Женский"
    }
  },
  "birthDate": "1961-03-03",
  "address": [
    {
      "city": "Москва",
      "line": [
        "Арбат"
      ],
      "state": "MO",
      "country": "РФ",
      "postalCode": "64083"
    }
  ]
}
name:
  - use: official
    given:
      - BARBARA
      - A
    family: KENNEDY
gender: female
_gender:
  nsiGender:
    system: "http://fhir.ru/core/systems/nsi-gender"
    code: "2"
    display: Женский
birthDate: "1961-03-03"
address:
  - city: Москва
    line:
      - Арбат
    state: MO
    country: РФ
    postalCode: "64083"

результат - https://docs.miramedix.ru/fhir/IG/Patient-fhir-ru-patient-instance-konstantinopolskaya-gender.html

  • 6) Проверяем пример ресурса на соответстветствие данному профилю (валидация на табе Validate):

НазваниеФлагиКол-воТипОписание
TutorialPatient
0..*Patient
Пример профиля Пациент
_gender
0..1Element
Пол пациента по справочнику НСИ
nsiGender
0..1Extension
Расширение: Пол пациента по справочнику НСИ, vs:http://fhir.ru/core/vs/core-vs-nsi-gender
НазваниеФлагиКол-воТипОписание
TutorialPatient
0..*Patient
Пример профиля Пациент
resourceType
0..1string
id
SU0..1string
Logical id of this artifact
meta
SU0..1Meta
Metadata about the resource
text
0..1Narrative
Text summary of the resource, for human interpretation
contained
0..*Resource
extension
0..*Extension
implicitRules
SU?!0..1uri
A set of rules under which this content was created
modifierExtension
0..*Extension
language
0..1code
Language of the resource content
Binding: languages (preferred) This value set includes common codes from BCP-47 (http://tools.ietf.org/html/bcp47)
address
0..*Address
managingOrganization
SU0..1Reference(Organization)
Organization that is the custodian of the patient record
name
0..*HumanName
birthDate
SU0..1date
The date of birth for the individual
multipleBirth
0..1
Whether patient is part of a multiple birth
boolean
0..1boolean
1
integer
0..1integer
deceased
SU?!0..1
Indicates if the individual is deceased or not
boolean
0..1boolean
dateTime
0..1dateTime
photo
0..*Attachment
link
0..*BackboneElement
other
SU1..1Reference(Patient | RelatedPerson)
The other patient or related person resource that the link refers to
type
SU1..1code
replaced-by | replaces | refer | seealso
Binding: link-type (required) The type of link between this patient resource and another patient resource.
active
SU?!0..1boolean
Whether this patient's record is in active use
communication
0..*BackboneElement
language
1..1CodeableConcept
The language which can be used to communicate with the patient about his or her health
Binding: languages (preferred) This value set includes common codes from BCP-47 (http://tools.ietf.org/html/bcp47)
preferred
0..1boolean
Language preference indicator
identifier
0..*Identifier
telecom
0..*ContactPoint
generalPractitioner
0..*Reference(PractitionerRole | Organization | Practitioner)
gender
SU0..1code
male | female | other | unknown
Binding: administrative-gender (required) The gender of a person used for administrative purposes.
maritalStatus
0..1CodeableConcept
Marital (civil) status of a patient
contact
0..*BackboneElement
relationship
0..*CodeableConcept
name
0..1HumanName
A name associated with the contact person
telecom
0..*ContactPoint
address
0..1Address
Address for the contact person
gender
0..1code
male | female | other | unknown
Binding: administrative-gender (required) The gender of a person used for administrative purposes.
organization
0..1Reference(Organization)
Organization that is associated with the contact
period
0..1Period
The period during which this contact person or organization is valid to be contacted relating to this patient
  • Схема валидна
Наверх