Разработка ПО

С 2022 года я активно занимаюсь full-stack веб-разработкой под руководством наставников с более чем 15-летним опытом в индустрии. У меня есть практический опыт работы с такими технологиями, как React, Angular, Express, Nest, Prisma ORM, Postgres, SQLite, Git/GitHub Actions. При этом я уделяю внимание пониманию ключевых концепций программирования, таких как алгоритмы, ООП и SOLID, что помогает мне не просто использовать инструменты, а разбираться в сути задач.

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

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

Cайт визитка для GR компании

MAN PREMO - GR Company Website

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

Next.jsTailwindAntDTypeScriptGitGithubVPSNginxUptimeRobot
Предложение проекта и анализ
  • Заказчик предложил выполнить работы по разработке сайта в течение трех месяцев
  • Заказчиком был предоставлен brandbook, который нужно было использовать в проекте
  • В brandbook были определены шрифт, цвета, изображения, иконки

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

Инициация
  • Заказчик не имел детального технического задания
  • Необходимо было согласовать шаблон договора
  • С заказчиком были детально обсуждены требования: количество и перечень страниц, примерное содержание, возможности отклоняться от brandbook, отсутствие форм обратной связи, возможность мультиязычности в будущем, ответственный за хостинг, доменное имя, базовая настройка SEO
  • Данные требования были зафиксированы в техническом задании, которое было приложением к договору
  • Договор был согласован и подписан
Планирование и исполнение
  • Необходимо было выбрать стек технологий
  • Адаптировать брендбук для сайта
  • Согласовать контент сайта
  • Обеспечить хостинг и деплой
  • Выполнить базовую настройку SEO
  • Настроить мониторинг сайта
  • Для исполнения задачи был выбран Next.js, из-за возможностей SEO, удобства разработки, производительности
  • Также с точки зрения удобства разработки был выбран tailwind
  • Несмотря на то, что на сайте нет сложных элементов интерфейса, на будущее был выбран AntD как библиотека UI компонентов
  • При разработке сайта использовался mobile first подход
  • Для деплоя сайта использовался Github actions
  • Доменное имя было зарегистрировано заказчиком, но было решено использовать мой хостинг (VPS). DNS записи были соответствующим образом настроены у моего хостинг провайдера
  • Выполнена настройка сайта в Яндекс.Вебмастере и установлена Яндекс.Метрика
  • Настроен мониторинг сайта с использованием сервиса UptimeRobot
Закрытие и поддержка
  • Приемка работы заказчиком
  • Дальнейшая поддержка сайта
  • Сайт был принят и подписан акт выполненных работ
  • Выполняется мониторинг сайта, проверка работоспособности

Веб-приложение для Фармаконадзора

Pharmacovigilance Web Application

Данный проект является опытом создания комплексного программного обеспечения, предназначенного для автоматизации ключевых процессов в сфере фармаконадзора. Приложение отличается сложным пользовательским интерфейсом, необходимым для работы с большим объёмом структурированных данных, и комплексной бизнес-логикой, автоматизирующей весь жизненный цикл нежелательных реакций. Главной задачей проекта было строгое соответствие международному стандарту E2B(R3), который является объемной спецификацией включающей в себя целый ряд pdf/XML/xlsx документов. Данное веб-приложение используется в организации ООО "Атлант Клиникал" для ведения фармаконадзора.

DockerNestJSAngularPrismaPostgresxlsxTypeScriptjestPrimeNGTailwindJasmineGitGithubVPSNginx

Тестовая версия может быть продемонстрирована по запросу

Анализ и инициация проекта
  • Заказчик решил развивать новое направление услуг - проведение фармаконадзора для фармкомпаний, и обратился ко мне с данным предложением
  • Фармаконадзор - это деятельность по сбору, репортированию и анализу нежелательных реакций на препараты
  • Для этой работы необходимо программное обеспечение в соответствии со стандартами, принятыми в индустрии
  • Необходимо было оценить возможность реализации данного проекта и сформулировать цели
  • Был выполнен обзор текущего стандарта E2B(R3)
  • Проанализированы доступные демонстрационные версии уже существующих программ
  • Сделан вывод о том, что имеющиеся знания и опыт позволят как детально разобраться в стандарте, так и реализовать программное обеспечение, соответствующее стандартам индустрии
  • Цель проекта была сформулирована как создание SaaS веб-приложения для ведения фармаконадзора, соответствующего стандарту E2B(R3), и другим требованиям индустрии (GVP, GMP, 21 CFR Part 11)
E2B(R3) Standard Structure

Целью фармаконадзора является сбор и анализ данных по нежелательным реакциям, которые должны затем быть отправлены в регуляторные органы (Росздравнадзор) в виде XML сообщения (ICSR). Состав ICSR сообщения и схема XML строго определены и закреплены в стандарте E2B(R3). Каждое сообщение состоит из нескольких частей с различной степенью вложенности. В каждой части содержится множество элементов данных, которые должны быть собраны и структурированы в соответствии со стандартом.

E2B(R3) Data Element Structure

Каждый элемент данных в свою очередь также имеет свою структуру с определенными типами данных, согласно стандарту. Всего в стандарте более 250 элементов данных, которые могут быть включены в сообщение. Между элементами существуют многочисленные зависимости и правила валидации.

E2B(R3) XML Generation

Как итог, сообщение должно быть сформировано в виде XML файла с определенной стандартом структурой. Реальные сообщения имеют сотни элементов с несколькими уровнями вложенности и размер более 1000 строк

Планирование и реализация
  • Необходимо было определиться с последовательностью и приоритетами этапов разработки
  • Определить технологический стек для проекта, учитывая функциональные и нефункциональные требования
  • Найти путь к автоматизации создания элементов интерфейса, схемы базы данных и бэкенда на основе данных спецификации
  • Внедрить системы контроля доступа, ролей, аутентификации и авторизации
  • Разработать жизненный цикл нежелательных реакций, включающий в себя создание, редактирование, хранение, поиск, экспорт и отправку сообщений
  • Разработать подход к развертыванию (деплою) приложения с учетом масштабирования и быстрого подключения новых SaaS-клиентов
  • Валидировать систему в соответствии с 21 CFR Part 11 и GMP
Этапы разработки

Перед заказчиком стояла задача скорейшего ввода системы в работу с минимальным функционалом, который позволял бы вносить и сохранять данные в базе. Наиболее сложной частью приложения в данном случае являлся интерфейс пользователя, который должен был включать в себя более 250 элементов, каждый из которых требовал в свою очередь сложной комбинации полей ввода и элементов управления. Со стороны бэкенда наибольшую сложность представляла собой генерация XML сообщения на основе базы данных, учитывая все требования стандарта. Исходя из этого последовательность этапов была определена следующим образом:

  1. разработка интерфейса пользователя, корректно отображающего все элементы стандарта E2B(R3)
  2. создание базы данных и бэкенда, чтобы скорейшим образом реализовать запись данных заказчиком, включая генерацию XML
  3. внедрение систем аутентификации, авторизации и прав доступа на документы
  4. разработка жизненного цикла нежелательных реакций
  5. тестирование работы приложения с реальными кейсами и исправление ошибок
  6. создание системы деплоя приложения для быстрого подключения новых клиентов
  7. валидация
Технологический стек
AngularTailwindPrimeNG

Выбор Angular для данного проекта обусловлен его высокой структурированностью и широкими возможностями для разработки сложных интерфейсов. Как библиотека UI компонентов была выбрана PrimeNG, в силу ее связи с Angular и большого количества доступных компонентов. Tailwind был использован для удобной стилизации компонентов

NestJSPrismaPostgres

Nest.js был выбран в силу его структурированности и возможностей для создания сложной бизнес-логики. Prisma ORM был использован для удобной работы с базой данных Postgres. Postgres был выбран как надежная и производительная реляционная база данных

DockerNginx

Каждая часть приложения (фронтенд, бэкенд, база данных) была упакована в отдельный docker контейнер. Связи между контейнерами были настроены с помощью docker-compose. Nginx используется для управления запросами к соответствующим контейнерам

Генерация UI и схемы базы данных

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

E2B(R3) Standard Table

Стандарт E2B(R3) содержал таблицу с перечнем всех элементов и их свойств. Данная таблица была модифицирована, дополнена, конвертирована в json и использована как основа для генерации схемы каждого элемента.

Frontend Schema-based Rendering

Фронтенд автоматически отображает элементы в зависимости от их схемы, таким образом позволяя вносить все типы данных, требуемые стандартом: текст, числа, даты (в специальном формате), логические значения, списки, файлы и т.д. Также из схемы берется подсказка по правилам внесения данных в конкретный элемент

Prisma ORM Schema Generation

Также схемы элементов были использованы для автоматической генерации схемы базы данных

Бэкенд
  • Были написаны необходимые методы для CRUD операций с базой данных для всех элементов, реализованы необходимые сервисы на frontend для отправки форм.
  • Была реализована валидация внесенных пользователем данных и обратная связь в случае ошибок или несоответствия стандарту.
  • Реализована генерация XML путем подстановки данных из базы в шаблоны XML элементов
Authentication and User Rights System

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

Жизненный цикл сообщения

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

Adverse Reaction Lifecycle
Использование системы и исправление ошибок
  • Через 4 месяца с инициации проекта приложение было способно обрабатывать реальные случаи и стало использоваться для внесения записей по реальным кейсам
  • Обнаруживаемые ошибки устраняются в рабочем режиме
Деплой системы и масштабирование
  • Приложение будет разворачиваться для каждого SaaS клиента на отдельном VPS сервере
  • Это позволит изолировать базы данных разных клиентов и повысить безопасность приложения
  • Благодаря контейнеризации развертывание приложения на новом сервере занимает минимальное время
  • CI/CD построен через Github actions таким образом, что обновленное приложение будет автоматически загружено на сервер каждого клиента
Administration Application

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

Валидация
  • Необходимо разработать план валидации
  • Провести анализ рисков
  • Документировать требования и спецификации (URS и FS)
  • Выполнить квалификацию установки (IQ)
  • Провести квалификацию функционирования (OQ)
  • Осуществить квалификацию производительности (PQ)
  • Подписать с клиентом полный пакет документации для полноценного внедрения системы
Текущий статус приложения

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