Ресурсы

Изменения

Что и когда меняется в продукте — доказательство живой эксплуатации.

v0.64.0

Безопасность разработки — гигиена секретов (Тир-1)

  • Защита от утечки секретов в репозиторий: перед коммитом и в CI теперь работают сканеры (gitleaks, detect-secrets), а зависимости проверяются на известные уязвимости (pip-audit). Полная история проекта (505 коммитов) просканирована — секретов нет, в зависимостях 0 известных CVE.
  • Добавлены SECURITY.md (как сообщить об уязвимости + план действий при утечке), правила безопасной работы для AI-ассистента в CLAUDE.md, ужесточён .gitignore (ключи, сертификаты, конфиги агентов).
  • Технический фикс: два места с MD5 (кэш-бастинг статики и ключ advisory-lock) помечены как некриптографические — снято ложное предупреждение анализатора.
  • Назначение: повышает доверие к продукту при аудите поставщика ПО (требования GMP / Annex 11) и формализует безопасный процесс разработки.
v0.63.0

Единый шрифт Manrope во всём продукте

  • Приложение, экраны входа, регистрация и сайт переведены на шрифт Manrope — тот же, что на новом лендинге. Современный, с хорошей читаемостью и полной кириллицей. Раньше интерфейс был на Inter.
  • Шрифт self-hosted (грузится с вашего сервера, без интернета и CDN) — работает и в закрытом контуре on-prem. Inter оставлен запасным вариантом.
  • Изменение чисто визуальное: вёрстка, плотные таблицы и журналы проверены — ничего не «поехало».
v0.62.0

Сайт и лендинг — шрифт Manrope (структура без изменений)

  • Новый шрифт Manrope на сайте-витрине и лендинге (self-hosted, с кириллицей, без внешних CDN) — современный, читаемый. Рабочая структура страниц, навбар, все разделы и ссылки сохранены без изменений — это смена оформления, не переезд страниц.
v0.61.0

Экран входа — лоадер-колба и единый стиль on-prem ↔ облако

  • Колба-лоадер на кнопке «Войти»: при отправке формы текст кнопки сменяется фирменной анимированной колбой и держится до перехода на следующую страницу — видно, что вход пошёл. Срабатывает только при заполненной форме.
  • Облачный вход (SaaS) подтянут к тому же дизайну, что и on-prem: «живая» демонстрационная панель слева (анимированная хроматограмма + телеметрия прогона) и бейджи соответствия (ALCOA+ · EU GMP Annex 11 · 21 CFR Part 11). Раньше эти элементы были только на on-prem-входе.
  • Без инлайн-кода (CSP enforcing), учитывается prefers-reduced-motion; логика — в login.js/saas-login.js, стили — в login.css/flask-loader.css.
v0.60.0

Экран входа — новый дизайн (макет дизайнера)

  • Обновлённый экран входа on-prem: «живая» демонстрационная панель слева (анимированная хроматограмма + телеметрия прогона), бейджи соответствия (ALCOA+ · EU GMP Annex 11 · 21 CFR Part 11), бейдж «Локальный сервер» и блок «Сервер организации» (берёт название из org_name + адрес сервера), мягкий градиент-шов между панелями. Вход по PIN-коду оформлен отдельной кнопкой.
  • Всё реальное: форма работает как прежде (логин/пароль/PIN/«запомнить»/«забыли пароль»), без изменений в аутентификации. Без инлайн-кода — стили в login.css, поведение в login.js (CSP enforcing, учитывается prefers-reduced-motion).
v0.59.2

Экран входа — название организации (on-prem брендинг)

  • На странице входа теперь видно, чей это сервер — название организации показывается бейджем над заголовком, в подписи формы («сервер «…»») и в подвале. Пусто → нейтральное «Ваш сервер». Задаётся в Настройки → Лаборатории (применяется сразу, без перезапуска) или переменной окружения ORG_NAME.
  • Левая панель входа стала чуть «живее»: бейдж/заголовок/подпись мягко всплывают по очереди (учитывается prefers-reduced-motion).
v0.59.1

Учёт времени — пауза рассылки отчётов (быстрый тумблер)

  • Еженедельную выдачу «контроля часов» на почту/в чат можно поставить на паузу — одной кнопкой в Настройках (раздел «Пробный период», виден разработчику/владельцу). Удобно, когда использование программы приостановлено: письма с часами перестают уходить, а фоновые агенты учёта продолжают собирать данные — останавливается только рассылка. Включить назад — той же кнопкой, без перезапуска. Дефолт задаёт ATTENDANCE_REPORTS_ENABLED, тумблер в БД имеет приоритет.
v0.59.0

Реактивы — экспорт списка текущего таба

  • Кнопка «Экспорт» на странице реактивов выгружает список текущего таба (категории) в Excel — ровно то, что на экране: учитываются активная категория, область поиска (моя группа / лаборатория / все), строка поиска, фильтры и метки. В выгрузку попадают и доп.-поля категории. Доступно тем, у кого есть право экспорта (export_data). Под капотом фильтрация каталога стала единым источником для страницы и экспорта — выгрузка не разойдётся с тем, что видно.
v0.58.1

Просмотр Word — понятная подсказка вместо ошибки в логе

  • Если на сервере не установлен компонент для Word-превью (mammoth), просмотрщик теперь показывает понятную заглушку «установите зависимости / скачайте файл», а в лог пишет предупреждение один раз за запуск, а не на каждое открытие. Excel/CSV/PDF от этого не зависят и работают. Чтобы включить Word-превью — на сервере pip install -r requirements.txt и перезапуск.
v0.58.0

Фармакопеи и Документы — единая модель организации

  • Один и тот же способ раскладки в обоих разделах. Раньше Документы организовывались типами-вкладками (СОП/инструкция…), а Фармакопеи — папками; получались две разные логики для одной задачи. Теперь везде одинаково: папки верхнего уровня — это вкладки сверху, вложенные — дерево слева. Клик по вкладке показывает всё её содержимое, включая вложенные папки.
  • Типы документов стали верхними папками (разовая автоматическая миграция при обновлении): ваши СОП/инструкции/квалификации и т.п. превратились в папки верхнего уровня, документы разложились по ним. Ручные переносы не затрагиваются. Новые документы кладутся в активную вкладку-папку; «перенести между папками» — кнопкой «Переместить» (как и для нескольких сразу).
  • Метки, мультивыбор, перенос и пакетная загрузка работают так же, как и были, но теперь визуально и по смыслу идентичны в обоих разделах.
v0.57.0

Фармакопеи и Документы — папки, метки, групповые операции

  • Папки (вложенные). Теперь файлы можно раскладывать по папкам с любой вложенностью — слева появилось дерево папок со счётчиками. «Все» и «Без папки» — всегда под рукой. Создание/переименование/удаление папок — у управляющих (admin/разработчик). Удаление папки уводит её файлы в «Без папки» (ничего не теряется).
  • Метки (теги). Цветные метки для классификации (один файл — несколько меток). Фильтр по метке в один клик; отдельное окно управления метками.
  • Выделение нескольких + групповые действия. Чекбоксы у строк: выделил несколько → «Переместить» в папку или навесить/снять «Метку» разом.
  • Загрузка попадает в текущую папку. Если открыта папка, новые файлы (в т.ч. пакетная загрузка фармакопей) кладутся сразу в неё.
  • Всё работает одинаково в обоих разделах — «Фармакопеи» и «Документы» (в «Документах» это поверх привычных типов-групп: СОП, инструкция и т.д.).
  • Пакетная загрузка документов. Кнопка «Загрузить пачкой» и в «Документах»: выбираете несколько файлов — каждый становится отдельным документом, тип берётся из активного таба (на вкладке «СОП» → все СОПы; на «Все» → «Прочее»), а если открыта папка — кладутся в неё. Название — из имени файла.
v0.56.1

Расходники — меньше ложных предупреждений в логах

  • Для прогонов с распознанным методом объём ПФ и так считается по методу (нелепо большая длительность → берётся полный объём метода, не множится), но в логи всё равно сыпалось предупреждение «длительность … превышает потолок — обрезаю». Теперь потолок применяется только там, где он реально влияет — в запасной оценке без метода (объём = поток × длительность). Литры не меняются, лог чище.
v0.56.0

Фармакопеи — пакетная загрузка

  • «Загрузить пачкой»: можно выбрать сразу несколько PDF — каждый станет отдельной фармакопеей, название возьмётся из имени файла (потом легко переименовать или добавить версию). В окне виден прогресс по каждому файлу (готово / ошибка). Файлы заливаются по очереди — это надёжно даже для крупных документов (до 200 МБ каждый).
  • Импорт с сервера одной командой (on-prem): flask import-pharmacopoeias /путь/к/папке — обходит папку с PDF и заводит записи разом (флаги --recursive — со вложенными папками, --force — не пропускать существующие). Команду безопасно запускать повторно: по умолчанию записи с уже существующим названием пропускаются. Импорт фиксируется в журнале аудита как системный.
v0.55.0

Документы — встроенный просмотр Excel и Word

  • Excel (.xlsx) и Word (.docx) теперь открываются прямо в системе, как и PDF — не уходя на другую страницу. Лист(ы) Excel показываются таблицами (каждый лист — своим разделом), документ Word — с заголовками, списками и таблицами. Также можно просмотреть .csv таблицей. По тексту работает поиск (Ctrl+F). Бинарные старые форматы (.doc/.xls) по-прежнему скачиваются.

Встроенный PDF-просмотрщик — без «вечной загрузки»

  • Исправлено «подвисание» при открытии PDF. Спиннер загрузки мог остаться на экране, перекрывая уже готовый документ (встроенный PDF-вьюер браузера не всегда сообщает о завершении загрузки в окне просмотра). Теперь спиннер гарантированно убирается, и документ виден сразу — как при открытии в новой вкладке. В шапке просмотрщика — корректная иконка типа файла (PDF/Excel/Word).
v0.54.1

Уведомления — пагинация

  • На странице «Уведомления» появилась пагинация — как в журнале аудита и истории (по 50 на страницу, кнопки страниц внизу). Раньше список грузился целиком (до 500) и разрастался. Фильтр-чипы (Все / Непрочитанные / по типу) теперь работают на сервере и по всему набору: счётчик на чипе показывает реальный итог, а не только то, что попало на текущую страницу, и фильтр листает страницами. Переход по чипу/странице сохраняется в адресе (можно делиться ссылкой и обновлять).

Журнал аудита — чистка и время

  • Журнал больше не засоряется «пульсом» агентов. Heartbeat хроматографа (онлайн/выполняется/время последней связи) обновляется каждые ~60 сек и раньше писал в аудит строку «Изменено: instrument_online_at» на каждый прибор — журнал был забит этим. Теперь runtime-телеметрия агента в аудит не пишется; в журнал идут только осмысленные изменения (статус, текущий анализ, колонка и т.п.). Старые такие строки не удаляются (это сломало бы защищённую hash-цепочку GMP/Part 11), но скрыты на странице журнала и в экспорте.
  • Исправлено время в журнале аудита — штамп строки теперь в локальной зоне проекта (как и все остальные метки времени), а не в UTC. Раньше время строки расходилось со значениями полей на смещение часового пояса.
v0.54.0

Документы и фармакопеи — встроенный просмотрщик PDF

  • PDF открывается прямо в системе, не уходя на другую страницу. Кнопка «Открыть/Просмотр» у фармакопеи или документа теперь разворачивает файл в оверлее поверх текущей страницы (раньше — открывалась новая вкладка браузера).
  • Поиск по тексту работает (Ctrl+F) — внутри просмотрщика доступен штатный поиск PDF-вьюера браузера, как и просили: листать и искать по фармакопее можно не покидая раздел.
  • В шапке просмотрщика — кнопки «скачать» и «открыть в новой вкладке»; закрытие по Esc или клику вне окна. Просмотрщик единый для фармакопей и документов (PDF, а также PNG/JPG/TXT у документов); работает и в истории версий.
  • Ctrl/Cmd-клик по кнопке по-прежнему открывает файл в новой вкладке — привычное поведение сохранено.
  • Исправлена вёрстка модалки «История версий» (фармакопеи и документы): кнопки «посмотреть»/«скачать» снова отрисовываются как аккуратные кнопки, а не как слипшиеся значки; метка версии «текущая» — снова бейджем.
v0.53.1

Расходники (литры ПФ) — защита от «битой» длительности прогона

  • Учёт литров подвижной фазы больше не раздувается до сотен литров за один-два вкола. Объём ПФ начисляется как «скорость потока × длительность прогона». Если агент присылал нелепую длительность (метка времени файла охватывала дни простоя, копия старого шаблона .lcd, спан Start/Stop через простой прибора), на расходник могло «набежать» 900+ л при двух фактических вколах. Теперь длительность одного прогона обрезается потолком (AGENT_MAX_RUN_MINUTES, по умолчанию 480 мин = 8 ч) — и на сервере, и в самом агенте. Один реальный ВЭЖХ-вкол редко длиннее этого; всё, что больше, — явно битая длительность и в расчёт литров не идёт.
  • Остановка метода/abort посередине прогона учитывается (как и раньше): для распознанного метода объём ПФ пересчитывается по фактически пройденному времени (для градиента B-канал переинтегрируется по таймтейблу), а не берётся «полный метод». Счётчик вколов и счётчик литров — независимы: два вкола остаются двумя вколами.
v0.53.0

Агенты хроматографов — алерт о простое

  • Алерт о простое агента (по аналогии со СКУД). Раньше сигнал «агент молчит» был только для агента учёта времени; теперь сервер сам следит за «пульсом» (heartbeat) каждого агента хроматографа. Если связи нет дольше порога (по умолчанию 30 мин) — ответственным (владелец/разработчик и те, кто ведёт оборудование) приходит уведомление в колокол, а прибор помечается как молчащий (больше не показывается как «на связи»). При восстановлении связи — уведомление «снова на связи». Анти-спам: повторно не дублируется.
  • Эти уведомления видны в разделе «Уведомления» с пресет-фильтром «Агенты приборов» — отдельной вкладки не заводим.

Хроматография — планшет: клик имеет смысл

  • Клик по лунке → «Открыть хроматограмму»: в панели детали появилась кнопка, ведущая прямо в просмотрщик хроматограммы соответствующего вкола (если файл уже выгружен).
  • «К батчу»: кнопка в планшете открывает таблицу образцов батча (sample table из .lcb) отдельной страницей — порядок последовательности, статус вкола (вколота/идёт/в очереди) и ссылка на хроматограмму у готовых строк. Раньше батч в системе нигде не отрисовывался (был только инструментом алерта для журнала).

Исправления

  • Планшет автосемплера — верная геометрия штатива. Виртуальный планшет теперь отрисовывается как реальный штатив прибора: 7 колонок × 10 = 70 позиций с гекс-укладкой (чётные колонки смещены вверх), нумерация в колонке снизу вверх. Раньше сетка была 11×6=66 и не совпадала с реальным штативом.
  • СКУД-агент больше не «флапает» уведомлениями «теряет связь → восстановлен». Пороги по времени раньше не имели запаса (порог молчания = ровно 3 пульса), а агент-супервизор дрейфовал по частоте и пропускал пульс при сбое цикла. Теперь: порог молчания поднят с запасом, добавлен дебаунс (тишину нужно увидеть дважды подряд), супервизор держит фиксированную частоту, а пульс уходит даже если конкретный экспорт из Orion не удался.
v0.52.0

ИИ-ассистент — ответы по данным лаборатории

  • Ассистент в чат-виджете теперь умеет отвечать не только по справке, но и по реальным данным лаборатории (с учётом ваших прав доступа). Можно спросить по-человечески:
  • «Что заканчивается?» — реактивы/расходники с остатком ниже минимума;
  • «Где лежит / сколько осталось <реактива>?» — поиск по названию: место хранения и остаток из каталога (понимает склонения: «азотной кислоты»);
  • «Что просрочено / у чего истекает срок годности?» — с местом хранения;
  • «Какие хроматографы свободны / заняты?» — статус приборов;
  • «Какие расходники пора менять?» — расходники ВЭЖХ на исходе (лампа, уплотнения, ресурс прибора);
  • «Какие батчи ждут журнала?» — завершённые прогоны без записи в журнал;
  • «Какие у меня задачи?» — мои задачи и заявки (а менеджеру — заявки, ждущие одобрения).
  • Под ответом показываются карточки-источники — реальные строки из системы со ссылкой на нужный экран (числа берутся из базы, не выдумываются моделью).
  • Работает локально: запрос к данным выполняет сам сервер с проверкой прав, модель только формулирует ответ. По умолчанию выключено (HELP_AI_DATA_ENABLED) — включается осознанно, лучше с локальной моделью в контуре лаборатории (данные не покидают периметр; дружественно к GMP/152-ФЗ).
  • История диалога сохраняется между перезагрузками страницы, переходами по разделам и закрытием вкладки (в браузере, последние ~40 сообщений) — и в виджете, и на полной странице (общий диалог). Кнопка «Очистить историю» — наверху переписки.
  • Узко, но честно: на вопрос вне данных ассистент не «выдумывает энциклопедию», а коротко отвечает «не нашёл — переформулируйте или см. Справку». Свободный ответ моделью можно вернуть на мощном железе (HELP_AI_FREEFORM_QA).
v0.51.0

Хроматография — виртуальный планшет (rack)

  • Интерактивный планшет автосемплера в хабе «Хроматографы». Кнопка «Планшет» на карточке (и в таблице) открывает схему лотка 11×6 = 66 позиций: видно, где какой образец, что уже вколото, что идёт сейчас и что в очереди. По клику на лунку — образец, тип, метод, файл данных и время вкола.
  • Подписи лунок подставляются автоматически из sample table батча (.lcb) — вручную ничего вводить не нужно. Нумерация виал — как на приборе: в колонке снизу вверх, колонки слева направо. Повторные вколы одной виалы сворачиваются в одну лунку с пометкой ×N. Режимы «По факту»/«Запланировано» и шкала прогресса «вколото N из M».
  • Если активного батча или файла .lcb ещё нет — планшет показывает понятное пустое состояние (без ошибок).

Хроматография — статус приборов

  • Кнопка «Подключиться» к ПК прибора (on-prem) стала крупной — на отдельном втором ряду карточки, чтобы её было видно и понятно (раньше — мелкая иконка).
  • Карточки приборов теперь выровнены по высоте (аккуратная сетка).

Исправления

  • Виджет «Хроматографы» на главной и страница статуса больше не расходятся. Раньше виджет на дашборде показывал устаревший ручной статус занятости, а страница — актуальный (от агента): один и тот же прибор мог числиться «занят» в виджете и «свободен/офлайн» на странице. Теперь оба места считают статус одинаково; на виджет добавлен счётчик «N офлайн».
v0.50.0

Чат — редизайн

  • Полностью обновлённый интерфейс чата (страница и плавающий виджет): трёхколоночная раскладка «список → переписка → контекст-панель», новые карточки каналов и сообщений, единый стиль с остальным приложением. Контекст-панель справа показывает по чату Объекты / Медиа / Файлы / Участников.
  • Вкладки и фильтры списка: Все / Каналы / Личные / Архив, фильтр «непрочитанные», индикаторы присутствия (в сети / N в сети) на аватарах.

Чат — новые возможности (QoL)

  • Ответы на сообщения (цитаты). Можно ответить на конкретное сообщение — над текстом показывается цитата, по клику — переход к оригиналу.
  • Закреплённые сообщения. Важное закрепляется и показывается баром сверху канала (с раскрывающимся списком); закрепить/открепить — из меню сообщения.
  • «Печатает…». Видно, когда собеседник набирает сообщение (в реальном времени).
  • Поиск. Глобальный поиск по чатам и сообщениям в строке поиска и поиск внутри открытого чата (с подсветкой).
  • Черновики. Недописанное сообщение сохраняется по каждому чату и не теряется при переключении.
  • Уведомления о сообщениях (на устройстве). В «Профиль → Уведомления» можно включить оповещение о новых личных сообщениях и упоминаниях, когда вкладка не в фокусе: мигание заголовка вкладки и (по желанию) звук работают везде; всплывающие уведомления поверх системы — при работе по HTTPS. Настройка хранится в браузере, выключена по умолчанию.
v0.49.4

Исправления

  • Чат-виджет больше не закрывается при переходах и действиях. Раньше плавающий чат сбрасывался при каждом переходе со страницы на страницу и фактически закрывался после любого действия — пользоваться им и читать справку параллельно было невозможно. Теперь виджет сохраняет состояние в пределах вкладки: остаётся открытым на том же канале (или диалоге с ассистентом) и закрывается только когда вы сами его закрываете. История диалога с ассистентом тоже сохраняется при переходах.
  • Убран лишний скролл в поле ввода чата. В строке сообщения (в виджете и на странице чата) при пустом поле появлялась внутренняя полоса прокрутки — теперь её нет, прокрутка включается только когда текст реально не помещается.
  • Окно подтверждения теперь поверх карточки реактива. При списании прекурсора (и других действиях с подписью/QR из карточки-«шторки» реактива) окно ввода пароля/PIN открывалось ПОД боковой карточкой — её приходилось сначала закрывать. Теперь модальное окно перекрывает карточку и сразу активно.
  • Поле ввода ассистента перестало «уезжать». Из-за ошибки в недавнем фиксе поле ввода у ассистента могло схлопнуться в невидимую полоску — исправлено.
  • Ответ ассистента больше не «дёргает» прокрутку. Пока модель печатает ответ, список не перерисовывается целиком на каждое слово; если вы пролистали вверх читать — экран не вырывает вниз.

Ассистент: индикатор «в сети / не в сети»

  • Ассистент работает на локальной модели в лаборатории, и она может быть выключена. Теперь при открытии ассистента сразу видно его состояние — «в сети» или «не в сети», а если модель недоступна, приходит понятное сообщение и поле ввода блокируется (раньше пользователь ждал и получал невнятную ошибку).

Чат: статус коллег «в сети»

  • В личной переписке теперь виден индикатор присутствия собеседника: зелёная точка и подпись «в сети» / «не в сети» (в списке чатов и в шапке диалога). «В сети» = коллега был активен в программе за последние 5 минут.
  • В групповых чатах показывается, сколько участников сейчас в сети («N в сети» в списке и в шапке группы, зелёная точка, если кто-то на связи).

Справка и ассистент

  • Справка приведена в соответствие с системой. Сверили каждый раздел с фактическим поведением и поправили расхождения: списание прекурсоров в GMP-режиме подтверждается электронной подписью с обязательным обоснованием (оно же сохраняется как цель списания); раздел «Фармакопея» — это библиотека официальных PDF с версиями (а не справочник статей с CAS/формулой).
  • Справка дополнена ранее не описанными разделами: дашборд, статистика реактивов, киоск-режим и PIN сканера, документы и поверки, учёт рабочего времени, дисковое пространство, защита журнала аудита хеш-цепочкой; расширены описания чата, уведомлений и отчётов. Также добавлено, где заводятся приборы (Настройки → Оборудование).
  • AI-ассистент стал точнее. База знаний синхронизирована со справкой (приборы заводятся в «Настройки → Оборудование»; прекурсоры — эл. подпись; фармакопея — PDF-библиотека), поэтому ассистент перестал выдумывать несуществующие шаги.
v0.49.3

Экспериментальное

  • AI-ассистент (прототип, по умолчанию выключен). Появляется пунктом «Ассистент» в чат-виджете (доступен на всех страницах), а также на странице «Справка». Пользователь задаёт вопрос по работе в программе и получает ответ, основанный на базе знаний приложения (с потоковым выводом). Работает через локальную модель в сети лаборатории (данные не покидают контур) — включается и настраивается администратором, по умолчанию отключено. Предварительная версия для оценки удобства.

Уведомления

  • Письма-уведомления теперь по подписке (по умолчанию выключены). Раньше настройки уведомлений по типам гейтили только почту, но единого выключателя не было. Добавлен главный переключатель «Присылать уведомления на почту» в «Профиль → Уведомления» — по умолчанию выключен, чтобы письма не приходили внезапно тем, кто их раньше не получал. Включите его, чтобы получать письма по выбранным типам. Отчёт по учёту времени к этому не относится — у него своя настройка и он приходит как прежде.
  • Фильтр в окне уведомлений. На странице «Уведомления» появились быстрые фильтры: «Все», «Непрочитанные» и по типам (Реактивы, Упоминания, Документы, Заявки, Учёт времени, Диск и т.д.) — с количеством в каждом. Каждый тип теперь отмечен иконкой. Удобнее находить нужное, когда уведомлений много.

Учёт времени

  • Личный отчёт по учёту времени теперь приходит на email. Раньше персональный недельный отчёт сотрудника отправлялся только во внутренний чат — теперь он дополнительно приходит письмом тем, кто работает по табелю (рядовым сотрудникам), если у них указан email. Владельцам и разработчикам личное письмо не дублируется — они получают сводку по всей лаборатории. Отключить персональную email-рассылку можно в «Профиль → Уведомления» (по умолчанию включена).

Удобство

  • Редактирование сотрудника — в модальном окне. Раньше правка пользователя открывалась на отдельной странице с перезагрузкой. Теперь форма открывается модальным окном прямо в хабе «Команда» — быстрее и без потери контекста списка.

Исправления

  • Письма: отправитель и время. Имя отправителя в письмах теперь «Qualims» (раньше показывалось старое «LabLIMS»), а время отправки — в местном часовом поясе лаборатории (раньше показывалось московское).
  • Фото сотрудника не отображалось на странице «Команда». Даже при загруженном аватаре карточки и таблица сотрудников показывали только инициалы. Теперь загруженное фото отображается везде в хабе «Команда» (карточки, таблица, профиль сотрудника), с откатом на инициалы, если фото не задано.
  • Письма с вложением: битый файл и недоставка на «строгие» почты. В письмах с прикреплённым файлом, у которого русское имя (напр. еженедельный отчёт по учёту времени «Учёт_времени_…​.xlsx»), вложение приходило безымянным («noname», без иконки), а на некоторые почтовые сервисы (Яндекс) письмо и вовсе не доходило. Причина — некорректное кодирование имени файла в заголовке письма. Теперь имя кодируется по стандарту (RFC 2231) и проставляется верный тип файла: вложение приходит с правильным именем и иконкой, письмо доставляется на Gmail, Яндекс и Mail.ru одинаково.
v0.49.2

Исправления

  • Учёт времени: «нулевые часы» из-за внутренних дверей. Если сотрудник входил утром через главный вход, а в течение дня пользовался внутренними дверями (серверная, склад и т.п.), система могла ошибочно отметить его «ушёл» с нулём часов, хотя он оставался на месте. Теперь присутствие и часы считаются только по дверям периметра (главный вход/выход); внутренние двери на статус и часы не влияют.
v0.49.1

Безопасность

  • Электронная подпись привязана к записи. Подпись теперь действует только для той операции и записи, для которой её оформили (например, списание конкретного реактива), и используется один раз — её нельзя «переиспользовать» на другое действие в течение 5 минут (21 CFR Part 11).
  • Смена GMP-режима под контролем. Переключение режима GMP по-прежнему доступно только разработчику и теперь фиксируется в неизменяемом журнале аудита (видно, кто и когда менял режим соответствия).
v0.49.0

Безопасность

  • Строгая политика безопасности контента (CSP) включена. Завершили вынос встроенных скриптов из всех страниц (последним — просмотрщик хроматограмм); теперь браузер блокирует любой посторонний инлайн-скрипт — защита от внедрения кода (XSS) работает в полную силу, а не «в режиме наблюдения».
  • Аудит интра-тенантной безопасности и фиксы. Проверили, что может пользователь внутри своего тенанта, и закрыли найденное: владелец больше не может создать аккаунт «разработчик» в обход своей роли; загрузка файлов и смена «паспорта» объекта требуют права управления этим объектом; история аудита по API отдаётся только с правом на журнал аудита; экспорт отчёта в Excel недоступен для чужого черновика; куки сессии получили флаги HttpOnly/SameSite (и Secure под HTTPS).
  • Разделение обязанностей по заявкам (опционально). Для строгих площадок можно включить запрет одобрять собственную заявку на откат (настройка «разделение обязанностей»); по умолчанию выключено — у кого роли совмещены, работает как раньше.
v0.48.0

Сайт-витрина

  • Весь публичный сайт переведён на единый дизайн. Раньше часть страниц оставалась на старом тёмном оформлении — теперь страницы продукта (отчёты, чат), безопасность, валидация, «о продукте», сравнение, руководства, клиенты, история изменений, граф применимости и отраслевые решения собраны на той же светлой дизайн-базе, что и лендинг (светлый hero, единые карточки, секции и финальные плашки-призывы).
  • Английская версия сайта. Переключатель RU/EN в шапке теперь переводит весь публичный сайт без перезагрузки: навигацию и подвал, все внутренние страницы и лендинг целиком. Русский остаётся языком по умолчанию; выбор запоминается. Демонстрационные «скриншоты» интерфейса на страницах продукта остаются на русском (это снимки реального русского интерфейса).
v0.47.0

Сайт-витрина

  • Лендинг qualims.ru переведён на единую дизайн-систему продукта. Светлая тема по умолчанию с полной тёмной (переключатель в шапке), фирменный teal вместо пёстрой палитры, спокойный фон без зацикленных анимаций. Навигация — мегаменю по всем разделам (Продукт/Решения/Безопасность/Ресурсы) + мобильное меню; в подвале — все страницы сайта (раньше до части, например «О продукте», нельзя было дойти с главной). Граф связей модулей стал читаемым на светлой теме; интеграции подняты под первый экран; тарифы выстроены по ценности (ВЭЖХ и GMP — первыми); на телефоне тарифы листаются свайпом, граф разворачивается списком, тач-таргеты ≥44px. Лента «последних обновлений» — из реального журнала версий.
  • Разделы сайта больше не «в разработке». 7 страниц, которые раньше отдавались заглушкой «раздел готовится» (Хроматографы и колонки, Учёт реактивов, Аудит и контроль, Мобильное приложение, Интеграции, 152-ФЗ, FAQ), наполнены контентом на той же дизайн-базе: возможности, шаги, чек-листы, FAQ-аккордеон, ссылки на смежные разделы. Открываются из меню и подвала.
v0.46.4

Исправления

  • Повторный ввод логина после простоя. После авто-выхода по таймауту (GMP, 30 мин) иногда приходилось вводить логин/пароль 2–3 раза подряд: фоновые запросы открытой вкладки (опрос чата и т.п.) в момент истечения сессии пересоздавали её между открытием формы входа и отправкой — токен формы переставал совпадать, и вход отклонялся. Теперь авто-выход срабатывает только на переходе самого пользователя; фоновые запросы при истечении тихо получают отказ и сессию не трогают. Вход — с первого раза.
v0.46.3

Надёжность / автономность

  • Все фронтенд-ассеты теперь свои — без внешних CDN. Bootstrap, иконки, графики хроматограмм (uPlot), шрифты (Inter + JetBrains Mono) и прочие библиотеки раньше подгружались с внешних CDN (jsdelivr, Google Fonts) — теперь они хранятся внутри приложения (static/vendor/). Интерфейс полностью грузится без доступа в интернет и не зависит от того, доступны ли зарубежные CDN — важно для on-prem в изолированных/закрытых сетях и для устойчивости в РФ. Политика безопасности (CSP) ужесточена: внешние хосты ассетов из неё убраны.
  • On-prem-установке больше не нужен Redis. Кэш по умолчанию для on-prem — встроенный (in-process), внешний сервис не требуется; rate-limit и realtime-чат тоже работают без него. В SaaS Redis остаётся (и при желании заменяется на Valkey). Меньше движущихся частей при установке на сервере клиента.

Сайт-витрина

  • Соцпревью при шаринге ссылок. Добавлены Open Graph / Twitter-теги (заголовок, описание, изображение, ссылка) — при отправке ссылки на сайт в мессенджер/соцсеть появляется аккуратная карточка с превью, а не «голый» URL.
  • Мобильная полировка (<768px). Кнопки, переключатели тарифов, точки карусели и поля форм доведены до удобного размера нажатия (≥44px), добавлена защита от горизонтальной прокрутки. Контраст текста на тёмных секциях и в футере поднят до уровня доступности WCAG AA.
v0.46.2

Интерфейс

  • Единый прочерк «—» вместо пустышек. Везде, где раньше могли просочиться технические заглушки — nan, None, null, пустое значение или «Invalid Date» (нераспознанная дата прогона), — теперь показывается аккуратный прочерк «—». Введён общий конвертер (фильтр dash на сервере + хелпер на фронте), охват: каталог Реактивов (карточки и панель деталей), История операций (значения изменённых полей) и библиотека Файлов (даты загрузки, параметры метода). Шире прежнего точечного гарда «Invalid Date».
v0.46.1

Развёртывание (on-prem)

  • Схема БД обновляется на рестарте автоматически. При старте on-prem теперь идемпотентно докатываются не только недостающие таблицы, но и колонки/индексы/триггеры (как self-heal в SaaS) — обычный перезапуск после обновления приводит БД в актуальное состояние, отдельный flask onprem-migrate больше не обязателен (остаётся для ручного прогона). В режиме MIGRATION_MODE=controlled авто-докатка пропускается (GMP change-control). Закрывает класс «забыли применить миграцию → column does not exist (500)» (из-за которого падали откат записи журнала и др.).

Почта и уведомления

  • Алерт «агент учёта молчит» (A7). Если push-агент СКУД «Орион» не выходит на связь дольше порога (по умолчанию 45 мин), система сама поднимает ненавязчивое уведомление в приложении (колокол) ответственным (владельцам + получателям сводки) — простой ловится за минуты, а не часы. Без email-спама. Полностью серверная страховка: агентов на машинах менять не нужно (опирается на heartbeat, который агент уже шлёт каждые 15 мин). Анти-спам + «снова на связи» при восстановлении. Порог — ATTENDANCE_AGENT_SILENCE_MINUTES.
  • Сводный отчёт по учёту времени теперь дублируется на email — владельцам (кто видит всех) и настроенным получателям, у кого указан адрес. Текст + тот же .xlsx, что и в чат-доставке. Заработало после починки SMTP на on-prem.
  • Создание пользователя (раздел «Команда»): можно сразу указать email — он нужен для сброса пароля и уведомлений на почту (раньше задавался только правкой профиля). Сброс пароля по ссылке «Забыли пароль?» теперь рабочий end-to-end на on-prem.

Дашборд

  • Виджеты-списки («Активны сейчас», «кто на работе») и наборы карточек приборов («Хроматографы» и группы оборудования) больше не уходят одной длинной лентой вниз с прокруткой: содержимое раскладывается по ширине виджета в несколько колонок — в ту же высоту помещается в 2–4 раза больше. Приём универсальный и применим к другим списочным виджетам.

Исправления

  • Профиль: поле «День рождения» больше не сыпет ошибку в консоли — pattern-маска перезаписана под строгий v-режим регулярок современных браузеров (символы / и - в классе экранированы). Ввод даты работает как прежде.
  • Журналы хроматографа и колонки: защита от двойного сабмита («записалось 2 раза»). Кнопка «Сохранить» блокируется на время запроса (клиент), а сервер идемпотентно возвращает уже созданную запись при повторе в окне ~20 с (даблклик / ретрай / две вкладки) — дубли больше не создаются.
  • Расходка хроматографа: клик по узлу/строке в левой панели больше не валится с ошибкой csSelect is not defined в консоли — выбор узла переведён на штатное делегирование событий (под строгий CSP).
  • Литры подвижной фазы больше не недосчитываются на прогонах без распознанного метода: если метод не определён, объём начисляется по оценке (скорость потока по умолчанию × длительность прогона). Реальный объём из метода по-прежнему в приоритете. Скорость по умолчанию настраивается (AGENT_DEFAULT_FLOW_ML_MIN, по умолчанию 1 мл/мин).
  • Счётчики вколов узлов: в списке расходки теперь видно дату начала отсчёта («счёт с …»). Счётчики разных узлов идут от своей установки/сброса и могут не совпадать — это норма, а не ошибка (раньше расхождение выглядело необъяснимым).
  • Виджет «Задачи»: галочка «закрыть»/удаление больше не «зависает» молча. Если задача на сервере уже недоступна (закрыта/удалена другой стороной), виджет сверяется с сервером и обновляет список вместо ложного «не закрывается»; при реальной ошибке показывает уведомление, а не делает вид, что всё прошло.

Безопасность

  • Электронная подпись больше не падает с 500 на нечисловом record_id. При подписи списания (и одобрении отката записи журнала) фронт мог прислать в record_id имя сущности, а не число — сервер делал int() без защиты и валился «Внутренней ошибкой сервера». Теперь значение мягко приводится к 0, подпись проходит. Регрессия закрыта тестом.
  • Аудит-трейл — защита от подделки (tamper-evidence). Журнал изменений получил цепочку хэшей: каждая запись несёт SHA‑256, связанный с предыдущей. Любая постфактум-правка, удаление или вставка записи обнаруживается командой flask audit-verify. Дополнительно в GMP-режиме запрещён TRUNCATE журнала. Это дополняет уже имеющуюся неизменяемость записей (запрет UPDATE/DELETE) — Annex 11 §11.10(e) / 21 CFR Part 11.
  • Авто-выход по бездействию теперь действительно разлогинивает. Раньше у тех, кто входил с галкой «запомнить меня», после таймаута показывалась плашка «Сессия завершена из-за бездействия», но remember-cookie не удалялась и молча возвращала в систему — пользователь оставался залогинен. Причина — порядок logout_user()/session.clear(); исправлено во всех местах выхода (таймаут, выход, смена пользователя, демо). Регрессия закрыта тестом.
  • AGENT_SECRET теперь персистится между перезапусками (env → файл instance/agent_secret → генерация с сохранением), как и SECRET_KEY: агенты хроматографов и машины «Орион» больше не теряют аутентификацию после рестарта сервера (раньше токен генерировался заново на каждый старт). В SaaS секреты обязаны задаваться через окружение — иначе critical-warning в логах, а при SECURITY_REQUIRE_ENV_SECRETS=true — отказ старта (CR3).
v0.46.0

Единый бренд-тон (ревизия цвета)

  • Голубой акцент «info» по всему приложению приведён к фирменному teal: бейджи, карточки, статусы приборов, флеш-уведомления и подсветки больше не выбиваются синевой из общей гаммы.
  • Палитра ярлыков (тегов) и цвета системных ролей переведены на курированный фирменный набор вместо «радужных» значений по умолчанию.
  • Тёмная тема чата теперь совпадает с остальным продуктом: раньше чат в тёмном режиме был «другого оттенка» — теперь подхватывает единую систему тем.
  • Экран регистрации очищен от декоративной анимации и синих акцентов — это спокойный экран продукта, как и вход.
  • Палитра наложенных трасс в отчётах по хроматограммам — профессиональный качественный набор, одинаково читаемый на светлой и тёмной подложке графика.

Исправления

  • В списке файлов хроматографа при отсутствии даты загрузки больше не появляется «Invalid Date» — показывается «—».
v0.45.15

Исправления

  • Смена пароля в профиле больше не падает с ошибкой 500. Обработчик профиля обращался к сессии (session), которая не была импортирована в модуле — теперь смена пароля, как и проверка демо-режима, работает штатно.
v0.45.14

Документы — управляемые группы

  • Группы документов (СОП, инструкции, протоколы…) больше не захардкожены: их можно добавлять, переименовывать, упорядочивать и удалять прямо на странице «Документы» (кнопка «Группы», для администратора/владельца). Стартовый набор заводится автоматически.
  • Перенос документа между группами — через окно «Изменить» (поле «Группа»).
  • Удаление группы, в которой есть документы, заблокировано (сначала перенесите их) — чтобы записи не меняли тип незаметно; базовая группа «Прочее» неудаляема.
v0.45.13

Исправления с прода

  • Стабильный вход (главное). Раньше при отсутствии переменной SECRET_KEY ключ генерировался заново на КАЖДЫЙ запуск — любой перезапуск сервера обнулял все сессии и CSRF-токены: пользователей внезапно выкидывало на вход, вход иногда «зацикливался». Теперь ключ сохраняется в instance/secret_key и переживает перезапуски (env SECRET_KEY по-прежнему в приоритете).
  • Чат по высоте экрана. Строка ввода больше не уходит под нижний край — баннер «установите PIN» не сдвигает чат вниз.
  • Картинки в чате открываются поверх страницы (лайтбокс), а не новой вкладкой.
  • Списание из карточки больше не спрашивает причину дважды: цель/назначение переносится в окно электронной подписи (и обратно) — вводится один раз.
  • Смена пароля. При внутренней ошибке — понятное сообщение вместо страницы ошибки 500 (и подробность пишется в журнал для разбора).
v0.45.12

Отчёты — чистый и лёгкий Excel хроматограмм

  • При скачивании отчёта в Excel таблица точек трассы больше не засоряет печатный лист: точки переехали на скрытый служебный лист, который нужен только для отрисовки графика. Сам график (native-чарт Excel) и таблица пиков остаются на месте. Печать/PDF отчёта теперь содержит только шапку, условия, график и пики — без «простыни» из тысяч значений.
  • Длинные трассы прореживаются для графика (с сохранением вершин пиков) — файл .xlsx весит кратно меньше, а график визуально не отличается.
v0.45.11

Исправления — счётчик пользователей в ролях

  • На странице «Роли и права доступа» колонка «Польз.» снова показывает реальное число сотрудников в роли. Раньше она учитывала только пользователей с явной RBAC-привязкой и показывала 0 там, где роль задана обычным способом (как у большинства on-prem-установок). Теперь счёт совпадает с тем, как система вычисляет права.
v0.45.10

Исправления — боковые карточки под фильтром

  • В хабах «Команда», «Колонки», журналах колонок и хроматографов боковая карточка профиля/записи и затемнение больше не обрезаются, когда применён фильтр и на экране мало строк. (Оверлеи выносятся в корень страницы — тот же приём, что уже исправил меню действий.) Контекстные меню в этих хабах — тоже.
v0.45.9

Безопасность — дашборд без инлайн-скриптов

  • Редактор раскладки виджетов на «Рубке» переведён на делегирование событий — убраны последние инлайновые обработчики перетаскивания (ondragstart/ondrop и т.п.). Это снимает повторяющееся предупреждение CSP с /dashboard и приближает включение строгого CSP. Поведение редактора не изменилось.
v0.45.8

Роли — несколько «Владельцев» на on-prem

  • На on-prem роль «Владелец» теперь можно выдать нескольким сотрудникам (напр. начальникам) — каждый видит учёт времени по всем подразделениям. Раньше назначение владельца запускало «передачу» и понижало прежнего владельца (это поведение оставлено только для SaaS, где владелец организации один).
  • Починена кнопка «Отмена» в окне передачи владельца (не реагировала).
  • Меню действий в хабе «Команда» больше не обрезается на краю.
v0.45.7

Команда — блокировка аккаунтов

  • Сброс пароля теперь сразу снимает блокировку аккаунта (и счётчик неудачных попыток). Раньше после сброса пользователь оставался заблокирован до 15 минут.
  • В хабе «Команда» заблокированный аккаунт виден как «заблокирован» (был «активен»), и появилась кнопка «Разблокировать» (для разработчика и администратора своей группы).

Напоминание: блокировка срабатывает после 3 неудачных попыток входа на 15 минут (настраивается LOCKOUT_MAX_ATTEMPTS / LOCKOUT_DURATION_MINUTES).

v0.45.6

Учёт времени — права по подразделениям

  • Администратор теперь видит учёт рабочего времени только своего подразделения (а не всех сотрудников). Сопоставление и экспорт — тоже по группе.
  • Роль «Владелец» видит все подразделения — фактически «администратор по всем группам», но без супер-прав разработчика. Назначается разработчиком в карточке пользователя (роль уже была — теперь учёт времени её различает).
v0.45.5

Учёт времени — индикатор связи с агентом СКУД

  • На странице учёта (видно всем) появился индикатор связи с агентом «Орион»: есть/нет связи + «обновлено N минут назад». Агент шлёт «пинг» при каждом запуске (даже если новых проходов нет), поэтому статус честный и в нерабочее время.
  • Требуется обновить скрипт-экспортёр на машине Орион (heartbeat).
v0.45.4

Дашборд — мелкие правки

  • Виджет «Активны сейчас» в самом малом размере (1×1) не ломается: блок «кто на работе» показывается с размера 2×2, на 1×1 — только список в сети.
  • Виджет «Часы»: сумма «За неделю» теперь видна на всех размерах (не только на крупном).
v0.45.3

Учёт рабочего времени — точность и интерфейс

  • «На объекте» точнее. Раньше, если сотрудник выходил через главный вход и возвращался через другой (или служебный) вход, он ошибочно числился ушедшим. Теперь присутствие определяется по последнему проходу через любую дверь (приход и часы по-прежнему считаются по главному входу). Кого СКУД вообще не зафиксировал на возврате (прошёл без карты) — система знать не может.
  • Список «на объекте» больше не ломает страницу. При большом числе людей длинный список имён вызывал горизонтальную прокрутку; теперь показывается компактным набором аватаров (имя — во всплывающей подсказке), без переполнения.
v0.45.2

Исправления

  • Учёт времени → «Настройка СКУД»: окно настройки обрезалось (список получателей и кнопки сохранения/сопоставления не помещались и не прокручивались). Окно вынесено наверх и прокручивается — содержимое видно полностью.
  • Фоновые задачи: ежедневное авто-обновление статусов приборов (и пара других периодических задач) иногда пропускалось из-за опоздания на 1–2 секунды (слишком жёсткий допуск). Теперь задержка не приводит к пропуску — задача догоняется.
v0.45.1

Исправления — интерфейс

  • Настройки → Аватар: кнопка загрузки аватара мигала и пропадала (зона загрузки случайно совпала по имени класса с «каплей» фирменного лоадера — наследовала скрытие и бесконечную анимацию). Зона переименована, классы лоадера изолированы — кнопка стабильно на месте.
v0.45.0

Исправления — часовые пояса

  • Везде, где время показывалось со сдвигом (на 7 часов назад или вперёд), теперь отображается корректно в местном времени:
  • −7ч: «История», уведомления, «Заявки», отчёты об ошибках, чат, время обновления отчётов;
  • +7ч: время приборов (статусы хроматографов/оборудования, «обновлено», «в работе с», загрузка файлов).
  • Пользовательские события сведены к единому местному времени; технические метки (аудит-журнал, «был в сети», токены безопасности) намеренно остаются в UTC и пересчитываются при показе. Защита от регресса — авто-тест.
  • Записи, созданные до обновления, могут отображаться со сдвигом (разовый эффект перехода).
v0.44.0

Учёт рабочего времени — новый дизайн страницы

  • Вид руководителя: KPI-полоса (на объекте сейчас · отработано · среднее · не привязано), переключатель День/Неделя, навигация по датам, выгрузка в Excel за день или неделю, кнопка «Настройка СКУД» (сопоставление сотрудников и получатели сводки переехали в аккуратную модалку).
  • Личный вид: карточки «сегодня / за неделю» с нормой, диаграмма «эта неделя по дням» и таблица последних проходов.
v0.43.0

Учёт рабочего времени — точность данных СКУД

  • Только периметр здания. Приход/уход теперь считаются строго по главному входу; внутренние двери (Серверная, Склад) и пожарный выход в рабочее время не идут. Настраивается (attendance_main_doors).
  • Исправлено определение «вход/выход». Раньше направление бралось из всего текста события, и название двери «Пожарный выход» при действии «Вход» давало ложный «выход». Теперь берётся именно действие прохода.
  • Служебные карты исключены из учёта (мастер-карта, тестовые записи).
  • Команда flask attendance-recompute пере-определяет уже накопленные проходы и отключает служебные карты (разовая, после обновления).
v0.42.0

Учёт рабочего времени — отчёты и виджеты

  • Еженедельный отчёт в чат. По понедельникам утром приходит сообщение от «Системы»: каждому сотруднику — личный отчёт по своим часам за прошлую неделю, руководителю — сводный по всем. К сообщению приложен Excel-файл с детализацией по дням. Получателей сводного отчёта можно настроить на странице «Учёт времени».
  • Виджет «Часы» на главной теперь показывает не только сегодняшние часы, но и итог за неделю.
  • «Кто сейчас на работе». В виджете активности на главной (для тех, кому доступен учёт времени) видно, кто сейчас на объекте по данным СКУД.
v0.41.0

Учёт рабочего времени (интеграция со СКУД «Орион Про»)

  • Появился учёт рабочего времени по проходам системы контроля доступа «Орион Про». Раздел открывается из хаба «Команда» → «Учёт времени»: часы по дням и за неделю (приход → уход), кто сейчас на объекте, табель.
  • Конфиденциальность: администратор/владелец видят всех сотрудников, рядовой пользователь — только свои часы.
  • На главной в виджете «Часы» теперь показывается, сколько вы сегодня отработали (если ваша учётка сопоставлена с проходами).
  • Сопоставление сотрудника из «Орион» с учётной записью Qualims — на той же странице (для управляющих пользователями), с подсказкой по ФИО/email.
  • Данные поступают по защищённому каналу: на машине «Орион» работает агент, который раз в час передаёт новые проходы; сама машина «Орион» наружу ничего не открывает.
v0.40.0

Безопасность

  • Базовая проверка пароля действует всегда. При установке и смене пароля теперь всегда требуется минимум 8 символов, буква и цифра — раньше это проверялось только в режиме GMP.
  • Блокировка после неудачных входов работает всегда. Аккаунт блокируется после серии неверных попыток входа независимо от режима GMP (раньше счётчик считался, но фактическая блокировка применялась только в GMP).

Соответствие GMP

  • Неизменяемый журнал аудита. В режиме GMP записи журнала аудита нельзя изменить или удалить — защита действует на уровне базы данных (Annex 11 §11.10(e) / 21 CFR Part 11). Вне режима GMP журнал по-прежнему можно чистить.
  • Понятное пояснение режима GMP в настройках: под переключателем раскрывается список того, что именно включает режим (подписи, неизменяемый аудит, пароли, блокировки, таймаут сессии, защита экспорта).
  • Принудительная смена пароля по сроку по умолчанию отключена (механизм сохранён, включается при необходимости) — по современным рекомендациям периодическая ротация без признака компрометации не требуется.
v0.39.0

Фармакопеи

  • Раздел переделан в библиотеку PDF: загружайте официальные файлы (Фармакопея ЕАЭС, ГФ РФ и др.), открывайте их прямо в системе (встроенный вьюер, поиск по тексту — Ctrl+F), обновляйте новой версией — история сохраняется. Лимит файла 200 МБ.
  • Кривые автопарсенные статьи ЕАЭС выведены из обращения — парсинг огромных PDF давал «сырые» статьи. В карточке реактива кнопка «Найти в Фармакопее» заменена на «Открыть фармакопею» (переход в библиотеку).
  • Операции с фармакопеями пишутся в журнал аудита; управление — админ/владелец/разработчик.

Эксплуатация

  • Раздел «Дисковое пространство» (меню → Администратор): размер файлов по категориям (данные приборов, документы, фармакопеи, чат…), число файлов и свободное место на диске. Плюс ежедневная фоновая проверка: при нехватке места админам приходит уведомление (порог настраивается). Помогает планировать объём и не упереться в заполнение диска.

Колонки

  • Паспорт колонки: любой прикреплённый к колонке файл можно отметить как «Паспорт» (звёздочка в окне «Файлы»). Паспорт показывается отдельной строкой в карточке колонки (с открытием в системе) и значком «паспорт» в реестре. Паспорт один на колонку — отметка нового снимает прежнюю.
v0.38.0

Исправления

  • Конструктор отчётов: парные поля больше не теряются. Поля, стоящие в одной строке (например «Берут» + «Мерная колба» в шаблонах растворов), не сохранялись — сборщик данных пропускал поля, сгруппированные в строку. Теперь сохраняются и восстанавливаются корректно.

Документы

  • Просмотр внутри системы: PDF, изображения (PNG/JPG) и текст открываются прямо во вкладке браузера по кнопке «Просмотр» (глаз) — без скачивания. Word/Excel/PPT браузер не рендерит, поэтому они по-прежнему скачиваются (для контролируемых документов рекомендуется PDF).
  • Редактирование документа: название, тип, привязку (общий/лаборатория/прибор/ должность) и даты теперь можно менять после загрузки — кнопка «Изменить», без перезаливки файла (замена файла — это по-прежнему «Новая версия»).
  • Напоминания о сроках: документы с истекающим или просроченным сроком действия (поверки, квалификации) попадают в уведомления — в системе для всех и на почту менеджерам по настройке «Сроки документов» в профиле.
  • Журнал аудита: создание, правка, удаление и добавление версий документов фиксируются в журнале аудита (GMP change-control: кто, когда, что изменил).
  • Доступ для роли «Разработчик»: управление документами (загрузка/правка/ удаление) теперь доступно и разработчику, а не только админу/владельцу.
v0.37.2

Подсказки и оформление

  • Обучающие подсказки больше не мелькают при каждой загрузке: состояние (увидена/скрыта, общий выключатель) запоминается на аккаунте — скрытая подсказка не возвращается на другом устройстве или после перезахода. В «Настройки → Профиль → Обучающие подсказки» появились переключатель «Показывать подсказки» и кнопка «Показать заново».
  • Кнопки в карточке колонки приведены к стайлбуку: вместо разноцветного набора (зелёная/синяя/красная) — единый акцентный «Выдать», нейтральные второстепенные действия и красный только для «Удалить».
  • Поля ввода унифицированы: пароль/email и другие текстовые поля в формах (вход, сброс пароля, смена пароля и т.п.) больше не выглядят «голыми» — оформлены единообразно с остальными. Базовый стиль полей (.form-control) переведён на канонические токены и корректно работает в тёмной теме.

Исправления

  • Каталог: режим списания больше не сбрасывается при смене категории. При переходе между категориями в режиме списания карточки реактивов «вылезали» поверх — теперь режим списания сохраняется до явного выхода («Готово»).

Безопасность (CSP)

  • Добивка инлайн-скриптов завершена (по отчётам /csp-report). С внешних файлов, серверных данных через <script type="application/json"> и делегирования событий (data-action) теперь работают все поверхности: вход/каталог/колонки, журналы и события хроматографов, расходники/сборка прибора, дашборд, баг-репорты, RBAC-роли, превью и конструктор отчётов, чат и файлы, регистрация, системная панель (/system/*), мобильный клиент (/m/*) и маркетинговый сайт (лендинг//site/*). Инлайн-<script>/onclick/onchange в шаблонах и в JS-генерируемой разметке не осталось (кроме вьюера хроматограмм — ждёт ассеты дизайнера). Это разблокирует включение строгого CSP без 'unsafe-inline'.
v0.37.1

Отчёты

  • Подсказки «Путь к хроматограммам» и «Название Batch File» в конструкторе отчёта теперь берутся из папок реально загруженных хроматограмм выбранного прибора (а не из путей методов). Путь к хроматограммам обычно совпадает с путём Batch File — если в LabSolutions включена галочка «Sample name = имя папки», имя папки и предлагается для Batch File. Подсказки подставляются сразу при открытии сохранённого отчёта, где прибор уже выбран.
v0.37.0

Документы

  • Новый раздел «Документы» (Отчётность → Документы): единое место для СОПов, инструкций по приборам, должностных, правил лаборатории, протоколов квалификации (IQ/OQ/PQ) и поверки/калибровки.
  • Привязка документа: общий / лаборатория / прибор / должность. У прибора на странице статуса — кнопка «Документы прибора» (открывает раздел, отфильтрованный по этому прибору).
  • Срок действия: для поверки/квалификации документы подсвечиваются бейджем «действует / истекает / просрочен» (как сроки годности реактивов).
  • История версий: при выходе новой редакции загружается новая версия — прежние сохраняются и доступны (GMP change-control).
  • Просмотр и скачивание — всем сотрудникам; загрузка/правка/удаление — администратору/владельцу.

Заявки и расписание

  • Заявки о поломке прибора: на странице статуса хроматографа — кнопка «Сообщить о поломке»; заявка попадает в раздел «Заявки» ответственному за оборудование.
  • Расписание приборов: показываются все 7 дней недели (вкл. Сб/Вс) и полные 24 часа — для сменной работы.

Подсказки и тёмная тема

  • Добавлены отключаемые подсказки-онбординг (вьюер хроматограмм, прикрепление хроматограмм в отчёте, настройка блоков главной).
  • Иконки в тёмной теме сделаны ярче.
v0.36.0

Исправления (каталог)

  • Карточки реактивов выровнены: при длинном названии в две строки блок остатка (число и полоска) больше не «съезжает» — под заголовок зарезервированы две строки, карточки в ряду снова ровные.
  • Число остатка окрашивается по статусу: ниже минимума/просрочен — красное, заканчивается/истекает — жёлтое (как чип и полоска). Раньше цифра оставалась обычной, даже когда остаток ниже минимума.

Оформление и фронтенд-долг

  • Настройки полностью переработаны на токены: боковая навигация разделов, карточки, таблицы оборудования, бейджи статусов и инфо-баннеры — корректный контраст в светлой и тёмной теме (убраны «белое на белом» заголовки и устаревшие бейджи). Поведение, маршруты и доступы не изменились: разделы, вкладки оборудования, добавление/правка приборов и категорий, переименование подразделений и площадок, выгрузки и переключатель GMP работают как прежде.
  • Экраны сканера (страница действия по QR и киоск-режим у сканера) и редактирование пользователя перерисованы по стайл-гайду; диалоги переведены на единый стандарт.
  • Служебные и входные экраны на токенах: восстановление и сброс пароля, обязательная смена пароля, подтверждение e-mail при регистрации, страница истёкшей подписки, ошибка сервера, упрощённый каталог.
  • Под капотом: инлайн-стили и скрипты этих экранов вынесены в отдельные файлы, обработчики переведены на делегирование (шаг к включению строгого CSP).

Безопасность (под капотом)

  • Ужесточение CSP (подготовка): каркас приложения (base.html, боковое меню, чат-виджет) полностью очищен от встроенных скриптов — они вынесены в отдельные файлы. Из политики script-src убран unsafe-inline; политика пока работает в режиме наблюдения (Report-Only, ничего не блокирует), а нарушения собираются на /csp-report — это финальный шаг к строгому CSP против XSS. На работу пользователя не влияет.

Качество данных

  • Чистка «nan» в каталоге: значения-плейсхолдеры (nan, NaT, None, null), попадавшие в карточки и экспорт из старых Excel-файлов, теперь распознаются единообразно и не сохраняются при импорте. Существующие данные можно вычистить разом командой flask normalize-nan (работает и в on-prem, и во всех лабораториях SaaS). Раньше такие значения лишь маскировались при отображении — теперь убираются и из самих данных (поиск/экспорт/отчёты чистые).
v0.35.0

Навигация и оформление

  • Оборудование — отдельная секция в меню: произвольные группы приборов (Спектрофотометры и пр.) вынесены из «Хроматографии» в собственную секцию «Оборудование» — больше не выглядят её подразделом.
  • Расходники прибора (экран статуса хроматографа) приведены к стайл-гайду: шапка, вкладки, пилюли статуса и кнопки были свёрстаны под тёмный фон и «терялись» на светлом (белое на белом) — переведены на токены (корректный контраст в светлой и тёмной теме); SVG-схема и логика не менялись.
  • Возвращён вход «Экспорт прекурсоров и категорий» в Настройки → Экспорт (кнопка потерялась при редизайне; функция работала).
  • Чистка: удалены неиспользуемые шаблоны (admin/admin_categories/admin_users/ birthdays/consumption) и дубль developer_tenants (управление тенантами и вход в тенант — в системной панели /system/). Возвращён пункт «Репорты об ошибках» для разработчика.
v0.34.0

Справка и аудит

  • Справка полностью переработана: новый дизайн по стайл-гайду (липкая навигация, карточки-разделы, поиск, подсветка активного раздела) и актуализированное содержимое под текущий продукт — хабы и навигация, роли/доступ, реактивы и заявки на откат, Фармакопея, хроматография (включая Расходники), группы оборудования, Отчёты испытаний, закупки, уведомления, команда/чат, настройки и PIN, экспорт/GMP, аудит.
  • Журнал аудита перерисован на токены в духе «Истории»: filterbar с авто-применением, счётчик, группировка по дням, бейджи действий и наглядный дифф «было → стало». Фильтры, экспорт в Excel и пагинация сохранены.
  • Инлайн-CSS/JS обеих страниц вынесены в файлы (P2.1).
  • Справка стала общей — разделы видны всем, без зависимости от прав/плана.
  • Аудит — полнота действий: в журнале теперь корректно отображаются и подписываются все типы событий, которые система уже пишет, но фронт раньше показывал как «Изменение»: эл. подпись и отклонённая подпись (21 CFR Part 11), события сканер-режима (списание сканером, установка/удаление/сброс PIN, неверный PIN). Добавлены фильтры и цветные бейджи для них.
  • Аудит — клик по операции: строки сгруппированы по событию (одно действие = одна строка) и раскрываются по клику — диф «изменённые поля» (было → стало) и панель «сведения об операции» со ссылкой «все изменения этой записи» (как в Истории списания).
  • Аудит — шире охват: под наблюдение добавлены протоколы испытаний, заявки на изменение/закупку, расходники и батчи ВЭЖХ (высокочастотные счётчики и большие JSON-поля исключены, чтобы не зашумлять журнал).
  • Аудит — единый «Объект»: колонка и фильтр объекта теперь показывают человекочитаемые названия (например «Реактив») и для ручных записей (эл. подпись, сканер-режим, проверка доступа), которые раньше отображались сырым именем таблицы. Фильтр по объекту ловит и старые, и новые записи.
v0.33.0

Хроматография

  • Расходники хроматографов приведены к стайл-гайду: страница перерисована на дизайн-токенах (карточки, дуги-индикаторы, чипы — корректные цвета в светлой и тёмной теме), инлайн-стиль вынесен в css/chromatograph-consumables.css (P2.1).
  • «Расходники» переехали из бокового меню во вкладку хаба «Хроматографы» (Статус · Расписание · Журнал · События · Расходники) — единое пространство приборных экранов.
  • Исправлена путаница «Статус»: кнопка в карточке прибора, ведущая на экран расходников прибора, переименована в «Расходники» (раньше дублировала вкладку «Статус» хаба).
v0.32.0

Отчёты испытаний

  • Список отчётов перерисован по макету дизайнера: карточки отчётов с иконкой, папкой, шаблоном, автором и статусом (Финал/Черновик), чипы-фильтры по типу и папке, поиск и боковая панель с деталями отчёта и историей изменений. Создание из шаблона, открытие, выгрузка Excel и удаление сохранены; логика вынесена в js/reports-list.js (P2.1). Конструктор отчёта (builder) пока не затронут — это крупный отдельный экран, выносится в следующий проход.
v0.31.0

Настройки

  • Экран «Настройки» (профиль) перерисован по макету дизайнера: hero-шапка с аватаром и ролью, табы-подчёркивание (Профиль · Уведомления · Безопасность · Активность), карточки-секции на токенах, сетка каналов уведомлений, статус PIN сканер-режима и карточки статистики активности. Все формы и действия (профиль, аватар, плотность, уведомления, смена пароля, PIN) сохранены; логика табов и PIN вынесена в js/settings.js (P2.1).
v0.30.0

Фармакопея

  • Справочник «Фармакопея ЕАЭС — Реактивы» перерисован по макету дизайнера: чистая таблица на токенах (название, CAS, формула, Mr, ссылка в реестр), крупный поиск, аккуратная пагинация и карточка статьи в едином диалоге (.mdl) — с блоком CAS, свойствами и форматированным описанием. Данные — прежний реальный API, правка статьи (для управляющих реактивами) сохранена. Инлайн-скрипт вынесен в js/pharmacopoeia.js (P2.1).
v0.29.0

Оборудование

  • Страницы внутри хабов групп оборудования (например, «Спектрофотометры») приведены к единому виду с хабом «Хроматографы»:
  • Статус — карточки приборов на токенах со статусом «Свободен/Занят», табы по подразделениям, поиск, переключатель «Карточки/Таблица», занятие и освобождение прибора прямо из карточки.
  • Расписание — недельная сетка «дни × приборы» с навигацией по неделям, легендой и бронированием в один клик; фильтр колонок по подразделению.
  • Журнал — реестр на токенах с группировкой по дням, фильтром по приборам, счётчиком записей и добавлением записи через диалог.
v0.28.1

Исправления

  • Вкладки на «Настройках» (Оборудование) и в «Профиле» окончательно починены: они снова идут горизонтальным рядом с подчёркиванием активной. Причина была в том, что стиль пунктов бокового меню (.nav-item) затекал в эти вкладки и растягивал каждую на всю ширину (отчего они вставали столбиком). Стиль меню ограничен только боковой панелью.
v0.28.0

Реактив — обновлённое окно редактирования

  • Форма реактива переработана по «стандарту диалогов»: поля сгруппированы в понятные секции (Идентификация, Запас и контроль, Партия и происхождение, Хранение и метки), переключатель «Расходный материал» стал наглядным, а необязательные поля партии вынесены в сворачиваемую секцию, чтобы не загромождать форму. Поля — в едином стиле приложения (на токенах, тёмная тема). Вся функциональность сохранена: файлы, сертификат, теги, подразделение, динамические атрибуты категории, QR и история.
v0.27.2

Диалоги — раскатка по всем экранам

  • Завершён переход на единые окна подтверждения и тосты по всему приложению: браузерные всплывающие «alert / confirm / prompt» убраны из каталога реактивов, хроматографов, колонок, журналов, расписания, чата, дашборда, настроек, заявок, оборудования и менеджера файлов. Везде — одинаковые аккуратные окна в стиле приложения (Esc / клик мимо / тёмная тема) и тосты снизу по центру.
v0.27.1

Исправления

  • Вкладки на «Настройках» (Оборудование) и в «Профиле» снова отображаются корректно — горизонтальным рядом с подчёркиванием активной, как в остальных разделах. Раньше из-за устаревшего стиля старого тёмного меню они «разъезжались» и выглядели блёкло. Приведены к единому виду по всему приложению.
v0.27.0

Команда — единый хаб сотрудников

  • Экран «Сотрудники» переработан в хаб со вкладками: Справочник (карточки/ таблица с поиском и фильтрами по роли, подразделению, статусу), Дни рождения (ближайшие + годовой обзор), Подразделения и Роли. Прежний отдельный экран дней рождения убран из меню — теперь это вкладка хаба (старая ссылка открывает её же).
  • Карточка сотрудника: аватар с индикатором «в сети», должность, подразделение, роль и статус, контакты, последняя активность. Клик — боковая карточка профиля.
  • Действия управляющего (править, сброс пароля, отключить/включить, написать в чат, удалить) — из меню карточки и профиля, с подтверждением в едином окне. Удаление по-прежнему заменяется мягким «Отключить» — учётка сохраняется для аудит-следа. Права на действия — как и раньше (видит и может только тот, кому положено).
v0.26.0

Единый стандарт диалогов

  • Подтверждения и ввод теперь показываются едиными окнами в стиле приложения вместо разнородных браузерных «alert / confirm / prompt». Окна — на токенах, светлая и тёмная темы в паритете, закрываются по Esc и клику вне окна.
  • Уведомления-тосты приведены к одному виду по всей системе: раньше на разных экранах всплывашки выглядели по-разному (часть — браузерные, часть — свои). Теперь единый аккуратный тост снизу по центру (успех — акцент, ошибка — красный).
v0.25.0

Вход — обновлённая текстовка

  • Экран входа получил отдельную текстовку для трёх вариантов: on-prem (вход в установку на сервере организации), демо (облачный демо-доступ на 14 дней) и SaaS (облачный доступ). Состав и расположение элементов прежние — изменены только формулировки заголовка, подзаголовка и информационных чипов.

Хроматографы — Статус: чистка карточек

  • Из шапки экрана убраны дублирующие кнопки перехода (Расписание/Журнал) — они уже доступны во вкладках хаба.
  • Нижняя панель действий карточки прибора пересобрана по принципу «Главное + Ещё»: на виду — Статус, Батчи и RDP (on-prem), остальное (Журнал, Файлы, Методы) скрыто под раскрывающимся «Ещё» с подписанными пунктами. Раньше часть кнопок была без подписей и обрезалась.
  • Переключатель карточки / таблица и вкладки категорий в каталоге реактивов приведены к корректному виду (компактный сегментный переключатель, вкладки в строку). Нижний ряд действий карточки прибора выровнен по центру.

Единый вид хабов (Хроматографы · Колонки · Файлы)

  • Поисковая строка теперь оформлена единообразно на всех экранах-хабах (рамка, иконка, фокус) — раньше на «Колонках» и «Файлах» она была без оформления, тогда как на «Хроматографах» выглядела как в макете. Расположение — по макету: на «Хроматографах» поиск справа рядом с переключателем вида, на «Колонках» и «Файлах» — слева, в ряду фильтров.
v0.24.0

Оборудование — хабы для групп приборов

  • Любая группа оборудования (например Спектрофотометры) теперь работает как единый хаб с вкладками Статус · Расписание · Журнал — тот же паттерн, что у «Хроматографов». В боковом меню каждая группа — один пункт; экраны переключаются вкладками вместо отдельных пунктов и кросс-кнопок.
v0.23.0

Файлы — единая библиотека хроматограмм и методов

  • Хроматограммы со всех приборов собраны в одно пространство «Файлы»: таблица ID · Файл · Прибор · Метод · Вещество · Загружен с фильтрами по прибору, методу и веществу. Сверху — строка агента LabSolutions со статусом синхронизации каждого ПК.
  • Наложение: отметьте несколько файлов → «Наложить (N)» → откроется вьюер с наложенными хроматограммами (используется существующий просмотрщик).
  • Вкладка «Методы»: список методов с параметрами (поток, термостат, P max, время) и переходом к хроматограммам метода.
v0.22.0

Хроматографы — единое пространство (хаб)

  • Приборные экраны объединены в один хаб «Хроматографы» с вкладками Статус · Расписание · Журнал · События — вместо четырёх отдельных пунктов меню. Боковое меню в разделе «Хроматография» теперь: Хроматографы · Колонки · Файлы · Расходники.
  • Журнал хроматографов — новый вид: записи сгруппированы по дням, операция показана чипом, прибор и колонка — ссылками; детали открываются боковой карточкой, действия — в меню (⋮). Сохранены добавление/правка, заявки автора, примечание к экспортированной неделе, экспорт XLSX, авто-заполнение из батча.
  • События — новый вид: вверху сводка «требуют записи / закрыто», лента событий «вкол без записи» с чипами и статусами; из карточки события можно сразу создать запись журнала (закрывает событие) или закрыть административно.
v0.21.2

Исправления

  • Логотип в боковом меню снова рисуется правильным знаком (лупа с галочкой), как на экране входа, и приведён к эталону brand.html. Раньше из-за устаревшего кэша стилей знак мог выглядеть как «буква Q на плашке» (галочка сливалась с фоном); теперь стили статики сбрасываются по хешу содержимого файла, поэтому после обновления подхватывается свежий вид.
  • Устойчивость к незавершённой миграции БД: приложение больше не падает, если на стенде ещё не добавлена новая колонка пользователя (раньше это давало ошибку на выходе из системы и на части страниц).
  • Каталог реактивов на широких экранах: вкладки категорий снова в строку.
v0.21.1

Исправления

  • Кэш статики (CSS/JS) сбрасывается надёжно. Раньше при пинённом APP_VERSION версия в ссылке ?v= не менялась между деплоями, и браузеры/ прокси отдавали старый закешированный файл — после деплоя редизайна это ломало вид бокового меню (старый sidebar.css на новой разметке). Теперь ?v= берётся из времени изменения самого файла: любое обновление/деплой даёт новый адрес и гарантированный сброс кэша, отдельный хард-рефреш не нужен.
v0.21.0

Колонки · Выдача — новый вид

  • Журнал выдачи переведён на обновлённый дизайн: вверху — полоса «сейчас на руках» (у кого какие колонки и сколько дней; засидевшиеся подсвечены), ниже — лента событий с группировкой по дням, чипами действия (выдача / возврат), аватарами сотрудника и того, кто выдал/принял, номером колонки-ссылкой в реестр.
  • Сохранены фильтры (колонка / действие), пагинация и экспорт в XLSX.

Хаб «Колонки» собран полностью: Реестр · Журнал · Выдача — в одном пространстве.

v0.20.0

Колонки · Журнал — новый вид

  • Журнал колонок переведён на обновлённый дизайн: записи сгруппированы по дням, параметры прогона (температура, поток, давление, вколы, фаза) показаны компактными чипами, состояние колонки (отмыта / на хранении) — отдельными метками; номер колонки — ссылка в реестр.
  • Детали записи открываются боковой карточкой (drawer) с сеткой параметров и переходом к колонке; действия строки собраны в меню (⋮).
  • Вся логика сохранена 1:1: добавление/правка, заявки автора на правку и аннулирование, примечание к заблокированной (экспортированной) неделе, авто-подстановка числа вколов, экспорт в XLSX, пагинация и фильтры.
v0.19.0

Колонки · Реестр — новый вид

  • Экран Реестра колонок переведён на обновлённый дизайн: таблица с индикатором ресурса колонки (вколы относительно лимита, с цветовым предупреждением при ≥80 %), статус-метками (свободна / в работе / сломана) и аватаром того, кому колонка выдана.
  • Фильтры стали удобнее: поиск + выпадающие фильтры по статусу, производителю и типу фазы, переключатель Таблица / Карточки, живой счётчик и сводка по статусам.
  • Детали колонки открываются боковой карточкой (drawer) с блоком ресурса, характеристиками и действиями (выдать/вернуть, сломана/восстановить, файлы, журнал, правка, удаление) — без перезагрузки страницы.

Следующие проходы хаба «Колонки»: Журнал и Выдача.

v0.18.0

Колонки — единое пространство (хаб)

  • Три экрана колонок — Реестр, Журнал и Выдача — объединены в один хаб с контекстными вкладками вверху страницы (со счётчиками записей). Переход между ними — в один клик, без поиска по меню.
  • В боковом меню вместо трёх отдельных пунктов — один пункт «Колонки» (в группе «Хроматография»), подсвечивается на любой из трёх вкладок.

Это первый шаг: дальше каждый экран хаба получает обновлённый вид (таблицы, карточки «на руках», боковая карточка детали) по макетам дизайнера.

v0.17.0

Навигация — новый сайдбар (аккордеон хаб-групп)

  • Боковое меню переведено на новый шелл по макету дизайнера: все разделы — сворачиваемые группы-аккордеоны (Реактивы, Хроматография, Спектрофотометры/ оборудование, Отчётность, Команда, Администратор). По умолчанию группы свёрнуты; группа с текущей страницей раскрыта; выбор раскрытия запоминается.
  • Шапка панели — бренд-знак + значки плана/«Демо»; низ — утилиты (сканер/ уведомления/события) и профиль. Сохранены сворачивание панели (icon-only), мобильное меню, тёмная тема, все счётчики.

Консолидация «Колонки» (Реестр/Журнал/Выдача → один хаб с вкладками) и хаб «Хроматографы» — отдельным проходом, по мере поступления ассетов от дизайнера.

v0.16.0

Дашборд — богатое наполнение 3×3

Виджеты, увеличенные до 3×3, теперь показывают развёрнутую аналитику:

  • Реактивы: спарклайн расхода за 14 дней и список чаще всего расходуемых реактивов с мини-диаграммой.
  • Хроматографы: таймлайн загрузки на сегодня — приборы × часы (8:00–20:00), занятые интервалы подсвечены.
  • Последние операции: сводка за сегодня (всего операций · списаний · добавлений) над таблицей.

Содержимое появляется при увеличении виджета до 3×3 в редакторе панели.

v0.15.1

Дашборд — раскладка по умолчанию и компактные 1×1

  • Новая раскладка по умолчанию: информативные виджеты (Хроматографы, Оборудование, Последние операции) теперь сразу показываются крупными (2×2), а компактные (Реактивы, Часы, Активные, Заметки) — 1×1, аккуратно упакованные в 4 колонки. Затрагивает только тех, кто не настраивал панель вручную — сохранённые раскладки не меняются.
  • 1×1 больше не прокручиваются внутри: содержимое маленьких виджетов ужато под высоту ячейки — внутренняя прокрутка убрана (списки «Задачи»/«Ссылки» по-прежнему прокручиваются своим полем).
v0.15.0

Заявки на исправление журналов + уведомления

  • Заявки теперь и по журналам хроматографов и колонок (раньше — только откат операций с реактивами). Сотрудник, ошибившийся при внесении записи, может прямо в журнале запросить исправление своей записи:
  • Аннулирование — пометить ошибочную запись недействительной (с причиной);
  • Правку полей — предложить новые значения (тип операции, колонка, параметры, дата и т.п.); менеджер видит, что именно меняется.
  • GMP/ALCOA+: аннулирование — мягкое: запись не удаляется, а помечается «аннулирована» (кто/когда/почему) и остаётся видимой в журнале. Любая правка/аннулирование по заявке фиксируется в журнале аудита (старое→новое); в GMP-режиме одобрение требует электронной подписи менеджера.
  • Кто одобряет: заявки по реактивам — ответственный за реактивы; по журналам — ответственный за колонки/хроматографию. Раздел «Заявки» и счётчик показываются держателю соответствующего права; кнопки решения — только по «своему» типу.
  • Уведомления по заявкам: менеджеру — о новой заявке, заявителю — о решении (одобрено/отклонено). Канал настраивается в профиле (в системе / на почту / оба) — новый пункт «Заявки на изменение» в настройках уведомлений.
  • Выгрузка журналов (XLSX): аннулированные записи остаются в выгрузке (ALCOA+ — ничего не теряется), но помечены столбцами «Статус» («АННУЛИРОВАНА») и «Аннулирование» (кто/когда/причина), а строка зачёркнута и затенена.
v0.14.0

Расписание — бронь на техобслуживание (ТО)

  • В расписании хроматографов появился тип брони «Техобслуживание»: менеджер (право управления оборудованием) может забронировать прибор под ТО — с описанием работ (необязательно) и временем. Колонка/анализ для ТО не нужны.
  • ТО-брони показываются полосатым чипом «ТО» в недельном и дневном видах, с отдельным пунктом легенды. Бронь на ТО не уводит прибор в статус «занят анализом».
  • Создание/изменение ТО фиксируется в журнале аудита (тип брони — отслеживаемое поле).
v0.13.7

Дашборд — 4-колоночная сетка

  • Борд «Рубки» переведён на 4 колонки (как в макете) — виджеты располагаются плотнее. Ваши сохранённые раскладки остаются как есть; перетаскивание/изменение размера и редактор работают как прежде. На узких экранах — 2 колонки.
v0.13.6

Сверка с макетами — доводка нескольких экранов

  • История: разделитель дня показывает «Сегодня/Вчера» + дату и число операций за день; колонка переименована в «Кол-во» — как в макете.
  • Хроматографы · Статус: в шапке — сводка «N свободно · N занято · N офлайн»; у переключателя «Карточки/Таблица» появились подписи; кнопки «Занять»/«Освободить» приведены к брендбуку (занять — фирменный цвет, освободить — красный) и стали единообразны в карточках и таблице.
  • Дашборд: в шапке — приветствие («Доброе утро/день/вечер, Имя» по локальному времени) с подзаголовком, вместо просто «Рубка».
v0.13.5

Реактивы — тулбар в одну строку и кнопки по брендбуку

  • Фильтр по тегам свёрнут в компактный поповер «Теги» — тулбар поиска снова помещается в одну строку (как в макете), без переноса на 24″.
  • Кнопки приведены к фирменному стилю: «Импорт», «Списание» и «Теги» — нейтральные на токенах (не серый Bootstrap и не красный); активный режим/выбор — бирюзовый акцент.
v0.13.4

Боковое меню

  • «Заявки» перенесены в раздел «Администратор» (одобряет менеджер — логичнее там).
  • Значки приведены к макету: «Главная», «Журнал колонок», «Расходники».
v0.13.3

Реактивы — вкладки и тулбар точно под макет

  • Вкладки категорий теперь слева и оформлены подчёркиванием активной (раньше были по центру «таблетками»).
  • Тулбар поиска снова в одну строку (переключатель вида и «Списание» не выносятся отдельной строкой, а переносятся только при нехватке места).

История ↔ Журнал аудита

  • В подробностях операции (для ролей с доступом к аудиту) появилась ссылка «Журнал аудита реактива» — открывает журнал аудита, отфильтрованный по этому реактиву.
v0.13.2

Исправления

  • Новые разделы (напр. «Заявки») теперь появляются и на демо-стендах сразу после обновления: недостающие таблицы досоздаются на старте недеструктивно, не дожидаясь сброса демо-слота и не теряя данные активной демо-сессии.
v0.13.1

Исправления

  • Сброс демо-стендов больше не срывается, если набор таблиц эталона и слота разошёлся (например, появилась новая таблица): операция стала устойчивой к такому рассинхрону.
  • Раздел «Заявки» и дашборд больше не падают на базах, где раздел ещё инициализируется, — вместо ошибки показывается аккуратная пометка.
v0.13.0

Заявки на откат — обычный пользователь может попросить отменить ошибку

  • Если сотрудник ошибочно списал (или добавил) реактив, он может запросить откат своей операции прямо в Истории — кнопка в строке, с указанием причины. Операция помечается «откат запрошен».
  • Менеджер (право управления реактивами) видит очередь в новом разделе «Заявки» (в меню, со счётчиком ожидающих) и одобряет (откат выполняется автоматически, в GMP — с электронной подписью) или отклоняет с комментарием.
  • Прямой откат у менеджеров/админов работает как раньше. Раздел спроектирован расширяемым — позже сюда добавятся и другие заявки на изменение данных.
v0.12.9

«Что нового» — теперь показывает всё с прошлого захода

  • Модалка «Что нового» больше не ограничивается последней версией: при входе показываются заметки всех версий, вышедших с момента вашего прошлого посещения (накопительно, свежие сверху). Раньше при частых обновлениях промежуточные изменения было легко пропустить.
  • Окно «Что нового» теперь работает и в облачной версии (раньше показывалось только в локальной установке).
v0.12.8

История операций — подробности по клику на любую операцию

  • Теперь любую запись истории можно раскрыть кликом (по строке или стрелке) и увидеть карточку «Сведения об операции»: номер, дата/время, пользователь, реактив, производитель, расположение, количество и назначение/примечание. Раньше раскрывались только правки (с диффом полей) — у списаний и добавлений подробностей не было.
v0.12.7

Экран входа — доводка под макет

  • В облачной версии на тёмной панели снова показывается большой фирменный знак «Q» (раньше его там не было); логотип и текст центрированы относительно панели и увеличены.
  • Заголовок формы («Вход в систему» / «Войдите в аккаунт лаборатории») центрирован по правой панели.
v0.12.6

Реактивы — доводка тулбара под макет

  • Панель поиска/фильтров стала плоской (без выделяющейся белой подложки) — как в макете.
  • Кнопка «Добавить реактив» теперь в фирменном бирюзовом цвете (была зелёная).
  • Переключатель «карточки/таблица» и кнопка «Списание» вынесены в отдельный второй ряд — на широких мониторах ничего не «прыгает» из общей строки фильтров.
  • В режиме списания добавлена кнопка «Сканер» — включает режим сканирования.
  • Кэш-версионирование добавлено к стилям/скриптам каталога, чтобы оформление (центрированные вкладки-пилюли и пр.) подхватывалось сразу после обновления.
v0.12.5

Исправления

  • Режим сканирования (кнопка в боковом меню) больше не «прокручивает» страницу при включении — скрытое поле ввода сканера переведено в режим без скролл-прыжка.
v0.12.4

Фирменный лоадер-«колба» — теперь виден при переходах

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

Боковое меню

  • Пункт «События» (хроматографы) больше не выделяется жёлтым — единый стиль значков.
v0.12.3

Боковое меню — доводка под макет

  • Логотип в меню теперь фирменный знак-«колба» (как на экране входа) вместо буквы.
  • Группы «Хроматография» и приборные категории по умолчанию раскрыты (как в макете); свернуть/развернуть по-прежнему можно кликом, выбор запоминается.
v0.12.2

Дашборд «Рубка» — оформление под дизайн-макет

  • Виджеты дашборда переоформлены в едином стиле дизайн-системы: чистые карточки с лёгкой шапкой, крупные числа, статусы-чипы (в норме / истекают / занято), аккуратные мини-таблицы и списки. Настройка панели (перетаскивание, размеры 1×1 / 2×2 / 3×3, личная раскладка) работает как прежде.

Боковое меню — оформление под дизайн-макет

  • В облачной версии у названия «Qualims» теперь фирменная квадратная плашка-логотип «Q».
  • Пункты по реактивам собраны в группу «Реактивы» (Каталог, История); раздел документов переименован в «Отчётность» — как в макете.
  • Внизу меню под именем пользователя показывается должность (роль).

Реактивы

  • На карточке реактива добавлена кнопка «Списание» — открывает карточку деталей сразу с формой списания (для жидких — пересчёт по плотности).

Техническое

  • К стилям/скриптам добавлено версионирование (?v=<версия>): после обновления системы новое оформление подхватывается сразу, без ручной очистки кэша браузера.
v0.12.1

Вход — анимированный логотип

  • На экране входа (и в локальной установке, и в облаке) логотип «Контроль-Q» теперь прорисовывается штрихом при открытии страницы — фирменная деталь бренда. Уважает системную настройку «уменьшить движение»
v0.12.0

Дашборд «Рубка» — редизайн + брендовый лоадер + RDP с дашборда

  • Дашборд приведён к новому визуальному языку: виджеты на токенах (поверхности, линии, радиусы, тени, единый teal-акцент), карточки приборов и редактор раскладки — в светлой/тёмной теме. Движок адаптивных виджетов (размер 1/2/3 меняет глубину информации) сохранён
  • Фирменный лоадер-колба внедрён глобально: на загрузке дашборда видна анимация наполнения/слива колбы в цвет бренда; доступен на всех страницах
  • On-prem: подключение к хроматографам прямо с дашборда — на карточке прибора (и в компактном списке занятых) появилась кнопка RDP (qrdp://), как на экране статуса; только в локальной установке и при настроенном адресе ПК прибора
  • Под капотом: стили и скрипты дашборда вынесены в отдельные файлы (техдолг фронтенда P2.1), серверные данные передаются безопасным способом
v0.11.0

Расписание хроматографов — новый экран (дизайн-ревизия)

  • Недельная сетка переоформлена: дни × приборы, брони — аккуратные карточки с цветовой меткой состояния (запланировано / идёт / завершено), временем, анализом, колонкой и аватаром исполнителя; сегодняшний день подсвечен
  • Наведение на пустую ячейку показывает кнопку «Занять»; брони можно изменить или отменить прямо в сетке (у своих — всем, у чужих — менеджеру)
  • Навигация по неделям, табы по подразделениям, легенда состояний
  • Светлая/тёмная тема; стили и скрипты вынесены в отдельные файлы (техдолг фронтенда)
v0.10.0

Хроматографы · Статус — новый экран (дизайн-ревизия)

  • Статус-карточки приборов переоформлены: цветная боковая полоса и значок статуса (свободен / занят / анализ / офлайн), оператор с аватаром, текущий анализ и колонка, прогресс серии, ряд аккуратных плиток-действий
  • Поиск по приборам и табы по подразделениям со счётчиками
  • On-prem: кнопка RDP на приборе с настроенным хостом; SaaS: занять/ освободить прибор прямо на карточке (форма раскрывается по кнопке)
  • Светлая/тёмная тема; стили и скрипты вынесены в отдельные файлы (техдолг фронтенда)
v0.9.0

История операций — новый журнал (дизайн-ревизия)

  • Журнал операций переоформлен: записи сгруппированы по дням, у каждой — цветной значок операции (списание / добавление / правка / удаление / откат), изменение остатка показано как «+20 мл» / «−5 мл», аватар и имя исполнителя
  • Откат списания/добавления вынесен в аккуратную кнопку в строке; отменённые записи помечаются и зачёркиваются
  • Светлая/тёмная тема, стили вынесены в отдельный файл (техдолг фронтенда)

Откат операций — корректность под GMP

  • Откат теперь требует указать причину — обоснование сохраняется в журнале (требование целостности данных ALCOA+ — фиксируем «почему»)
  • В GMP-режиме откат подтверждается электронной подписью (как списание прекурсоров)
  • Исходная запись больше не редактируется при откате: факт отмены хранится отдельной связью, а оригинал остаётся неизменным — это правильнее для аудита
v0.8.0

Вход — новый экран (дизайн-ревизия)

  • Страница входа переоформлена в спокойном двух-панельном виде: слева — панель бренда, справа — компактная форма. Светлая тема по умолчанию, тёмная — по сохранённому выбору
  • Вход остаётся разным для двух вариантов поставки: в локальной установке (on-prem) — логин, пароль и вход по PIN-коду; в облаке (SaaS) — организация, пароль, демо-доступ и регистрация лаборатории
  • Появилась кнопка «показать пароль»; стили входа вынесены в отдельный файл

Реактивы — новые карточки и таблица каталога (дизайн-ревизия, шаг 2)

  • Панель деталей реактива: клик по карточке (или строке таблицы) открывает боковую панель со всей информацией — остаток, идентификация, партия, хранение, примечание — без перехода на другую страницу
  • Быстрое списание прямо из панели: ввод количества → «Списать». Для жидких реактивов (с указанной плотностью, в мл) можно вводить в граммах — система сама пересчитает в миллилитры по плотности и покажет результат. Для прекурсоров в GMP-режиме списание потребует электронную подпись
  • Таблица каталога переоформлена по новому стилю: липкая шапка, спокойный ховер строки, аккуратные разделители — данные читаются плотнее и не рябят
  • Выбор колонок таблицы: кнопка «Колонки» открывает список — можно скрыть ненужные столбцы, выбор запоминается. По умолчанию скрыты избыточные «Объём ед. / Кол-во / Общий» (есть кнопка «Сбросить по умолчанию»)
  • Карточка реактива переоформлена по новому брендбуку: моно-бейдж расположения, чип статуса остатка, тонкая шкала запаса с отметкой минимума и понятной подписью срока годности («годен до / истекает · N дн. / просрочен»), аккуратная сетка метаданных (производитель, серия, сертификат, кат. №) и компактный ряд действий
  • Единый статус остатка теперь считается в одном месте и совпадает на карточке, в значке и подписи: «В норме / Заканчивается / Истекает / Ниже минимума / Просрочен». Раньше цвет рамки и значок могли расходиться
  • Числа аккуратнее: пустые и битые значения количества (например, исторический 0/0) показываются как «—», без технического «nan»
  • Сохранены все функции карточки: расходники со статус-селектом, теги, доп. атрибуты категории, сертификаты, поиск в Фармакопее ЕАЭС, редактирование/удаление/QR/вложения, область поиска по подразделениям
  • Под капотом: каталожные стили вынесены в отдельный catalog.css, добавлены состояния фокуса для доступности с клавиатуры (техдолг фронтенда P2.1/P2.2)
v0.7.0

Безопасность — PIN-код как альтернатива паролю

  • Вход по PIN-коду для рядовых сотрудников: на странице входа появился переключатель «Войти по PIN-коду». Удобно для цеховых терминалов и быстрого входа. Привилегированные роли (администратор, владелец, разработчик и все, кто управляет пользователями) по-прежнему входят только по паролю — это требование безопасности
  • Электронная подпись теперь принимает PIN вместо пароля: в окне подписи можно выбрать «Пароль» или «PIN» (если PIN задан). Способ подписи фиксируется в журнале аудита — видно, чем именно подписано действие
  • Защита от подбора PIN усилена: счётчик неверных попыток у сканер-киоска переехал в журнал аудита (переживает перезапуск сервера); у электронной подписи добавлена блокировка после нескольких неверных попыток
  • Минимальная длина PIN — теперь 6 символов (настраивается через PIN_MIN_LENGTH). Проверка применяется при установке или смене PIN; уже заданные более короткие PIN продолжают работать до их следующей смены. Полное обоснование для аудита — в PIN_AUTH_VALIDATION.md
v0.6.0

Оформление — новый визуальный фундамент (дизайн-ревизия, шаг 1)

  • Рабочие экраны переехали со старого тёмного фонового фото с «северным сиянием» на спокойную светлую washed-подложку — мягкое свечение сверху по центру в цвет бренда. Читаемее на плотных данных, не слепит, серьёзнее для лаборатории
  • Убрана зацикленная декоративная анимация фона на рабочих страницах (соответствие собственным гайдлайнам)
  • Единый акцент — teal по всему продукту: вычищены конкурирующие синий и индиго-фиолетовая палитра редактора виджетов
  • Светлая тема — по умолчанию, тёмная — по кнопке (полный паритет); фоновое фото сохранено на лендинге qualims.ru
v0.5.0

Хроматография — новая схема расходников ВЭЖХ

  • Схема узлов прибора пересобрана по фидбеку сервисного инженера: контроллер, фильтры дегазатора, параллельные насосы A и B (по 2 головы, в каждой — диафрагма, плунжер, уплотнение и обратные клапаны), линейные фильтры, автосэмплер с кранами высокого и низкого давления, отдельный дозирующий насос, детектор с лампами D2 (дейтериевая) и W (вольфрамовая)
  • Интерактивная SVG-схема: клик по узлу выделяет расходник или предлагает создать его из шаблона; кнопка «Подставить шаблон» теперь разворачивает полный набор узлов новой схемы (~39 позиций)

Интерфейс — исправления

  • Боковая панель больше не «съезжает» на невысоких экранах (ноутбуки): пункты держат высоту, список аккуратно прокручивается
  • Переключатель темы — подпись («Светлая/Тёмная тема») и иконка меняются сразу по клику, без перезагрузки страницы

Система

  • Номер версии в приложении теперь берётся автоматически из журнала изменений — бейдж версии всегда соответствует актуальному релизу
  • Окно «Что нового» при входе тоже показывает заметки из журнала изменений — единый источник для версии, журнала на сайте и этого окна
v0.4.1

Исправления

  • Кнопка «Изменить» в расписании хроматографов — устранена ошибка в браузерной консоли, из-за которой редактирование брони не открывалось
  • Кнопка «Добавить реактив» — восстановлена в каталоге для администраторов и разработчиков (исчезла после редизайна навигации)
v0.4.0

Мобильное приложение (PWA) — полный редизайн

  • Новая навигационная панель: крупные иконки, FAB-кнопка для мгновенного сканирования QR-кода
  • Главная страница с виджетами задач и плитками быстрых действий
  • Раздел «Инструменты» (ВЭЖХ) — статус приборов и бронирование прямо с телефона
  • Кастомный цифровой ввод количества при списании — удобен на сенсорном экране
  • Фильтр-чипы в журнале списаний для быстрой навигации по операциям
  • Поддержка тёмной и светлой темы на мобильном

Дэшборд — настраиваемые виджеты

  • Редактор компоновки в стиле «тетрис» — перетаскивай виджеты и меняй их размер
  • Новые виджеты: Часы, Заметки, Мои бронирования, Задачи, Реактивы (3 отдельных)
  • Виджет оборудования — отдельный блок для каждой категории приборов
  • Конфигурация дэшборда сохраняется в профиле — у каждого пользователя своя раскладка

Хроматографы

  • Кнопка «Занять / Освободить» прямо на странице статуса — не нужно переходить в расписание
  • Редактирование брони в расписании без перезагрузки страницы

Интерфейс

  • Боковая панель теперь сворачивается — больше пространства для контента
  • Подгруппы в сайдбаре для компактной навигации по большим разделам
v0.3.0

Новый дизайн интерфейса

  • Левая боковая панель вместо верхнего навбара — быстрый доступ ко всем разделам
  • Обновлённая цветовая система: CSS-токены, teal-акцент, glassmorphism-эффекты, анимации входа
  • Тёмная тема — переключается в один клик в профиле
  • Скелетон-загрузка на главной — страница не «прыгает» при загрузке данных

Система ролей и прав (RBAC)

  • Гибкие роли с набором разрешений — настраивается под структуру лаборатории
  • Управление ролями и их назначение пользователям через интерфейс администратора
  • Иерархия ролей: Владелец → Администратор → Пользователь + произвольные роли

Теги реактивов

  • Цветные теги для произвольной классификации реактивов
  • Расширенный поиск по тегам — «любой из выбранных» или «все сразу»
  • Теги назначаются прямо в карточке реактива без перехода в настройки

Каталог реактивов

  • Динамические категории — администратор создаёт нужные категории своей лаборатории
  • Перетаскивание вкладок категорий для удобной сортировки
  • Сортировка по названию, критичности запаса, сроку годности, дате поступления, производителю
  • Редактирование и удаление реактивов прямо из каталога (для администраторов)

Задачи

  • Виджет задач с исполнителем, приоритетом и сроком выполнения
  • Статус задачи обновляется без перезагрузки страницы

Оборудование (новый модуль)

  • Создавайте собственные категории приборов — не только хроматографы
  • Устройства с расписанием бронирования и журналом использования
  • Редактирование и удаление брони прямо из расписания

Поддержка нескольких лабораторий (on-prem)

  • Конфигурируемые лаборатории с 3-уровневой фильтрацией: Моё подразделение → Вся лаборатория → Все лаборатории
v0.2.0

Раздел ВЭЖХ — значительное расширение

  • Реестр хроматографических колонок: добавление, редактирование, статус «в работе», импорт из Excel
  • Журнал хроматографа: фиксация каждой сессии работы (анализ, колонка, параметры)
  • Журнал колонки: полная история эксплуатации каждой колонки
  • Журнал выдачи колонок: кто и когда взял колонку в работу
  • Недельное расписание с AJAX-навигацией по неделям — без перезагрузки страницы
  • Подсказка заполнить журнал сразу после освобождения хроматографа
  • Блокировка журналов после еженедельного экспорта — защита от случайных правок
  • Оптимистичная блокировка: защита от конфликтов при одновременном изменении статуса

Автоматизация хроматографов

  • Агент мониторинга: автоматически определяет запуск анализа по активности прибора
  • Система алертов: уведомляет, если прибор работает без записи в журнале
  • Страница событий: просмотр и закрытие алертов, принудительное закрытие для администратора
  • Уведомление «Что нового» при входе — рассказывает о последних изменениях в системе

GMP-режим и электронная подпись

  • Включение/отключение GMP-режима администратором
  • Подтверждение подписью при списании (пароль пользователя)
  • Предупреждение о таймауте сессии — не потеряешь несохранённые данные
  • Синхронизация GMP-статуса в реальном времени между вкладками браузера

Периодическая проверка доступа (Annex 11)

  • Плановая ревизия активных пользователей согласно требованиям регуляторики

Фармакопея ЕАЭС

  • Поиск реактива в Фармакопее ЕАЭС 2.2.1.1 по названию и CAS-номеру
  • Двунаправленная привязка: реактив ↔ статья фармакопеи
  • Нечёткое совпадение с автоматическим комментарием о расхождениях

Экспорт данных

  • Экспорт журналов хроматографа и колонок в XLSX — вручную и автоматически каждую неделю
  • Подписи пользователей в экспортируемых XLSX-журналах
  • Экспорт списания реактивов: вручную для любой категории + автоматически (прекурсоры — еженедельно, остальные — ежемесячно)
  • Автоматическая отправка архива данных на email
  • Ручное скачивание архива из настроек администратора
  • Откат операции из страницы истории — для администраторов и разработчиков

Реактивы

  • Поле плотности и автоматический пересчёт единиц измерения в журнале списания
  • Расходники — учёт позиций без количества: по статусу (есть / кончается / нет)
  • Гиперссылки в полях «сертификат анализа» и «примечание»
  • Ежедневный фоновый сканер: автоматические уведомления о низком запасе и истекающем сроке
v0.1.0

Каталог реактивов

  • Карточки и таблица с переключением вида
  • Фильтрация по категориям (вкладки)
  • Поиск по названию и CAS-номеру
  • Индикаторы запаса: зелёный / жёлтый / красный

Журнал операций

  • Списание и пополнение с указанием количества
  • История всех операций с фильтрацией

Уведомления

  • Автоматические уведомления о низком запасе
  • Уведомления об истекающем сроке годности

Статистика

  • Сводная страница: расход по категориям, критичные позиции

Администрирование

  • Управление пользователями и ролями
  • Панель настроек
  • Разграничение видимости данных по лаборатории и подразделению

Система

  • Страница помощи с описанием разделов
  • Кнопка «Сообщить об ошибке» — отправляет отчёт разработчику