Пару месяцев назад NooSoft представил новую разработку — сервис для прохождения удаленных медосмотров водителей. О нем вы можете прочитать в статье — КАК СЕРВИС УДАЛЕННЫХ МЕДОСМОТРОВ ВОДИТЕЛЕЙ ПОВЫШАЕТ БЕЗОПАСНОСТЬ
Теперь пришло время заглянуть за кулисы и увидеть, как все работает изнутри.
Система удаленных медосмотров спроектирована на основе модульного принципа. Его четыре кита: надежность, гибкость, масштабируемость и удобство использования.
Для разработки был выбран подход MVVM (Model-View-ViewModel). Метод разбивает приложение на логические слои, делая его более поддерживаемым и тестируемым.
Не пугайтесь, сейчас мы все объясним. В MVVM есть три компонента:
Благодаря чёткому разделению каждый из компонентов может сосредоточиться на своей задаче. ViewModel легко тестировать в отрыве от других. А View и ViewModel могут быть переиспользованы в разных частях кода, что уменьшает дублирование и ускоряет разработку.
Но главное преимущество - архитектура MVMM позволяет легко изменять структуру без переделки всего кода.
Теперь давайте перейдем к тому, из каких элементов состоит система и как они взаимодействуют.
Tetron МеdExplorer включает: личный кабинет медиков, мобильное приложение для водителей и терминалы проведения медосмотров.
Но легче представить всё визуально, давайте посмотрим на схему ниже.
На ней просматривается следующая структура:
С содержанием разобрались. Теперь перейдем к тому, как все работает.
Владельцы и руководители транспортных компаний управляют подписками, просмотривают отчеты, взаимодействуя с API Gateway через HTTP запросы.
Водители проходят медосмотры с помощью терминала. Он собирает данные о состоянии здоровья и передает их на сервер через API Gateway. Это обеспечивает мгновенную обработку и принятие решений со стороны врачей, а водители получают быстрый результат.
Медики используют web и mobile приложения. Они также работают с API Gateway на HTTP-запросах, чтобы оперативно получать и передавать информацию.
Теперь про сетевые компоненты:
Далее система начинает работать на основе микросервисов и баз данных.
Дополнительно для каждого клиента существует набор микросервисов, реализующих сам процесс медосмотра и организационные задачи на уровне компаний.
Отдельной ролью вынесены администраторы. Они используют CMS для управления настройками системы и собственную БД для их хранения.
Компоненты работают в тесной связке, создавая надежный функционал платформы медосмотров.
Поехали дальше!
Для реализации фронтенд части мы использовали два основных инструмента: TypeScript и React.js.
TypeScript — язык программирования со статической типизацией, являющийся расширением для JavaScript. В нем типы переменных и функций проверяются уже на этапе компиляции. Это заранее выявляет и устраняет ошибки, которые могли бы появиться в процессе выполнения кода.
Модули TypeScript позволяют разбивать код на отдельные файлы, облегчая его управление и повторное использование.
React.js — библиотека JavaScript, специально созданная для разработки пользовательских интерфейсов. Делит их на небольшие переиспользуемые компоненты.
Виртуальный DOM в React ускоряет рендеринг без необходимости перезагрузки страницы. Улучшает производительность, интерфейсы становятся более отзывчивыми для пользователя.
Сочетание TypeScript и React даёт нам эффективные инструменты для разработки высококачественного ресурса. TypeScript гарантирует устойчивость и читаемость кода, снижая количество багов и упрощая его поддержку. React создает удобные и практичные пользовательские среды, расширяя и адаптируя их под различные задачи.
Помимо React и TypeScript, мы используем:
В приложении важно настроить надёжную обработку ошибок и эффективное управление компонентами. Для этого мы используем несколько инструментов и подходов:
Для работы с формами применяется React Hook Form. Он оптимизирует их обработку, поддерживая валидацию и контроль ошибок.
Навигация реализована посредством React Router DOM. Библиотека организовывает маршрутизацию и управление страницами.
Для бэкенда выбрали Nest.js — современный фреймворк для разработки серверной части с гибкой модульной архитектурой. Он стал нашим основным инструментом благодаря его множеству преимуществ, которые идеально соответствуют потребностям проекта.
Мы можем легко организовать код и масштабировать его. А выбранная модульная архитектура развивает каждый компонент независимо и не нарушает общую структуру.
Один из ключевых факторов выбора Nest.js — встроенная поддержка TypeScript, на котором как раз реализован фронтенд.
Интеграция с популярными библиотеками и инструментами позволяет создавать гибкие решения для различных задач, упрощая работу с данными и взаимодействием между компонентами.
Nest.js значительно ускоряет процесс разработки. Благодаря встроенным возможностям, он автоматически генерирует модули, контроллеры и сервисы, быстро развивая и расширяя функциональность.
Поддержка unit-тестирования и тестирования из коробки помогает уверенно разрабатывать новый функционал, минимизируя риск повредить уже существующий код.
Nest.js создан на базе Node.js и использует его асинхронные возможности для достижения высокой производительности и минимального времени отклика. Это важно для нашего сервиса, обрабатывающего большое количество запросов в режиме реального времени.
Таким образом, Nest.js предоставляет все необходимые инструменты для создания надежного и масштабируемого бэкенда, являясь отличным выбором для проекта.
Водители проходят медосмотр на специально разработанных терминалах с датчиками. Их два типа: стационарный и мобильный.
Стационарный терминал включает планшет и устройства для измерения различных параметров: давления, уровня алкоголя, температуры, пульса, а также показателей окружающей среды, таких как влажность и температура воздуха. Они нужны для обеспечения точности медосмотров.
Стационарные терминалы чаще всего устанавливаются на крупных предприятиях, где требуется устойчивое и полноценное оборудование для выполнения медицинских осмотров.
Мобильный терминал — компактное устройство, похожее на стационарный терминал, но без функции планшета. Он подключается к телефону по Bluetooth и подходит для предприятий с ограниченным бюджетом или использования в полевых условиях.
Получается, что терминалы работают на основе мобильного приложения, установленного на планшете или смартфоне самого водителя.
Для реализации применяем технологии:
Благодаря асинхронному подходу, реализованному с помощью Kotlin Coroutines, часть задач выполняется в фоновом режиме. Поэтому снижается нагрузка на главный поток, интерфейс становится более отзывчивым, а работа при взаимодействии с терминалом плавной.
Еще одним инструментом является CameraX для работы с камерой устройства, которая записывает видео медосмотра, фотографирует документы водителя и его лицо, измеряет освещенность в помещении. Функция документирует процесс и улучшает качество проводимых медосмотров.
Все терминалы оснащены принтером для печати заключений. Автоматическая печать реализована с помощью асинхронного программирования и выдает результаты сразу после завершения медосмотра.
Специально для терминала в системе была создана локальная база для хранения логов на основе Room (библиотека-обертка над SQLite). Дает быстрый доступ к данным и повышает производительность.
Все эти технологии и подходы позволяют проводить медицинские осмотры в любых условиях и на различных предприятиях, не теряя точности и надежности результатов.
Важной составляющей Tetron МеdExplorer является система электронных цифровых подписей (ЭЦП).
Электронная цифровая подпись — мощный инструмент, подтверждающий подлинность и целостность электронных документов, а также авторство отправителя. ЭЦП заменяет собственноручную подпись и печать на документах. Без нее вы даже не зайдете в систему, ведь именно она идентифицирует личность медика.
Для интеграции с ЭЦП мы используем API Crypto Pro и расширение для браузера “КриптоПро”. Со стороны кода подключение реализовано на основе библиотеки crypto-pro, предоставляющей методы для чтения и подписания.
На фронтенде реализованы функции для работы с ЭЦП: получение доступных сертификатов пользователя с приватным ключом, проверка валидности ключа и создание подписи по хэшу.
Процесс формирования и подписания отчета о медосмотре включает несколько этапов:
В условиях цифровизации и удаленной работы, надежность и безопасность данных становятся приоритетными задачами. И внедрение ЭЦП гарантирует их максимальную защиту.
Рассмотрев изнанку платформы “Tetron МеdExplorer” для проведения медосмотров, мы можем сказать, что она является современным решением с высоким уровнем стабильности и безопасности. Она сочетает в себе удобство использования для разных категорий пользователей, начиная от водителей и медиков и заканчивая администраторами.
Системы безопасности, Firewall и API Gateway, защищают данные на всех этапах их обработки и передачи. Микросервисы обеспечивают гибкость и масштабируемость, позволяя системе эффективно справляться с различными задачами.
Ресурс не только облегчает процесс медосмотров, но и гарантирует точность и достоверность получаемых результатов. Внедрение ЭЦП - яркий пример того, как технологии могут оптимизировать рабочие процессы и повысить доверие к цифровым документам.
Tetron МеdExplorer – результат слаженной работы команды NooSoft, стремящейся к постоянному совершенствованию. На каждом этапе разработки уделяем особое внимание безопасности и удобству использования.
Мы продолжаем работать над улучшением сервиса, чтобы он стал еще более надежным инструментом для любых транспортных компаний.