Документация, содержащая описание функциональных характеристик программного обеспечения и информацию, необходимую для установки и эксплуатации программного обеспечения
В этом документе применяются следующие термины и определения:

Платформа — программно-аппаратные средства, интегрированные с Сайтом и Мобильным приложением.

Пользователь — дееспособное физическое лицо, достигшее 18 лет, присоединившееся к настоящему Соглашению в собственном интересе либо выступающее от имени и в интересах представляемого им лица, получившее доступ к Сайту/Мобильному приложению и размещенному на нем Сервису для сбора, хранения и самостоятельного управления информацией о своем здоровье с целью обмена медицинской информацией между Пользователем, Лечащими врачами и Медицинскими организациями, а также с целью использования иных услуг, предоставляемых посредством Сервиса.

Сайт — веб-сайты, размещенные в домене 1er.app и его поддоменах.

Мобильное приложение — мобильное приложение для iOS и Android под названием «Мой рецепт».

Сервис — комплекс услуг, функционал и лицензия, предоставляемые Пользователю с использованием Платформы.

ЕСИА — Единая система идентификации и аутентификации инфраструктуры электронного правительства, используемая при оказании государственных и муниципальных услуг в электронном виде.

Электронный рецепт — это юридически значимый, современный аналог обычного бумажного назначения. Электронные рецепты выписываются врачом на приеме, после чего становятся доступны пациентам в мобильном приложении, которое позволяет отслеживать и сохранять все назначения.

Лечащий врач — врач, на которого возложены функции по организации и непосредственному оказанию Пользователю медицинской помощи в период наблюдения за ним и его лечения.

Специалист — физическое лицо, обладающее подтвержденными знаниями в сфере медицины. Специалист не является Лечащим врачом и в рамках оказания услуг по Пользовательскому соглашению не осуществляет медицинскую деятельность.

Личный кабинет — это совокупность личных страниц Пользователя на Сайте/ в Мобильном приложении, доступ к которым осуществляется посредством логина и пароля Пользователя.

1. Общее описание

Программа предоставляет Пользователям возможность выписывать, получать и просматривать свои электронные рецепты, а также оформлять заказы на покупку лекарственных препаратов. Для получения Услуги Пользователю необходим персональный компьютер или смартфон и доступ в Интернет.

Пользователю не требуется устанавливать на свои компьютеры дополнительное специализированное программное обеспечение, т.к. весь функционал Программы доступен через Интернет-браузер или мобильное приложение.

2. Функционал Программы

Программа поддерживает 4 роли:

1. Врач;

2. Пациент;

3. Фармацевт;

4. Администратор.

Функциональные возможности для пользователя с ролью «Врач»:

  • Авторизация;
  • Просмотр электронных рецептов;
  • Выписка электронных рецептов;
  • Консультирование пользователей с ролью «Пациент» по вопросам лекарственных препаратов.

Функциональные возможности для пользователя с ролью «Пациент»:

  • Авторизация;
  • Просмотр электронных рецептов;
  • Просмотр каталога лекарственных препаратов;
  • Оформление заказа;
  • Консультация по заказу с фармацевтом;
  • Консультация по работе Программы с технической поддержкой.

Функциональные возможности для пользователя с ролью «Фармацевт»:

  • Авторизация;
  • Просмотр электронных рецептов;
  • Просмотр заказов;
  • Формирование заказов;
  • Консультирование пользователей с ролью «Пациент» по вопросам лекарственных препаратов.

Функциональные возможности для пользователя с ролью «Администратор»:

  • Авторизация;
  • Управление пользователями;
  • Управление заказами.

2.1. Авторизация

Авторизация пользователей в Программе реализована:

  • Через ЕСИА (необходима подтвержденная учетная запись на портале Госуслуг);
  • По номеру телефона. На указанный номер сотового телефона придет СМС-сообщение с кодом доступа, который необходимо ввести, чтобы попасть в рабочий интерфейс Программы.

2.2. Управление пользователями

Ответственный сотрудник, обладающий правами администратора в Программе, может добавлять (регистрировать), удалять, временно блокировать Пользователей с ролями «Врач» и «Фармацевт», а также назначать других пользователей администраторами Программы.

Для регистрации Пользователя администратор указывает его ФИО, СНИЛС (для авторизации пользователей с ролью «Врач»), логин и пароль (для авторизации пользователей с ролью «Фармацевт»/«Администратор»), после чего Пользователь может зайти в свой рабочий интерфейс Программы.

2.3. Выписка электронного рецепта

Выписать электронный рецепт может пользователь с ролью «Врач» через свой рабочий интерфейс. После выписки электронный рецепт попадает в медкарту, где его может просматривать соответствующий «Пациент».

Пока срок действия рецепта не истек «Пациент» может приобрести по нему лекарство в аптеке или сделать заказ через Программу.

2.4. Формирование заказа

Пользователь с ролью «Пациент» может выбрать из Каталога в программе лекарственные препараты и забронировать или купить их в соответствующей аптеке. При этом пользователь может забрать лекарства в аптеке лично либо заказать доставку (только для не рецептурных препаратов).

2.5. Консультации

Пользователь с ролью «Пациент» может воспользоваться консультацией дежурного специалиста (врача общей практики или фармацевта) в чате в приложении, с целью помощи в подборе лекарств.

Чат позволяет:

  • Обмениваться приватными сообщениями с собеседником;
  • Обмениваться файлами;
  • Сохранять историю переписки.

3. Интерфейс Программы

Для каждой пользовательской роли предусмотрен свой рабочий интерфейс, доступный из публичного сегмента сети Интернет.

Для пользователей с ролью «Пациент» интерфейс Программы также доступен в мобильных приложениях для платформ Android и iOS.

4. Установка и эксплуатация

Программа доступна в сети Интернет по адресу https://1er.app/

Мобильные приложения "Мой рецепт" доступны для устройств с операционными системами Android старше 8.0 и iOS старше 10.0.

4.1 Перечень требований для установки и работы программного обеспечения
4.2. Порядок действия для установки программного обеспечения

Запуск модулей приложения выполняется в виде контейнеров в среде виртуализации Docker. Для конфигурации модулей используется файл docker-compose.yaml, располагаемый в каталоге /opt/docker/1er и содержащий описание и конфигурацию всех модулей приложения.

Установка Docker

От имени пользователя с правами root выполнить команды:

apt update
apt install docker.io curl python3


В случае, если администрирование системы производите не от имени пользователя root, то его необходимо добавить в группу docker, выполнив команду:
sudo usermod -aG docker имя_пользователя

Запустить Docker, и добавить его в автозапуск, выполнив команды:
systemctl start docker
systemctl enable docker

Установить docker-compose, выполнив команды:

curl -L https://github.com/docker/compose/releases/downloa...`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose


Авторизоваться в репозитории содержащем образы системы, выполнив команду:
sudo docker login registry.1er.app

Создать служебные каталоги для модулей приложения, выполнив команды:

sudo mkdir -p /opt/docker/1er/data/configdb
sudo mkdir -p /opt/docker/1er/cryptopro/keys
sudo mkdir -p /opt/docker/1er/cryptopro/certs/root
sudo mkdir /opt/docker/1er/cryptopro/certs/private
sudo mkdir /opt/docker/1er/ext


Поместить файл конфигурации docker-compose.yaml в каталог /opt/docker/1er

Конфигурация внешних адресов модулей приложения

В конфигурационном файле docker-compose.yaml заменить все плейсхолдеры _DOMAIN_ на домен, в котором разворачивается приложение.

Конфигурация сервиса цифровых подписей

Поместить файлы закрытых ключей (*.key файлы внутри папки с расширением .000) в каталог /opt/docker/1er/cryptopro/keys

Поместить корневые сертификаты (при наличии) (в *.cer формате) в каталог /opt/docker/1er/cryptopro/certs/root

Поместить сертификаты закрытых ключей (в *.cer формате) в каталог /opt/docker/1er/cryptopro/certs/private

В конфигурационном файле docker-compose.yaml для сервиса signature-service необходимо указать следующие параметры конфигурации:

# Лицензия Криптопро
CRYPTOPRO_LICENSE=


# Перечисление связок сертификатов с закрытыми ключами, каждая новая добавляется внутрь основного массива массивом из 4 элементов:
# 1 - имя файла сертификата
# 2 - отпечаток сертификата
# 3 - имя ключевого контейнера (можно посмотреть командой "csptest -keyset -enum_cont -verifycontext")
# 4 - пин-код ключевого контейнера
KEY_BINDING=[["cert.cer", "abcd1234", "cert_container", "4321dcba"]]

# Ключ шифрования по алгоритму HS256
HS256_KEY=


Конфигурация сервиса авторизации через ЕСИА

В конфигурационном файле docker-compose.yaml для сервиса auth-esia необходимо указать следующие параметры конфигурации:

# Мнемоника системы в ЕСИА
MNEMONICS=

# Отпечаток сертификата используемого для подписи запросов к ЕСИА. Должен соответствовать отпечатку сертификата, указанному в конфигурации сервиса цифровых подписей
X509_THUMBPRINT=abcd1234


Конфигурация сервиса рассылки СМС

В конфигурационном файле docker-compose.yaml для сервиса sms необходимо указать следующие параметры конфигурации:

# Логин для отправки сообщений через smsc.ru
SMSC_LOGIN=

# Пароль для отправки сообщений через smsc.ru
SMSC_PASSWORD=

Конфигурация сервиса рассылки Push-уведомлений

Поместить сертификат (в формате *.p12) для отправки пуш-уведомлений в iOS приложение в каталог /opt/docker/1er/ext

В конфигурационном файле docker-compose.yaml для сервиса push-notification-service необходимо указать следующие параметры конфигурации:

# Ключ для отправки пуш-уведомлений в Android-приложение пациента

PUSH_MOBILE_PATIENT_ANDROID_KEY=

# Имя сертификата для отправки пуш-уведомлений в iOS-приложение пациента

PUSH_MOBILE_PATIENT_IOS_CERT=

# Пароль к сертификату для отправки пуш-уведомлений в iOS-приложение пациента

PUSH_MOBILE_PATIENT_IOS_PASSPHRASE=

Запуск сервисов

После выполнения конфигурации сервисов, необходимо их запустить, выполнив команды:

cd /opt/docker/1er

sudo docker-compose up -d

Конфигурация сервиса интеграции с медкартой

Зайти в контейнер MongoDB:
docker exec -it 1er_mongo_1 mongo

Подключится к БД медкарты:
use core

Добавить запись об интеграции с ядром:
db.users.insertOne({
type: 'INTEGRATION',
hookUrl: 'http://core-medcard-integration:19603/api/hook',
description: 'Интеграция с medcard',
secret: 'сгенерированная UUID-строка'
});


В ответ будет возвращен идентификатор созданной интеграции (вида ObjectId("60a6457e5bdebd9b41941c78")). Данный идентификатор (текстовое значение - 60a6457e5bdebd9b41941c78) используется далее для формирования токена интеграции.

Отправить запрос на получение токена интеграции, созданной в БД medcard:

curl --location --request POST 'http://localhost:19100/api/token' --header 'Content-Type: application/json' --data '{

"grant_type": "client_credentials",

"client_id": "_id ранее созданной интеграции",

"client_secret": "secret ранее созданной интеграции",

"role": "INTEGRATION"

}'

В конфигурационном файле docker-compose.yaml для сервиса core-medcard-integration указать в качестве токена интеграции с медкартой значение access_token, полученное в ответе на предыдущий запрос:

# Токен интеграции с медкартой

MEDCARD_INTEGRATION_TOKEN=



Конфигурация модуля фармацевта

Зайти в контейнер MongoDB:
docker exec -it 1er_mongo_1 mongo

Подключится к БД медкарты:
use medcard

Добавить запись об интеграции с ядром:
db.users.insertOne({
type: 'INTEGRATION',
description: 'Интеграция с модулем фармацевта',
secret: 'сгенерированная UUID-строка'
});


Выйти из контейнера MonogDB:
exit

Отправить запрос на получение токена интеграции, созданной в БД medcard:

curl -X POST "http://localhost:19209/api/token?grant_type=client_credentials&client_id={_id ранее созданной интеграции}&client_secret={secret ранее созданной интеграции}"

В конфигурационном файле docker-compose.yaml для сервиса pharmacy указать в качестве токена интеграции с медкартой значение token, полученное в ответе на предыдущий запрос:

# Токен интеграции с медкартой
MEDCARD_INTEGRATION_TOKEN=

Настройка интеграции ядра и модуля оператора

Зайти в контейнер MongoDB:
docker exec -it 1er_mongo_1 mongo

Подключится к БД ядра:
use core

Добавить запись об интеграции с модулем оператора:
db.users.insertOne({
type: 'GLOBAL_INTEGRATION',
description: 'Интеграция с модулем оператора,
hookUrl: 'http://operator:19302/api/hook'
});


Выйти из контейнера MonogDB:
exit

Конфигурация внешних адресов модулей приложения

В конфигурационном файле docker-compose.yaml заменить плейсхолдер _DOMAIN_ на домен, в котором разворачивается приложение.

Применение изменений конфигурации

После выполнения дополнительной конфигурации сервисов, необходимо запустить модули приложения, выполнив команды:

cd /opt/docker/1er

sudo docker-compose up -d

Конфигурация Nginx

Для предоставления доступа к модулям приложения по доменным именам, необходимо выполнить настройку прокси-сервера Nginx согласно следующей карты адресации:
Где:
_DOMAIN_NAME_ - домен, в котором должны быть доступны модули приложения

_INTERNAL_ADDRESS_ - внутренний адрес сервера, на котором установлено приложение

При заполнении шаблона следует заменить все вхождения плейсхолдера _EXTERNAL_ADDRESS_ на значение из столбца "Внешний адрес" таблицы выше, а также заменить все вхождения плейсхолдера _INTERNAL_ADDRESS_ на значение столбца "Внутренний адрес" таблицы выше.