В разработке есть такой термин, как жизненный цикл программного обеспечения - от технического задания до снятия системы с эксплуатации. Моя система прошла все этапы жизненного цикла. Хочу рассказать, как появилась, запускалась и работала система, какой опыт при ее внедрении приобрел, какие эмоции получил и какие уроки извлек. История о том, как в одиночку создать приложение, понравиться пользователям, но проиграть как менеджер.
![](https://habrastorage.org/getpro/habr/upload_files/463/2ab/c99/4632abc990562911dcfe95085c73f3da.jpg)
От идеи до внедрения… как это было
Генератором идей сам никогда не был - воплощал, как правило, чужие идеи. Система электронной истории болезни появилась благодаря идее и инициативе руководителя кардиологической клиники и ведущего статистика. Клиника располагалась в довольно скромном 4-этажном здании, но имела свою лабораторию и занималась функциональной диагностикой, а также только-только начинала проводить эндоваскулярные операции. Главврач предложил сделать "Word для врачей", облегчить бумажную рутину плюс собрать статистику лечения по профилю. Идея укладывалась в простое решение – открытие электронной карточки пациента, куда в несколько полей должна вводиться информация о состоянии пациента, проведённых обследованиях, анализах и лечении. Для статистики были заведены справочники, разработаны отчёты. По завершении приёма врач кнопкой "Печать" формирует "историю болезни". Незамысловато и просто для 2010 года. Техническое задание сформировали на 10 страницах, зафиксировав общие договоренности. Оплата за разработку составила месячную заработную плату разработчика на заводе, где я в это время работал. Сложностей в разработке не было.
Реализация не затянулась, и спустя некоторое время мы с женой начали заниматься в клинике внедрением программы и обучением специалистов. Запуск системы оказался тяжёлым. К объективным трудностям при запуске программы прибавились пользовательские проблемы владения ПК: сложности с интерфейсом; неудобно и непонятно, жаловались специалисты, которых мы обучали. На основной работе пришлось взять трудовой отпуск. Бились (иначе не скажешь) две недели. Вернулся на завод, а жена продолжала работу в клинике ещё на протяжении такого же времени. Успешно запустить программу, научить пользователей и не развестись, не разбежаться был наш челлендж. Почти как ремонт, когда все на нервах. Накал страстей и эмоций был действительно велик, возникало много вполне естественных вопросов и проблем. В этот момент у пользователей вдруг возникло недоверие к программе – то, чего мы никак не ожидали. Да, была допущена ошибка, которая, в некоторых случаях, приводила к искажению данных в истории болезни. Ошибка, конечно, была быстро найдена и исправлена, важнее стало восстановить доверие к программе; не сразу, но удалось и это.
Технически программа представляла собой приложение на Delphi с базой данных Firebird версии 1.5. Программа Электронный эпикриз проработала около трёх лет, не получив особо интересных развитий в части интерфейса. Это было основное окно программы.
![Электронный эпикриз Электронный эпикриз](https://habrastorage.org/getpro/habr/upload_files/742/cbf/85b/742cbf85bb0eaf6c2aeebd0d42a6b4b7.png)
В 2015 году кардиологическая клиника расширилась, образовался кардиохирургический центр, включивший в себя и клинику с Эпикризом. В новом здании появились новые отделения. Руководство предложило новый контракт на развитие системы. Мы сформировали ТЗ для разработки более серьёзной программы, в которой уже должны работать врачи-хирурги, средний медицинский персонал, лаборатория, сотрудники склада медпрепаратов. Программа получила название КардиоКарта. Функционал значительно расширился за счёт ввода дополнительных отделений - реанимации, трансфузиологии, электрофизиологических исследований и целого комплекса консультационно-диагностических услуг. Не справляясь уже с нагрузкой по доработке программы вечерами, решил уволиться с завода и перейти в кардиохирургический центр на полную ставку, приняв предложение руководства медучреждения.
Появилась возможность уделять больше времени доработке интерфейса, удобству программы и новому функционалу. Каждодневно общаясь с врачами и медперсоналом, с головой погрузился в изучаемую тему, отмечая для себя все нюансы далекой от меня профессии. Создал пусть не универсальную, но востребованную на тот момент программу, учитывая желания и требования врачей.
Руководство кардиохирургического центра генерировало идеи, и мне это нравилось. Центр приобрёл лабораторное оборудование в Турции, с самописной интеграцией. Мы интегрировались системами через переводчика на ломаном английском. Общими усилиями интеграция взлетела и работала все последующие годы. Единственное, что ломалось в связке, — это COM-порты на оборудовании.
![Картотека медицинских карт Картотека медицинских карт](https://habrastorage.org/getpro/habr/upload_files/175/86d/512/17586d512a688969b87578d865822161.png)
Следующими этапами было подключение отделений фармакологии, анестезиологии, трансфузиологии с учётом гемаконов, онлайн -доступа к системе. Параллельно появилось несколько вспомогательных программ для работы фармакологии: печать лейблов на препаратах для выдачи пациентам и взаимодействие с бухгалтерской системой в виде фоновых задач для справочников и переноса остатков.
![Окно осмотра пациента лечащим врачом Окно осмотра пациента лечащим врачом](https://habrastorage.org/getpro/habr/upload_files/ee3/552/dc3/ee3552dc3a166c969284a6fcd6980301.png)
С онлайн - доступом был интересный случай. За неделю до приезда высокого начальства директор решил их удивить показом не только программы, но и сайта, на который можно зайти по телефону и просмотреть истории. Понимая, что быстро создать сайт нереально, он предложил сделать муляж со статичным контентом. Даже начали выбирать пациентов для отображения. Я воспринял это как вызов и за пару ночей с фреймворком Django, Bootstrap сделал более - менее рабочий вариант сайта с нормальным функционалом: список пациентов, просмотр дневников, анализов, инструментальных исследований, ну и, конечно, сверху небольшой логотип с сердечком. В итоге удалось не просто удивить, а сделать дополнительное средство работы с системой. Онлайн - версия стала развиваться дальше. Сейчас, оглядываясь назад и вспоминая то время, удивляюсь, как мы вообще избежали взломов и атак со стороны вредителей. Защита была на собственном сервере, никаких специалистов по безопасности не было.
![Несколько демонстрационных экранов (ФИО сгенерированы случ. образом) Несколько демонстрационных экранов (ФИО сгенерированы случ. образом)](https://habrastorage.org/getpro/habr/upload_files/1e9/55c/ed9/1e955ced9aa6cb7e85fb7e8a442b44ee.png)
В 2016-2017 годах в Республике Казахстан начался переход на электронный документооборот. В большей части это касалось госорганов и социальных служб. Медицина по-прежнему вела бумажные эпикризы. Вся документация была представлена в бумажном виде. Не знаю точных ежемесячных затрат на бумагу, но, думаю, они были значительные. Директор предложил своё видение этой проблемы: раз страна идет на цифровизацию, то и на местах следует проявить инициативу. Решение не заставило себя ждать: руководство объявило о прекращении ведения бумажной истории болезни. Выписной эпикриз печатали пациенту в сокращенном виде и выдавали при выписке. Остальная документация оставалась исключительно в электронном виде. Это был важный этап для нас и для нашей программы: нам и нашей системе доверяли. К этому времени была проведена большая работа по защите и журнализации данных. Ситуации были разные: смерть пациента, прокурорские расследования по историям болезни. В системе была журнализация, которая за всем следила. Делал её сначала для себя, чтобы обезопасить себя относительно изменения данных. Пароли делали надёжные плюс вход по ЭЦП. Работа с ЭЦП реализована через библиотеку криптопровайдера CC Kalkan, основанную на исходном коде продукта OpenSSL. Криптопровайдер CC Kalkan - это разработка Национального удостоверяющего центра для сторонних приложений для работы с ЭЦП.
![Подключение к системе с использованием ЭЦП Подключение к системе с использованием ЭЦП](https://habrastorage.org/getpro/habr/upload_files/c57/8da/918/c578da91867a6c36ddaa714b08e540cc.png)
Достаточно много технических вызовов было при работе с новой системой. В подчинении состояли три технических специалиста, которые занимались железом, консультациями по офисным программам, сети и прочим делам. На мне было администрирование домена, планы архивации, закупки оборудования, а также периодическое решение проблем с медоборудованием.
Госзакупки
Работа в штате не айтишной компании была тяжёлой и стала напрягать: много задач, не соответствующих моей специализации. Плюс в этот момент получил российское гражданство. Решил открыть ИП и сосредоточиться на разработке. Руководство было лояльно к этой идее. Однако возник вопрос интеллектуальной собственности. Претензий на софт у кардиохирургического центра не было. Исходные коды остались за мной. ИП и права интеллектуальной собственности оформил на родственника. Интеллектуальная собственность на нерезидента стала ещё тем испытанием. Мы с женой занялись бухгалтерией, разработкой и сопровождением.
По оплате договорились превратить сумму заработной платы в стоимость сопровождения и перейти к форме взаимодействия через юридические лица. Однако здесь была засада. Центр был частично государственным. Это значит, что все контракты должны проходить через госзакупки. А госзакупки, надо сказать, - это отдельная история с большими проблемами, особенно, когда ты один занимаешься этим архисложным вопросом и делаешь это в первый раз. Разыграли первый конкурс, и, конечно же, я проиграл. Сопровождать систему без исходных кодов набралось около 5-6 разных компаний. Выиграл конкурс предприниматель из Алматы, направил своих технических специалистов на знакомство с программой. Но без исходников вносить изменения не получилось. Решили отправить менеджеров договариваться, предложив мне 40% от стоимости договора. Не смогли договориться; в итоге кардиохирургическому центру пришлось судиться с ними из-за невозможности получить услугу по договору. Суд принял сторону медучреждения, рекомендовав в будущем использовать защищённые интеллектуальные права на программу и заключать договор напрямую с пометкой об интеллектуальной собственности. Оставь я права на свой софт в центре, утратил бы уже при первом закупе и центр, и своё приложение. Потеряв месяц в судебных тяжбах и разбирательствах, в следующей итерации закупок мы уже указали требование на привязку к интеллектуальной собственности и наличии исходных кодов для внесения изменений. Благо, контракт заключается на весь год; на год я забыл о проблемах и сосредоточился на работе.
На рынке быть – по-волчьи выть
Пользователи программы - врачи-функционалисты, кардиохирурги - на городских и областных конференциях делились впечатлениями и успехами использования программы. Директор центра на своем уровне также подчёркивал достижения в автоматизации выполнения медперсоналом рутинных вещей; в качестве доказательства, что с использованием программы далеко ушёл от своих коллег, демонстрировал "мобильное приложение". И в какой-то момент ко мне пришли с деловым предложением адаптации системы к двум другим больницам. Работы было довольно много, были организованы совместные встречи, диалоги с заинтересованными лицами. Обозначился круг проблем, которые предстояло решить, - интеграция с лабораторией, где оборудование сильно отличалось от того, что использовалось в кардиохирургическом центре, отсутствие модуля взаимодействия с железом лаборатории на низком уровне, изменение профиля программы с кардиологического на общий.
На встречах впервые услышал фразу: "Мы же с вами бизнесмены, давайте договариваться". Это значило, что необходимо заплатить деньги, чтобы пройти конкурс, который был бы организован в рамках тендера. Гарантий принятия акта выполненных работ никто, конечно же, не обещал. Это уже зависело от самих работ по запуску системы. Вопроса такого ранее не возникало, я оставался разработчиком, а не бизнесменом, который должен ещё и платить деньги заказчику за продукт. Было несколько встреч вне рамок лечебного учреждения (прямо как в фильмах о шпионах), где озвучивалась сумма. Она была весьма демократичная, видимо, хотели получить премию к заработной плате. До сих пор меня это удивляет, что не жадничали они.
![Photo by Pavel Danilyuk: https://www.pexels.com/photo/shallow-focus-of-two-people-handshaking-5520322/ Photo by Pavel Danilyuk: https://www.pexels.com/photo/shallow-focus-of-two-people-handshaking-5520322/](https://habrastorage.org/getpro/habr/upload_files/7c5/c0a/c22/7c5c0ac22835abbe7974bc24f0884e69.jpg)
Конкурс - сложная процедура, требующая предоставления большого количества документов. И это не только список работающих в фирме сотрудников, но и полная их характеристика - какую работу выполняют, какими знаниями обладают. В общем, говоря современным языком, имеются ли ресурсы для участия в проекте. Всё было сделано как надо: два разработчика, сотрудник технической поддержки, руководитель. Для нового большого проекта я готов был нанять людей и платить им.
Конкурс был проигран по стоимости. Участвовало несколько компаний, в том числе и российская, но победила в конкурсе компания с южного Казахстана. Она же занялась адаптацией своей системы. Через определённое время они запустились, но сложности были с оборудованием лабораторий. Проигранный конкурс не стал шоком и не вызвал никаких других чувств, кроме желания и необходимости двигаться дальше.
Второе предложение было более лояльным. Мы договорились о внедрении готовой программы в клинику гораздо большего формата. Наученные горьким опытом предыдущих конкурсов и тендеров, решили пойти по проторенной дорожке: устроиться работать разработчиком и внедрять программу в рамках своих обязанностей без передачи интеллектуальной собственности клиенту, таким образом оставив за собой будущую доработку и сопровождение. Всё шло по плану до тех пор, пока мы не встретились с финансовым директором клиники. И без объяснения причин расстались. Не было негатива, предложений об откате, претензий, просто один отработанный день - и до свидания. Предполагаемая причина - это наступление конкурентов, которые шли не просто по пятам, а с опережением.
Конкуренция на рынке
Конкуренты начали не с поликлиник и медцентров, а с местного департамента здравоохранения с целью охвата всех клиник под одно надёжное крыло. Предлагаемая система ориентирована на онлайн, потребности департамента и создания единого центра получения отчётности. Изначально правильный подход с централизацией и задействованием административного ресурса сверху.
Первая система, с которой конкурировали, заменила поликлиническую часть КардиоКарты. Приложение было написано также на Delphi, с базой данных на Oracle. Внедрение было очень долгим, тяжёлым. Требовалось новое железо с выделенным тестовым сервером. Руководство очень удивлялось разнице в подходах при запуске программ. В моём случае использовалось имеющееся оборудование, у «новых» всё по правилам: новая задача - новое железо, новые затраты и лицензии на софт. Внедрение ещё и усложняли мои старые пользователи, которые не хотели перехода. Не со зла, а от привычки к программе, которая стала для них удобной и понятной. Переучиваться пришлось полностью. Часть поликлиники осталась за КардиоКартой, потому как функциональная диагностика стационарных больных проводилась в ней. Пользователи работали сразу в двух программах. В случаях сбоев переходили в КардиоКарту. С технической поддержкой конкурентов установились тёплые отношения, общались, помогали друг другу. Их заинтересовало несколько практических решений по удобству заполнения протоколов осмотров в моей программе. В их системе была похожая функциональность, но выглядела она сложно и путано.
Я старался объективно оценить программу конкурентов, и всё же она казалась мне громоздкой. Это был некий конструктор, из которого можно было всё собрать, настроить окна. Некая 1С в сфере медицины. Справочники содержались в одной большой таблице с типом справочника. Позже, разобравшись в их системе, даже консультировал пользователей. Система прожила около года. Поменялось руководство в департаменте - пришли и новые менеджеры с новой системой.
![Photo by Pixabay: https://www.pexels.com/photo/battle-board-game-castle-challenge-277124/ Photo by Pixabay: https://www.pexels.com/photo/battle-board-game-castle-challenge-277124/](https://habrastorage.org/getpro/habr/upload_files/41d/d1c/5e1/41dd1c5e171504637e7897016cdd09e0.jpg)
Следующая компания готова была автоматизировать медицину комплексно. Вот это уже были более сильные конкуренты. Полностью онлайн - система с серверами у местного монополиста связи с резервированием, безопасностью и всем необходимым для работы качественной системы. Руководство центра держалось и просило отсрочку запуска у себя с мотивацией, что имеется собственная система, которая удовлетворяет их полностью. Все понимали, что процесс запущен и его не остановить. Активной разработки с моей стороны уже не было, новый функционал не требовался. Основная работа состояла в поддержке, консультациях, анализе исторических данных. В системе накопился большой объём аналитических данных, которые можно использовать в защите диссертаций и исследований.
Скучная статистика по системе и инструменты работы
Размер базы данных | 50 Гб |
Количество таблиц | 170 |
Общее количество пользователей | 630 |
Активное количество пользователей (ежедневно) | 70 |
Количество историй болезни | 38703 |
Количество уникальных поликлинических записей | 34560 |
Записей журнала изменений | 190М записей |
Кодовая база | 290 файлов |
Срок эксплуатации | ~10 лет |
База данных | Firebird 2.5 |
Среда разработки | Delphi 2010, Python, Ibexpert |
Где система сейчас?
Система официально снята с эксплуатации. Исторические данные доступны в системе. Анализ данных добрался и до медицины среди интересующихся врачей и статистиков. В поликлинике периодически используется во время простоя основной системы при осмотрах для формирования и печати функциональных обследований. Сопровождение продолжалось после расторжения контракта ещё несколько месяцев, но в итоге сошло на нет.
Было несколько публикаций о программе в местных интернет изданиях: раз и два.
Найти новых клиентов для программы сложно по причине жёсткой привязки к единственному заказчику. Плюс особенности программы для медучреждений Казахстана усложняют адаптацию для России.
Профит
На протяжении всего времени (а это без малого 10 лет!) кардиохирургический центр зарекомендовал себя как надёжный партнёр, с которым было приятно работать, реализовывать их идеи и пожелания. Результаты нашей совместной работы были видны сразу. Врачам становилось проще работать, статистикам - собирать данные. Недостаточно хорошо, правда, был охвачен финансовый учёт, причина в отсутствии заинтересованности у финансового отдела.
Успех программы очень прост: она разрабатывалась под конкретное предприятие с учётом его специфики и пожеланий пользователей, дорабатывалась оперативно и в срок. Могу сказать, что, работая в штате медицинского учреждения, достиг максимального погружения в специфику медицинской профессии. Руководство центра поступило очень обдуманно, предложив реализовать сначала простое приложение, с незамысловатым интерфейсом, подготовив пользователей к более сложному решению. Внедрение последующих систем шло проще среди подготовленных пользователей.
Как специалист получил технические знания в области Python, настройки серверов, администрирования баз данных, оптимизации запросов.
Возможно, не было сделано главного – не удалось собрать, создать команду, которой под силу было бы решение сложных и трудных задач. Мы могли бы сделать больше. Были специалисты технической поддержки, в том числе и моя жена, но программа так и осталась программой одного разработчика. Не было видения развития системы хотя бы в обозримом будущем, вне клиники с кардиологическим уклоном. Не ухватил идею развития системы онлайн. Причина утраты влияния программы видится и в отсутствии управленца. Приходилось работать с заказчиком, а вечером реализовывать его требования и предложения. Наутро же снова становишься менеджером и общаешься по госзакупкам. Быть в одном лице разработчиком, менеджером и бизнесменом сложно. В долгой перспективе, как показал мой опыт, у меня не получилось. И все же этот опыт бесценен. Вопреки расхожему мнению, что один в поле не воин, берусь утверждать обратное. Смысл жизни в том и состоит, чтобы реагировать на вызовы, любить свою работу и ловить при этом кураж.