Введение

Вы устали от того, что ваша компания вынуждает вас использовать C# во всех ваших начинаниях по программированию? Вы мечтаете о мире, в котором вы сможете использовать JavaScript, вашу настоящую языковую любовь, чтобы данные о здравоохранении танцевали у вас под рукой? Пристегнитесь, друг мой, потому что мы собираемся погрузиться с головой в мир быстрых ресурсов взаимодействия в здравоохранении (FHIR) с мятежной мощью Node.js.

Почему ты спрашиваешь? Потому что мы пираты JavaScript, плывущие против ветра C#!

Настройка JavaScript Juggernaut

Прежде всего, давайте обратимся к нашим старым, верным союзникам: fhir.js и fs. Модуль fs поможет нам обрабатывать файлы JSON, а fhir.js... ну, это наше секретное оружие для борьбы с серверами FHIR.

const fhir = require('fhir.js');
const fs = require('fs');

Далее отправляемся в плавание и направляем наш корабль к серверу FHIR (Аутентификация будет в другом посте):

const client = fhir({
  baseUrl: 'https://your-fhir-server-url.com'
});

Никакого C#, только плавное плавание с Node.js!

Подготовка данных пациента (также известная как «Сокровище»)

Да, у нас есть карта сокровищ под названием patientData.json. Давайте раскопаем ценные данные, которые нам нужны:

const rawData = fs.readFileSync('patientData.json');
const patientData = JSON.parse(rawData);

Мы извлекаем основные подсказки: имя пациента, пол, дату рождения и идентификаторы.

const name = patientData.name;
const gender = patientData.gender;
const birthDate = patientData.birthDate;
const identifiers = patientData.identifiers;

О, посмотри! У пациента может быть больше идентификаторов, чем у пирата тайников с ромом. Вот где наш удобный маленький помощник приходит:

function createIdentifiers(identifiers) {
  const identifierArray = [];

  for (const identifier of identifiers) {
    const identifierObj = {
      system: identifier.system,
      value: identifier.value,
    };

    identifierArray.push(identifierObj);
  }

  return identifierArray;
}

Затем мы вызываем эту функцию, чтобы получить массив этих идентификаторов:

const identifierArray = createIdentifiers(identifiers);

Создание ресурса пациента (он же «Золотой дублон»)

Теперь со всеми частями карты мы можем создать золотой дублон, наш ресурс «Пациент»:

const patientResource = {
  resourceType: 'Patient',
  name: [
    {
      given: [name.given],
      family: name.family,
    },
  ],
  gender: gender,
  birthDate: birthDate,
  identifier: identifierArray,
};

Отправка сообщения в бутылке

Наконец, мы готовы бросить наше сообщение в бутылке в цифровое море сервера FHIR. Используя возможности Node.js (и никакого C#!), мы создадим ресурс Patient:

client
  .create({
    type: 'Patient',
    resource: patientResource,
  })
  .then((response) => {
    console.log('Patient resource created successfully:', response);
  })
  .catch((error) => {
    console.error('Error creating Patient resource:', error);
  });

Заключение

Ну, взорви меня, приятель! Вы только что прошли через бурные воды обмена медицинскими данными, используя только JavaScript! С#? Ба! Кому это нужно, когда у вас есть Node.js, любовь к бунту программирования и сила FHIR.js на вашей стороне!

Продолжайте исследовать, продолжайте учиться, и если у вас когда-нибудь возникнут сомнения, взгляните на надежную спецификацию FHIR. Теперь вы полноправный пират JavaScript в море моряков C#. Вот и плавно плывите вперед!

Примечание. В духе бунта против Node.js вы обнаружите, что большинство моих примеров продолжают демонстрировать мощь JavaScript. Мы также побалуемся с Java, потому что это Java. Но что касается C# или всего, что связано с .NET? Не на моих часах!

Это осознанный выбор. Печальная правда заключается в том, что документация, предоставленная Fire.ly для их .NET FHIR API, не совсем впечатляет мир по сравнению с надежностью документации HAPI FHIR Java.

Поэтому до тех пор, пока Fire.ly не улучшит свою игру и не доведет свою документацию до уровня других библиотек FHIR, мы будем продолжать отстаивать здесь Node.js и Java. Речь идет не только о предпочтениях — речь идет о предоставлении четких, доступных и хорошо документированных примеров, которые помогут вам стать лучшим инженером FHIR.

Итак, давайте отправимся в это приключение вместе, оставив позади берег .NET и отправившись в захватывающие миры JavaScript и Java!

Полные файлы ниже:

const fhir = require('fhir.js');
const fs = require('fs');

// Create a FHIR client instance
const client = fhir({
  baseUrl: 'https://your-fhir-server-url.com'
});

// Function to handle multiple identifiers
function createIdentifiers(identifiers) {
  const identifierArray = [];

  for (const identifier of identifiers) {
    const identifierObj = {
      system: identifier.system,
      value: identifier.value,
    };

    identifierArray.push(identifierObj);
  }

  return identifierArray;
}

// Read the JSON file containing the data for the Patient resource
const rawData = fs.readFileSync('patientData.json');
const patientData = JSON.parse(rawData);

// Extract necessary data from the custom format JSON file
const name = patientData.name;
const gender = patientData.gender;
const birthDate = patientData.birthDate;
const identifiers = patientData.identifiers;

// Create the array of identifiers using the custom function
const identifierArray = createIdentifiers(identifiers);

// Define the Patient resource to be created
const patientResource = {
  resourceType: 'Patient',
  name: [
    {
      given: [name.given],
      family: name.family,
    },
  ],
  gender: gender,
  birthDate: birthDate,
  identifier: identifierArray,
};

// Use the client to create the Patient resource
client
  .create({
    type: 'Patient',
    body: patientResource,
  })
  .then((response) => {
    console.log('Patient resource created successfully:', response);
  })
  .catch((error) => {
    console.error('Error creating Patient resource:', error);
  });
{
  "name": {
    "given": "John",
    "family": "Doe"
  },
  "gender": "male",
  "birthDate": "1990-01-01",
  "identifiers": [
    {
      "system": "http://example.com/patient-id",
      "value": "123456789"
    },
    {
      "system": "http://example.com/national-id",
      "value": "ABCD1234"
    }
  ]
}