Search... (alt + k)

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

updated
23 Jul 2022

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

Как добавлять расширения элементам примитивного типа данных - см.[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) Справочник НСИ Минздрава Пол пациента
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
Значение для отображения
fhir.ru.core.ext-nsi-gender/CoreNsiGender.keys.valueCoding.confirms.0
Expected symbol 'fhir/Coding tagged with '#{zen/schema}, but only #{}
fhir.ru.core.ext-nsi-gender/CoreNsiGender.confirms.0
Expected symbol 'fhir/Extension tagged with '#{zen/schema}, but only #{}
fhir.ru.core.ext-nsi-gender/CoreNsiGender.keys.valueCoding.keys.code.confirms.0
Expected symbol 'fhir/code tagged with '#{zen/schema}, but only #{}
fhir.ru.core.ext-nsi-gender/CoreNsiGender.keys.valueCoding.keys.display.confirms.0
Expected symbol 'fhir/string tagged with '#{zen/schema}, but only #{}
fhir.ru.core.ext-nsi-gender/CoreNsiGender.keys.url.confirms.0
Expected symbol 'fhir/uri tagged with '#{zen/schema}, but only #{}
fhir.ru.core.ext-nsi-gender/CoreNsiGender.keys.valueCoding.keys.system.confirms.0
Expected symbol 'fhir/uri tagged with '#{zen/schema}, but only #{}
fhir.ru.core.ext-nsi-gender/CoreNsiGender.
Could not resolve symbol 'fhir/Coding in fhir.ru.core.ext-nsi-gender/CoreNsiGender
fhir.ru.core.ext-nsi-gender/CoreNsiGender.
Could not resolve symbol 'fhir/Extension in fhir.ru.core.ext-nsi-gender/CoreNsiGender
fhir.ru.core.ext-nsi-gender/CoreNsiGender.
Could not resolve symbol 'fhir/code in fhir.ru.core.ext-nsi-gender/CoreNsiGender
fhir.ru.core.ext-nsi-gender/CoreNsiGender.
Could not resolve symbol 'fhir/string in fhir.ru.core.ext-nsi-gender/CoreNsiGender
fhir.ru.core.ext-nsi-gender/CoreNsiGender.
Could not resolve symbol 'fhir/uri in fhir.ru.core.ext-nsi-gender/CoreNsiGender

  • 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
Пример профиля Пациент
fhir.ru.core.tutorial-patient/TutorialPatient.keys._gender.confirms.0
Expected symbol 'fhir/Element tagged with '#{zen/schema}, but only #{}
fhir.ru.core.tutorial-patient/TutorialPatient.confirms.0
Expected symbol 'fhir/Patient tagged with '#{zen/schema}, but only #{}
fhir.ru.core.tutorial-patient/TutorialPatient.
Could not resolve symbol 'fhir/Element in fhir.ru.core.tutorial-patient/TutorialPatient
fhir.ru.core.tutorial-patient/TutorialPatient.
Could not resolve symbol 'fhir/Patient in fhir.ru.core.tutorial-patient/TutorialPatient
Наверх