<aside> <img src="/icons/info-alternate_gray.svg" alt="/icons/info-alternate_gray.svg" width="40px" />

Ендпоінти сервісу requistions-service, які використовуються для роботи з заявкою з розрахунком потреби за методологією (введення даних пацієнтів, їх кількості або когорти).

</aside>

<aside> <img src="/icons/list-indent_gray.svg" alt="/icons/list-indent_gray.svg" width="40px" />

Зміст

</aside>

1. Отримання JSON-схем

1.1. Використання JSON-схем

<aside> <img src="/icons/report_gray.svg" alt="/icons/report_gray.svg" width="40px" /> Відображення параметрів реєстру пацієнтів та даних по пацієнтам здійснюється за допомогою JSON-схем, що генеруються на стороні BE та містять в собі конфігураційні атрибути, по яким здійснюється збір інформації по пацієнтам.

Важливо! Залежно від напрямку лікування одна і та сама схема може містити різний набір параметрів:

<aside> <img src="/icons/dependency_gray.svg" alt="/icons/dependency_gray.svg" width="40px" />

Підхід до використання JSON-схем наступний:

sequenceDiagram

		actor U as User
    participant S as e-Stock BE
    participant MIS as MIS
    activate S
    Note over S: Configure JSON-schemas for each direction
    deactivate S
    U ->> MIS: Create requisition
    MIS ->> S: **POST** **/v1/requisitions**
    activate S
    S -->> MIS: {id}
    deactivate S
    MIS ->> S: **GET /v1/requisitions/{id}**
    activate S
    ****S -->> MIS: {full_requisition_info}
    deactivate S
    MIS -->> U: Open requisition page
    U ->> MIS: Click on patients page
    MIS ->> S: **GET** **/v1/requisitions/{requisitionId}/patients/schemaConfigurations**
    activate S
    ****S -->> MIS: {JSON-schemas}
    deactivate S
    MIS ->> S: **GET /v1/requisitions/{requisitionId}/patients/{patientId}, GET /v1/requisitions/{requisitionId}/patients/treatmentGroups**
    activate S 
    ****S -->> MIS: {full_patients_data}
    deactivate S
    alt "schemaGroup": "PATIENTS_DATA_BASED"
        MIS -->> U: Open patients page (full or empty), according to the JSON-schemas 
    else "schemaGroup": "PATIENTS_QUANTITY_BASED"
        MIS -->> U: Open patient_quantity page (full or empty), according to the JSON-schemas 
    else "schemaGroup": "PATIENTS_QUANTITY_COHORT_BASED"
        MIS -->> U: Open cohort page (full or empty), according to the JSON-schemas 
    end     

Тобто:

  1. На боці BE e-Stock для кожного напрямку лікування конфігуруються JSON-схеми
  2. МІС здійснює запит GET /v1/requisitions/{requisitionId}/patients/schemaConfigurations
  3. МІС отримує JSON-схеми, які мають використовуватись конкретно для цієї заявки
  4. Залежно від параметра schemaGroup МІС відображає або сторінку з додаванням пацієнтів, або кількості пацієнтів, або когорти
  5. Залежно від отриманих в схемах атрибутів МІС відображає поля, які користувач має заповнити. При цьому кожна схема відповідає сутності, яка використовується:

</aside>

<aside> <img src="/icons/link_gray.svg" alt="/icons/link_gray.svg" width="40px" />

Загальну інформацію щодо застосування JSON-схем можна переглянути за посиланням.

</aside>

1.2. Отримання JSON-схем по заявці на потребу

<aside> <img src="/icons/swap-horizontally_gray.svg" alt="/icons/swap-horizontally_gray.svg" width="40px" /> Щоб отримати JSON-схеми по заявці на потребу, необхідно надіслати GET запит на /v1/requisitions/{requisitionId}/patients/schemaConfigurations.

<aside> <img src="/icons/arrow-right_gray.svg" alt="/icons/arrow-right_gray.svg" width="40px" /> Параметри запиту

Параметр Тип Обов’язково Приклад значення Опис
requisitionId int Так 588 Ідентифікатор заявки на потребу. Передається в заголовку.

<aside> <img src="/icons/forward_gray.svg" alt="/icons/forward_gray.svg" width="40px" /> Приклад запиту

<https://requisitions-service-stage.es.meddata.com.ua/v1/requisitions/588/patients/schemaConfigurations>

</aside>

</aside>

<aside> <img src="/icons/arrow-left_gray.svg" alt="/icons/arrow-left_gray.svg" width="40px" /> Параметри відповіді

Параметр Тип Опис
requisitionId int Ідентифікатор заявки на потребу.
schemaGroup string Група JSON-схем, яка використовується в поточній заявці.

Всього є три групи:

Залежно від групи застосовується різний набір JSON-схем, та різне відображення сторінки / вкладки додавання даних пацієнтів. Нижче додано опис та приклад відповіді для кожної окремої групи та схеми. |

<aside> <img src="/icons/gears_gray.svg" alt="/icons/gears_gray.svg" width="40px" />

PATIENTS_DATA_BASED

Передбачає додавання таких сутностей, як: пацієнт, до пацієнта додаються піднапрямки лікування, до піднапрямку додаються призначені лікарські засоби. Відповідно до цього, використовуються наступні схеми:

Приклад відповіді:

{
  "requisitionId": 1028,
  "schemaGroup": "PATIENTS_DATA_BASED",
  "patientSchema": {
    "$id": "<https://example.com/product.schema.json>",
    "type": "object",
    "title": "Patient",
    "$schema": "<http://json-schema.org/draft-07/schema>",
    "required": ["city", "initials", "dateOfBirth", "attributes"],
    "properties": {
      "id": {
        "type": "integer",
        "order": 1, // порядок відображення параметра
        "readOnly": true,
        "description": "Номер пацієнта"
      },
      "city": {
        "type": "string",
        "order": 3,
        "maxLength": 30,
        "minLength": 2,
        "description": "Назва територіальної одиниці"
      },
      "initials": {
        "type": "string",
        "order": 2,
        "pattern": "^[А-ЩЬЮЯЄІЇҐ]{1}\\\\.[А-ЩЬЮЯЄІЇҐ]{1}\\\\.[А-ЩЬЮЯЄІЇҐ]{1}\\\\.$",
        "description": "Ініціали пацієнта (ПІБ)",
        "patternExample": "П.I.Б."
      },
      "createdAt": {
        "type": "string",
        "order": 6,
        "format": "date-year",
        "readOnly": true,
        "description": "Рік додавання пацієнта"
      },
      "attributes": {
        "type": "object",
        "required": ["weight"],
        "properties": {
          "weight": {
            "type": "integer",
            "order": 5,
            "maximum": 300,
            "minimum": 1,
            "description": "Вага пацієнта, кг"
          }
        },
        "additionalProperties": false
      },
      "dateOfBirth": {
        "type": "string",
        "order": 4,
        "format": "past-date",
        "description": "Дата народження"
      }
    },
    "description": "Інформація про пацієнта",
    "additionalProperties": false
  },
  "patientTreatmentSchema": {
    "title": "PatientTreatment",
    "$schema": "<http://json-schema.org/draft-07/schema>",
    "required": ["attributes"],
    "properties": {
      "diagnosis": {
        "type": "string",
        "order": 7,
        "nullable": true,
        "maxLength": 1000,
        "minLength": 3,
        "description": "Піднапрям лікування"
      },
      "attributes": {
        "type": "object",
        "required": [],
        "properties": {},
        "additionalProperties": false
      }
    },
    "additionalProperties": false
  },
  "prescribedMedicineSchema": {
    "title": "PrescribedMedicine",
    "$schema": "<http://json-schema.org/draft-07/schema>",
    "required": [
      "nomenclatureId",
      "quantityOfUsagesPerDay",
      "isCalculationIncludedInRequisition",
      "daysOfUsagePerYear",
      "attributes"
    ],
    "properties": {
      "id": {
        "type": "integer",
        "order": 8,
        "readOnly": true,
        "description": "ID призначених лікарських засобів"
      },
      "attributes": {
        "type": "object",
        "required": [],
        "properties": {
          "note": {
            "type": "string",
            "order": 17,
            "nullable": true,
            "maxLength": 1000,
            "description": "Нотатки"
          }
        },
        "additionalProperties": false
      },
      "releaseForm": {
        "type": "string",
        "order": 10,
        "readOnly": true,
        "description": "Форма випуску"
      },
      "nomenclatureId": {
        "type": "integer",
        "minimum": 1,
        "writeOnly": true
      },
      "nomenclatureName": {
        "type": "string",
        "order": 9,
        "readOnly": true,
        "description": "Призначені лікарські засоби та медичні вироби"
      },
      "nomenclatureUnit": {
        "type": "string",
        "order": 12,
        "readOnly": true,
        "description": "Одиниця виміру"
      },
      "dosageDescription": {
        "type": "string",
        "order": 11,
        "readOnly": true,
        "description": "Дозування"
      },
      "daysOfUsagePerYear": {
        "type": "integer",
        "order": 14,
        "maximum": 365,
        "minimum": 1,
        "description": "Кількість днів застосувань на рік"
      },
      "quantityOfUsagesPerDay": {
        "type": "number",
        "order": 13,
        "minimum": 1,
        "description": "Кількість одиниць на добу"
      },
      "totalRequiredQuantityPerYear": {
        "type": "integer",
        "order": 15,
        "readOnly": true,
        "description": "Кількість одиниць лікарського засобу на рік застосування"
      },
      "isCalculationIncludedInRequisition": {
        "type": "boolean",
        "order": 16,
        "default": true,
        "writeOnly": true
      }
    },
    "additionalProperties": false
  }
}

<aside> <img src="/icons/gears_gray.svg" alt="/icons/gears_gray.svg" width="40px" />

PATIENTS_QUANTITY_BASED

Передбачає додавання таких сутностей, як кількість пацієнтів для конкретного лікарського засобу. Відповідно до цього, використовуються наступні схеми:

*В даних схемах використовується параметр createEntitiesByDefault, який визначає, чи створюється сутність автоматично (на стороні BE) при створені заявки, чи користувач має додавати їх вручну. Важливо: ***сутність PATIENTS_QUANTITY залежна від сутності PATIENT_TREATMENT_GROUP, отже якщо для схеми PATIENT_TREATMENT_GROUP значення цього параметра = false, значення параметра для PATIENTS_QUANTITY ігнорується (за замовчуванням також вважається false).

Приклад відповіді:

{
  "requisitionId": 1031,
  "schemaGroup": "PATIENTS_QUANTITY_BASED",
  "patientQuantitySchema": {
    "title": "PatientsQuantity",
    "$schema": "<http://json-schema.org/draft-07/schema>",
    "required": ["attributes", "quantity"],
    "properties": {
      "quantity": {
        "type": "integer",
        "order": 6,
        "minimum": 0,
        "description": "К-сть дітей, яким планується ботулінотерапія протягом року"
      },
      "attributes": {
        "type": "object",
        "required": [],
        "properties": {
          "note": {
            "type": "string",
            "order": 7,
            "nullable": true,
            "maxLength": 1000,
            "description": "Нотатки"
          }
        },
        "additionalProperties": false
      },
      "releaseForm": {
        "type": "string",
        "order": 3,
        "readOnly": true,
        "description": "Форма випуску"
      },
      "nomenclatureId": {
        "type": "integer",
        "minimum": 1,
        "writeOnly": true
      },
      "nomenclatureName": {
        "type": "string",
        "order": 2,
        "readOnly": true,
        "description": "Призначені лікарські засоби"
      },
      "nomenclatureUnit": {
        "type": "string",
        "order": 5,
        "readOnly": true,
        "description": "Одиниця виміру"
      },
      "dosageDescription": {
        "type": "string",
        "order": 4,
        "readOnly": true,
        "description": "Дозування"
      }
    },
    "additionalProperties": false,
    "createEntitiesByDefault": true
  },
  "patientTreatmentGroupSchema": {
    "title": "PatientTreatmentGroup",
    "$schema": "<http://json-schema.org/draft-07/schema>",
    "required": ["attributes"],
    "properties": {
      "attributes": {
        "type": "object",
        "required": [],
        "properties": {},
        "additionalProperties": false
      },
      "nomenclatureSubtype": {
        "type": "string",
        "nullable": true,
        "maxLength": 1000,
        "minLength": 3,
        "writeOnly": true,
        "description": "Піднапрям лікування"
      }
    },
    "additionalProperties": false,
    "createEntitiesByDefault": true
  }
}

<aside> <img src="/icons/gears_gray.svg" alt="/icons/gears_gray.svg" width="40px" />

PATIENTS_QUANTITY_COHORT_BASED

Передбачає додавання таких сутностей, як когорта (група пацієнтів) та кількість лікарського засобу для когорти. Відповідно до цього, використовуються ті самі схеми:

*В даних схемах використовується параметр createEntitiesByDefault, який визначає, чи створюється сутність автоматично (на стороні BE) при створені заявки, чи користувач має додавати їх вручну. Важливо: ***сутність PATIENTS_QUANTITY залежна від сутності PATIENT_TREATMENT_GROUP, отже якщо для схеми PATIENT_TREATMENT_GROUP значення цього параметра = false, значення параметра для PATIENTS_QUANTITY ігнорується (за замовчуванням також вважається false).

Приклад відповіді:

{
  "requisitionId": 1026,
  "schemaGroup": "PATIENTS_QUANTITY_COHORT_BASED",
  "patientQuantitySchema": {
    "title": "PatientsQuantity",
    "$schema": "<http://json-schema.org/draft-07/schema>",
    "required": ["quantity", "attributes"],
    "properties": {
      "quantity": {
        "type": "integer",
        "order": 9,
        "minimum": 1,
        "description": "Кількість одиниць препарату на рік застосування"
      },
      "attributes": {
        "additionalProperties": false
      },
      "releaseForm": {
        "type": "string",
        "order": 8,
        "readOnly": true,
        "description": "Форма випуску"
      },
      "nomenclatureId": {
        "type": "integer",
        "minimum": 1,
        "writeOnly": true
      },
      "nomenclatureName": {
        "type": "string",
        "order": 7,
        "readOnly": true,
        "description": "Назва (МНН)"
      }
    },
    "additionalProperties": false,
    "createEntitiesByDefault": false
  },
  "patientTreatmentGroupSchema": {
    "title": "PatientTreatmentGroup",
    "$schema": "<http://json-schema.org/draft-07/schema>",
    "required": ["attributes", "nomenclatureSubtype"],
    "properties": {
      "id": {
        "type": "integer",
        "order": 1,
        "parent": "",
        "readOnly": true,
        "description": "№"
      },
      "attributes": {
        "type": "object",
        "required": [
          "cohort",
          "cohortNumberOfPatients",
          "patientsProvidedOmnitrop5",
          "patientsProvidedOmnitrop10"
        ],
        "properties": {
          "cohort": {
            "enum": [
              "Діти з дефіцитом гормону росту",
              "Дівчата з синдромом Тернера",
              "Діти з синдромом Рассела-Сільвера",
              "Діти з синдромом Прадера-Віллі",
              "Діти з делеціями в гені SHOX (який є причиною низькорослості за синдрому Тернера, синдрому Лері-Вейла, мезомелічної дисплазії Лангера)",
              "Діти з хронічною нирковою недостатністю, у яких розвивається низькорослість",
              "Діти, що народились малими для свого гестаційного віку (SGA) у разі збереження низькорослості понад 2 SD після двох років життя"
            ],
            "order": 3,
            "description": "Когорта"
          },
          "cohortNumberOfPatients": {
            "type": "integer",
            "order": 4,
            "minimum": 1,
            "writeOnly": true,
            "description": "Кількість пацієнтів у когорті"
          },
          "patientsProvidedOmnitrop5": {
            "type": "integer",
            "order": 5,
            "minimum": 0,
            "writeOnly": true,
            "description": "Скільки пацієнтів забезпечені засобом для введення препарату Омнітроп картридж 5 мг/1,5 мл"
          },
          "patientsProvidedOmnitrop10": {
            "type": "integer",
            "order": 6,
            "minimum": 0,
            "writeOnly": true,
            "description": "Скільки пацієнтів забезпечені засобом для введення препарату Омнітроп картридж 10 мг/1,5 мл"
          }
        },
        "additionalProperties": false
      },
      "nomenclatureSubtype": {
        "type": "string",
        "order": 2,
        "nullable": true,
        "maxLength": 1000,
        "minLength": 2,
        "writeOnly": true,
        "description": "Вік"
      }
    },
    "additionalProperties": false,
    "createEntitiesByDefault": false
  }
}

</aside>

<aside> <img src="/icons/no_gray.svg" alt="/icons/no_gray.svg" width="40px" /> Помилки

Параметр Опис
status Статус відповіді.
detail Деталі відповіді.
code Код помилки. Можливі коди помилок можна переглянути за посиланням.
localizedMessage Локалізований текст помилки.

<aside> <img src="/icons/backward_gray.svg" alt="/icons/backward_gray.svg" width="40px" /> Приклад відповіді

</aside>

</aside>

</aside>

1.3. Актуальні JSON-схеми для кожного напрямку

2. Внесення даних пацієнтів

<aside> <img src="/icons/info-alternate_gray.svg" alt="/icons/info-alternate_gray.svg" width="40px" /> В наступних блоках описані ендпоінти, які використовуються для роботи з заявкою по напрямкам лікування для яких застосовується методологія з вводом даних пацієнтів (PATIENTS_DATA_BASED).

</aside>

<aside> <img src="/icons/move-document_gray.svg" alt="/icons/move-document_gray.svg" width="40px" /> Функціональні вимоги до заявки на збір потреби по напрямкам лікування для яких застосовується методологія з вводом даних пацієнтів описані в розділі 5.2.1.4. Заявка на потребу ЗОЗ по напрямкам лікування для яких застосовується методологія з вводом даних пацієнтів документу e-Stock | Технічні вимоги.

</aside>

2.1. Отримання всіх пацієнтів в заявці

<aside> <img src="/icons/move-document_gray.svg" alt="/icons/move-document_gray.svg" width="40px" /> Функціональні вимоги до реєстру пацієнтів в заявці на потребу описані в розділі 5.2.1.4.5. Реєстр пацієнтів документу e-Stock | Технічні вимоги.

</aside>

<aside> <img src="/icons/swap-horizontally_gray.svg" alt="/icons/swap-horizontally_gray.svg" width="40px" /> Щоб отримати весь перелік пацієнтів в заявці на потребу необхідно надіслати GET запит на /v1/requisitions/{requisitionId}/patients.

</aside>

2.2. Додавання пацієнта та його даних

<aside> <img src="/icons/move-document_gray.svg" alt="/icons/move-document_gray.svg" width="40px" /> Функціональні вимоги до картки пацієнта описані в розділі 5.2.1.4.5. Картка пацієнта документу e-Stock | Технічні вимоги.

</aside>

<aside> <img src="/icons/move-document_gray.svg" alt="/icons/move-document_gray.svg" width="40px" /> Функціональні вимоги валідації даних пацієнта описані у розділі **5.2.1.4.5. Валідація даних пацієнта** документу e-Stock | Технічні вимоги.

</aside>

2.2.1. Додавання інформації про пацієнта