Внутреннее ПО для лабораторного анализа данных
Спроектировали и внедрили десктоп-приложение для лаборатории контроля качества пищевых продуктов.Клиент
Лаборатория контроля качества пищевых продуктов. Занимается регулярным анализом образцов сырья и использует спектроскопические методы для выявления примесей и отклонений от эталонных показателей. Воспроизводимость результатов и стабильность анализа здесь важнее скорости единичного расчета.
В 2019 году лаборатория обратилась к нам с задачей создать инструмент для работы со спектроскопическими данными, в котором специалисты смогут загружать данные, сравнивать образцы и фиксировать результаты в рамках единого рабочего процесса.
Вызовы
Лаборатория работает с потоками измерений: ежедневно обрабатываются серии спектров, формируемые партиями образцов. В таких условиях важна не разовая корректность расчета, а устойчивость результатов при постоянной нагрузке.
Также важно было связать обработку данных с реальными рабочими процессами лаборатории, а не переносить в интерфейс приложения абстрактную модель анализа.

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

Работа с сериями измерений
Данные поступают партиями, а не по одному файлу. Приложение должно уметь загружать и обрабатывать массивы измерений, позволять сравнивать чистые и загрязненные образцы при больших объемах данных и сохранять стабильность работы при больших объемах данных.
Как это выглядело на практике:
С чего мы начали
Отправной точкой стало изучение реальных спектроскопических данных, примеров измерений и описания текущей работы лаборатории. Техническое задание мы формировали по ходу проекта – по мере того, как прояснялось, какие сценарии действительно используются каждый день, а какие выглядят логично на бумаге, но не работают в реальной лабораторной практике.
Сознательно отказывались от универсальных функций в пользу более жесткой и предсказуемой логики работы. Например, мы отказались от сценариев, при которых результат анализа мог меняться из-за незначительных действий пользователя в интерфейсе, и зафиксировали четкие правила обработки данных.
Первый рабочий экран
Сначала мы собрали простой экран для загрузки данных и сравнения образцов. Он позволял просматривать результаты измерений, переключаться между образцами и сопоставлять их между собой. Этот экран стал основой для формирования рабочего интерфейса приложения. Доводили и дорабатывали, опираясь на фидбэки от клиента.
Интерфейс выполнили на английском языке – в соответствии с привычной для лаборатории средой работы с измерительным оборудованием и аналитическими инструментами.
Работа с сериями данных
Лаборатория изначально использует серии измерений, поэтому архитектура приложения сразу проектировалась под загрузку и обработку данных партиями, а не отдельными файлами.
Библиотека образцов
По мере развития приложения стало ясно, что данные нужно каким-то образом хранить и использовать повторно. Так появилась библиотека образцов с разделением на чистые и загрязненные измерения и возможностью пополнять ее новыми данными.
Готовность к повседневной работе
Когда приложение начали использовать в лаборатории постоянно, наше внимание сместилось на эксплуатацию. Мы довели приложение до состояния стабильного рабочего инструмента, который легко устанавливать локально.
Как мы встроили математику
Часть математических расчетов уже использовалась в лаборатории и была интегрирована в рабочий процесс. Мы встроили эту логику в приложение так, чтобы расчеты запускались в строго определенных точках обработки данных и возвращали результат в том же виде, в каком специалисты привыкли с ним работать.
Это снизило влияние человеческого фактора: специалисты работают с зафиксированным результатом анализа, а не с постоянно меняющимися значениями в процессе просмотра данных.
Основная инженерная сложность
Основная инженерная сложность – определить четкие точки, в которых система считает данные и фиксирует результат.
В процессе стало очевидно, что попытки пересчитывать результаты на лету при работе с сериями измерений приводят к нестабильному поведению интерфейса и разночтениям в итогах анализа, особенно при больших партиях данных.
При работе с сериями измерений мы сознательно отказались от пересчетов при каждом действии пользователя и закрепили расчет как отдельный, финализируемый этап обработки партии данных. Расчеты запускаются только после загрузки и проверки партии данных, а результат фиксируется как итог анализа, с которым специалист работает дальше. Это позволило избежать лишних просчетов и ситуаций, когда итог анализа меняется из-за незначительных действий в интерфейсе.
Технологии
Бэкенд
.Net
Бэкенд
C#
Фронтенд
WPF
Математика и расчеты
Matlab
Результат
Мы создали решение для локальной лабораторной среды. Поскольку десктоп-приложение не предполагало внешних пользователей, в приоритете были корректность, воспроизводимость результатов и удобство ежедневной работы, а не его внешний вид.
Лаборатория получила удобный инструмент для повседневной работы со спектроскопическими данными и анализа образцов – от загрузки измерений до фиксации результатов. Работа с сериями данных стала проще: специалисты обрабатывают партии измерений, сравнивают образцы и используют библиотеку эталонных данных без ручной подготовки и лишних шагов.
Сегодня приложение стабильно используется в лабораторной практике и спокойно выдерживает рост объема измерений без изменения привычного подхода к работе.
Мы работаем не только с витринными продуктами, но и с внутренними инженерными инструментами, где важны воспроизводимость результатов, устойчивость логики и соответствие реальным рабочим процессам. Проект – демонстрация нашего подхода к таким прикладным задачам.
меньше времени уходит на обработку серий измерений.
Что происходит дальше:
Мы получаем запрос, обрабатываем его в течение 24 часов и связываемся по указанным вами e‑mail или телефону для уточнения деталей.
Подключаем аналитиков и разработчиков. Совместно они составляют проектное предложение с указанием объемов работ, сроков, стоимости и размера команды.
Договариваемся с вами о следующей встрече, чтобы согласовать предложение.
Когда все детали улажены, мы подписываем договор и сразу же приступаем к работе.