Обновления продукта

Release Notes — 26 апреля 2026

Bartłomiej Głowacki · CAIO, руководитель направления AI и R&D
Release Notes — 26 апреля 2026

19 дней назад мы выпустили большой релиз с диагностическим модулем и анализом просодии. С тех пор команда внесла ещё 295 изменений — и они немаленькие. В этом релизе вы можете записать разовую (ad-hoc) сессию ещё до прихода пациента, ваши заметки сливаются с работой AI и транскрипцией бок о бок в трёх колонках, публичный профиль терапевта возвращается в полную силу, а в мобильном приложении появилась тёмная тема. Под капотом мы прошли этап усиления безопасности по SOC 2 / HIPAA, DDD-аудит и полную псевдонимизацию данных пациентов на стороне AI.

💚 Спасибо команде, которая довела этот релиз до конца — отчётами, тестами, кодом и терпением:

  • Bohdan — разовые (ad-hoc) сессии, лимиты пакетов и льготный период, DDD-аудит, инвойсы KSeF, десятки исправлений (SCRUM-756, 815, 1267, 1268, 1276, 1280-1290, 1293, 1309-1316, 1353-1357, 1366, 1388, 1391, 1392)
  • Bartek — трёхстороннее слияние, 9 отдельных CBT-анализов, когнитивные искажения, счётчик сессий пакета (SCRUM-1266, 1320, 1338, 1368-1375, 1385, 1386)
  • Ewa Cylwik / Ewa — Beck PDF, вторая сессия AITS для одного и того же пациента, тёмная тема и пустое состояние на мобильном, многоязычная рассылка, цвета интерфейса, уникальность email пациента (SCRUM-883, 898, 902, 1089, 1094, 1297, 1304, 1307, 1319)
  • Joanna — повторяющийся календарь, скрытие Zoom, своевременная отмена, самонаблюдение вместо оценки качества сессии (SCRUM-789, 874, 918, 919, 1005)
  • А также Bartlomiej за когнитивные искажения и счётчик сессий, который стал основой новой модели подписки

1. ⚡ Разовые (ad-hoc) сессии — запись ещё до прихода пациента

Если вам когда-либо приходилось быстро включать диктофон — потому что пациент пришёл без предупреждения, потому что это разовая консультация, потому что это встреча с человеком, которого ещё нет в ваших записях — новый модуль ad-hoc сессий полностью снимает эту боль.

  • Кнопка быстрой записи (Quick Record Button) в веб-панели, в PWA на телефоне и в приложении MAUI — один клик запускает запись ещё до того, как вы заполните данные пациента
  • AdHoc Inbox — отдельный лоток для неназначенных записей, пока вы не решите, куда их отнести
  • AssignPatientModal — назначьте запись существующему пациенту или создайте нового прямо из этого лотка
  • Resume / Re-enter room — завершите запись сессии, начатой ранее
  • Хранение “сирот” + автозавершение — сессии, не назначенные в течение X дней, автоматически закрываются, чтобы лоток оставался опрятным
  • Видео “Начать без пациента” — в комнате LiveKit можно начать сессию, не конфликтуя с существующим пациентом; AdHoc-запись затем попадает в лоток

Раздел скрыт за кодом PromptyAI в настройках — по умолчанию выключен, для пользователей, которые сначала хотят увидеть остальное. Спроектировано и реализовано Bohdan.

2. 📊 Лимиты пакетов и льготный период — прозрачная подписка

Подписки прошли полный пересмотр. Старые планы Starter/Standard деактивированы, их заменили Start / Practice / Pro — рассчитанные под реальный объём сессий в месяц.

  • Счётчик сессий на дашборде — видно, сколько сессий вы использовали в этом месяце и сколько осталось в пакете
  • Письма о лимите — автоматические уведомления при 80% и 100% использования
  • Предложение об апгрейде — при достижении лимита вы получаете мягкое предложение сменить план вместо жёсткой блокировки
  • Цены из Stripe + скидки — цена, которую вы видите в приложении, приходит напрямую из Stripe с применёнными активными скидками (код бета-тестера не истекает)
  • Отмена подписки в приложении — отмена прямо в приложении, без письма в поддержку
  • 14-дневный льготный период — если платёж не прошёл, вы получаете 14 дней доступа только к собственному аккаунту (без просмотра данных пациентов), с письмами на T+0 и T+13. Реальная потеря данных наступает только через две недели
  • Баннер подписки — понятное сообщение вверху приложения, без пустой полосы между меню и алертом
  • Симулятор лимита сессий — в панели PromptyAI есть тестовый режим, где видно, как приложение ведёт себя при полностью использованном пакете

Совместная работа Bartlomiej (счётчик и лимиты, SCRUM-1266) и Bohdan (подписка, льготный период, предложение об апгрейде — SCRUM-756, SCRUM-1366, SCRUM-1391, SCRUM-1392).

3. 📝 Трёхстороннее слияние заметок — терапевт, AI и транскрипция в одном виде

Это одно из крупнейших архитектурных изменений под капотом, но эффект на повседневную работу очень заметен: каждое поле заметок (Notes, SessionSummary, разделы концептуализации) теперь отдельно запоминает, что написал терапевт, что сгенерировал AI и что пришло с диктофона / транскрипции.

  • Notes 3-way — вид заметок показывает три источника бок о бок: ваш текст, предложения AI и автоматическую транскрипцию, а вы выбираете, что оставить
  • SessionSummary 2-way + слияние JSON — в сводке сессии вы объединяете свою работу с анализом AI в единый связный документ
  • Разделитель по времени (timestamp) — когда вы вручную редактируете поле AI, система оставляет видимый след того, когда и чей это фрагмент
  • Метка [AI] с первой генерации — ваши поля не смешиваются со сгенерированными
  • SourceBadge — цветная плашка с иконкой, показывающая источник фрагмента, вместо текста ЗАГЛАВНЫМИ буквами
  • Замена раздела AI вместо добавления — когда вы запрашиваете повторную генерацию сводки, AI заменяет раздел вместо того, чтобы складывать под ним ещё одну копию

Спроектировано и реализовано Bartek (SCRUM-1320, SCRUM-1368-1375). Под капотом: полная локализация на 8 языков и новые DDD-контексты.

4. 🔍 CBT-анализы — 9 отдельных отчётов по запросу

Старая монолитная функция “сгенерировать CBT-анализ” была разделена на 9 отдельных пунктов, которые терапевт запускает тогда, когда они действительно нужны. Меньше ожидания, больше контроля.

  • 9 независимых анализов — каждый генерируется отдельно, по запросу
  • Шестерёнка редактирования промпта — нажмите на шестерёнку рядом с каждым анализом, чтобы увидеть/изменить промпт, который использует AI
  • Раздел CBT-АНАЛИЗЫ за кодом PromptyAI — раздел доступен после ввода кода в настройках, для пользователей, тестирующих новые функции

Когнитивные искажения получили собственный вид (сообщено Bartlomiej, SCRUM-1385):

  • Представление данных вместо отчёта AI — вы видите конкретные цитаты из транскрипции, помеченные AI, а не сгенерированное на их основе повествование
  • Все цитаты после раскрытия — без фильтра по диапазону дат, раскрытие показывает всё
  • Доступно в главном меню — в разделе Concептуализация v2

Старый промпт COGNITIVE_DISTORTIONS_INVENTORY был удалён (SCRUM-1386).

5. 🌐 Публичный профиль терапевта — полное обновление с панелями редактирования

Публичный профиль под брендом aitherapy.support был полностью пересобран.

  • 3 новые панели редактирования — биография, специализации, контактные данные редактируются в элегантных боковых панелях
  • Режим редактирования владельцем — при просмотре собственного профиля в авторизованном состоянии кнопки редактирования всегда под рукой
  • Годы опыта — новое поле YearsOfExperience, видимое в публичном профиле
  • Ребрендинг цвета — палитра шалфей/лаванда под брендом aitherapy.support
  • Раздел “Ваша конфиденциальность” убран — он дублировал информацию; GDPR указан в футере
  • Иконки Lucide — современная, чистая типографика иконок

Под капотом добавлен публичный эндпоинт GET /api/public/therapists — возвращающий терапевтов с активными публичными профилями. Основа для будущего каталога терапевтов.

6. 🎥 Видеосессии — PiP, смена камер, исправленное размытие фона

Видео получило набор исправлений, которые заметит любой терапевт, проводящий сессии через приложение.

  • PiP / сворачивание — сверните комнату видео в плавающий мини-плеер и проверьте заметки в другой вкладке без разрыва соединения. Микрофон и камера продолжают работать
  • Смена камер — переключите, кто отображается в главном окне, а кто в мини-окне, одним кликом
  • Возобновление из PiP — при возврате из свёрнутого состояния вы пропускаете лобби (PreJoinLobby) и сразу попадаете в разговор
  • Аудио по каждому участнику для диаризации — транскрипция разделяет говорящих даже в режиме PiP
  • Исправлено размытие фона — CSP блокировал MediaPipe WASM; размытие теперь работает в один клик
  • Более чистый интерфейс сессии AITS — AI-ассистент исчез с панели инструментов, меньше визуального шума
  • Оверлей PiP кликабелен — убраны pointerEvents:none и overflow:hidden, кнопки PiP реагируют на клики
  • Кнопка “Присоединиться к сессии” — была скрыта переопределением CSS, теперь видна
  • Устаревшее замыкание (stale closure) в handleMaximize — исправлено; разворачивание из PiP больше не выдаёт ошибку

7. 📐 Концептуализация Beck v2 и ABC — PDF, переключатель версий, редактирование промпта

  • Beck и ABC v2 PDF — исправлено форматирование и автоматическое включение в материалы сессии (сообщено Ewa, SCRUM-1297)
  • Beck PDF — разделы только с рамкой, цветные специализации, аккуратные инициалы, SVG-стрелка между разделами
  • Переключатель ABC v1/v2 в Концептуализации v2 — выберите, какую версию ABC отображать
  • Шестерёнка редактирования промпта в ABC v2 — измените промпт AI на вкладке ABC v2
  • Экспорт в PDF для AI-анализов и ABC по сессии — отдельные анализы экспортируются по отдельности
  • Плюрализация меток ABC на 8 языках — таблица концептуализации теперь имеет правильные формы множественного числа
  • Исправлены пустые столбцы ABC — бэкенд возвращает правильные имена свойств во множественном числе

8. 🧾 Инвойсы и KSeF — выбор платежей + конечный автомат состояний

Система выставления счетов была переработана для соответствия KSeF (польской национальной системе электронного инвойсинга).

  • Инвойс из выбранных платежей — выберите платежи, и система создаст из них единый счёт (снимок + внешний ключ Payment)
  • Точка входа “Выставить счёт” в финансовом разделе терапевта — быстрый доступ с дашборда
  • Удаление позиции в модальном окне выставления счёта — исправляйте ошибки на лету
  • Разделение KSeF dev/prod — песочница и продакшн работают на отдельных учётных данных
  • Конечный автомат состояний инвойса (SCRUM-1357, Bohdan) — Черновик → Выставлен → Отправлен → Отменён, с ограничением в БД на недопустимые переходы
  • AE KsefToken — токен KSeF зашифрован через Always Encrypted

Совместная работа Bohdan (SCRUM-1357, SCRUM-1388).

9. 📅 Календарь, повторяющиеся сессии и локации

Недельный и повторяющийся календарь получил десятки небольших, но заметных улучшений — большинство из них сообщены Joanna и Ewa.

  • Сессии с 22:00 — были невидимы в недельной сетке, теперь показываются до конца дня
  • Все часы в сетке повторяющихся слотов (SCRUM-874, Joanna)
  • Своевременно отменённая сессия — не отображается как “Не оплачено” (SCRUM-918, Joanna)
  • Метка повторения рядом с повторяющимся слотом (SCRUM-919, Joanna) — вы видите “еженедельно”, “раз в две недели” рядом с каждой повторяющейся сессией
  • Скрытие интеграции с Zoom из интерфейса (SCRUM-789, Joanna) — Zoom больше не поддерживается как видеоканал
  • Всплывающее окно сессии в календаре — больше не скрывается за пределами экрана
  • TherapistAvailability — автосохранение при каждом изменении (задержка 800 мс), кнопка сохранения не нужна
  • AddSessionModal — опция “создать сессию вне часов доступности” — исключения могут принудительно задать слот
  • Статус “Не явился” (No-show) (NoShow=5) — новый статус, который можно установить даже из завершённой или отменённой сессии
  • RecurringSessionsCalendar — сводные плитки над легендой и сеткой

Локации терапевта получили каналы онлайн-встреч по каждой локации:

  • Режим на месте (onsite) — поля адреса и города для очных локаций
  • Переключатель onsite/online вместо чекбокса — более понятный выбор режима
  • Онлайн-канал для каждой локации — разные локации могут иметь разные каналы (AITS, Google Meet, внешняя ссылка), автоматически распространяемые на сессии
  • Постоянные комнаты встреч для каждого пациента — у каждого пациента есть постоянная ссылка на комнату AITS и отдельная внешняя ссылка, видимая в настройках пациента
  • Удаление локации — исправлено (пропадала из БД, но оставалась в списке интерфейса)

И наконец тип встречи в повторяющихся сессиях — исправлено распространение MeetingType и MeetingLink из конфигурации повторяющейся серии на каждую сгенерированную сессию и на письма-напоминания (SCRUM-902, Ewa).

10. 📱 Мобильное приложение — тёмная тема, AdHoc Inbox, шлифовка

Мобильное приложение перешло на версию 1.5.0 (сборка 18) с большим количеством изменений, видимых пользователю, и несколькими правками по подписи для App Store / Play Store.

  • Тёмная тема — полный тёмный режим с читаемыми заголовками групп (SCRUM-1089, Ewa + SCRUM-815)
  • Настраиваемые напоминания — выберите, когда вы хотите получать уведомление о сессии
  • Мобильное напоминание за 15 минут — напоминание за 15 минут до сессии + предупреждение, если системные уведомления отключены (SCRUM-815, Bohdan)
  • Пустое состояние для списка сессий — вместо пустого экрана более насыщенный онбординг (SCRUM-1094, Ewa)
  • Баннер автообновления — когда приложение обнаруживает обновление, показывается приглашающий баннер обновления
  • AdHoc Inbox + AssignPatient + быстрый старт в MAUI (SCRUM-1289, Bohdan)
  • Быстрый старт в PWA на телефоне для разовых (ad-hoc) сессий (SCRUM-1286, Bohdan)
  • Адаптивный веб-вид для телефона — на десктопе без изменений, на телефоне макет адаптируется под узкий экран
  • Обработчик deep-link в iOS — использует BindingContext, регистрацию URL-схемы
  • Строки назначения NSLocation в iOS — исправление ITMS-90683 (App Store отклонял сборку без них)
  • Android AAB — явный шаг jarsigner
  • Материалы App Store Connect и Google Play — полный пакет плюс аудит WCAG 2.2

11. 🔐 Безопасность: SOC 2 / HIPAA, MFA, полная псевдонимизация для AI

Под продуктовым слоем мы провели полное усиление безопасности по SOC 2 и HIPAA плюс DDD-аудит с пятью конкретными результатами.

  • Повторная проверка MFA для критических операций — для чувствительных действий (смена пароля, экспорт данных) требуется повторное подтверждение через MFA
  • Резервные коды для MFA — коды на случай экстренной ситуации, если вы потеряли телефон
  • IAnonymizedLlmGateway (SCRUM-1353, Bohdan) — все вызовы AI-моделей теперь идут через псевдонимизирующий шлюз. Имена, даты, места заменяются псевдонимами до того, как покинут приложение; AI получает только анонимизированную версию
  • Псевдонимизация email/SMS-уведомлений (SCRUM-1354) — шаблоны сообщений тоже не раскрывают данные пациента при отправке
  • OAuth-токены Google/Zoom зашифрованы через Always Encrypted (SCRUM-1355) — токены доступа интеграций зашифрованы на уровне столбцов
  • Флаг Patient.PendingConsent (SCRUM-1356) — пациенты без активного согласия попадают в поток принудительного оформления + значок на фронтенде
  • Конечный автомат состояний инвойса (SCRUM-1357) — статусы инвойса неизменяемы в недопустимых направлениях, это обеспечивается на уровне БД
  • Неизменяемость аудита + снимок пользователя в 3 таблицах аудита — журнал действий нельзя изменить постфактум
  • DeanonymizationAuditLog — каждое использование данных пациента после деанонимизации логируется вместе со снимком email и displayName пользователя, выполнившего это действие
  • Удалены захардкоженные секреты — все ключи и пароли из appsettings.json перенесены в Azure Key Vault
  • Always Encrypted для всех текстовых данных пользователя (ADR-0018) — архитектурное направление утверждено; остальные таблицы мигрируют в следующем релизе
  • Анализ пробелов соответствия ISO/IEC — сопоставлены 95 пробелов по 9 стандартам с планом устранения

Подкреплено полным DDD-аудитом (сессии 1-8, фазы 1-6) — реструктуризация доменных контекстов, документация архитектуры, ADR, mermaid-диаграммы + тесты, руководства, интеграция с Confluence.

12. 👤 Портал пациента — анализы в разделе “Цели”, материалы, улучшенный предпросмотр

  • Концептуализация Beck во вкладке “Цели” пациента — когда вы публикуете концептуализацию, пациент видит её в своём портале
  • Публикация анализов в портал пациента + настройки уведомлений (SCRUM-1338, Bartlomiej) — контроль того, что и когда получает пациент
  • Предпросмотр PDF в порталеiframe вместо embed, CSP разрешает blob: (PDF загружаются)
  • Предпросмотр портала пациента из вида терапевта — увидеть, что видит пациент (обрамление в обёртке, дашборд 1:1)
  • Материалы сессии в Azure Blob Storage — SessionMaterial хранится как blob, больше нет локальной файловой системы
  • Раздел согласий / документов + источник регистрации в настройках пациента
  • Глобальная уникальность email пациента (SCRUM-898) — второй пациент с тем же email получает 409 и закрытие модального окна (SCRUM-898, Ewa)
  • Сидер шаблонов уведомлений для SK, CA, RU, UK, LT (SCRUM-883, Joanna) — полная многоязычная рассылка
  • Резолвер с откатом к платформенному значению по умолчанию — если терапевт не переопределил шаблон, отправляется многоязычный шаблон по умолчанию (SCRUM-883)

13. 🎙️ Транскрипция — надёжная запись, дозапись, реальное время с диаризацией

  • Дозапись к существующей транскрипции — продолжайте запись в той же сессии; сегменты дозаписываются (намерение сохраняется при перезагрузке страницы)
  • Аудио по каждому участнику для диаризации — видеотранскрипция разделяет говорящих на независимых дорожках
  • Транскрипция переживает PiP — сворачивание комнаты не прерывает запись
  • Язык транскрипции из настроек сессии — STT использует язык, установленный вами для пациента
  • Автообновление транскрипции при фокусе / изменении видимости / возврате из видео
  • Подтверждение при остановке записи < 2с — защита от пустого WAV из-за случайного клика
  • Значок “Отправляется” в списке сессий — видно, когда запись загружается
  • Реальное время с диаризацией в видеосессии — раньше не запускалось; теперь работает
  • Резервное копирование в OPFS + Opus 48 kbps — запись также сохраняется локально в OPFS как резерв, параметры аудио унифицированы
  • Прямая загрузка аудио через SAS (SCRUM-1276, Bohdan) — аудио идёт напрямую в Azure через SAS-URL, минуя бэкенд
  • m4a нативно в Azure Speech — m4a обрабатывается нативно, без конвертации
  • Определение формата по магическим байтам (SCRUM-1311, Bohdan) — когда Content-Type=application/octet-stream, формат определяется по содержимому файла
  • Хаб без текста в БД — realtime-хаб SignalR больше не сохраняет текст в БД; finishPending использует multipart POST, как в MAUI
  • Исправление SignalR 1006 — убран skipNegotiation, чтобы Azure SignalR работал + настройка keep-alive
  • Метка [AI] с первой генерации + надёжный поиск метки

14. 💬 Уведомления, настройки пациента, мелкие улучшения UX

  • NotificationTemplatesAdmin — переключатель HTML/Text в редакторе писем
  • NotificationSettings — предпросмотр письма отображает HTML с запасным вариантом
  • PromptEditModal — пересобран: вкладки, выбор модели, обязательные названия версий
  • Сброс флага Hide_dev_ui при выходе — флаги разработчика не сохраняются между сессиями
  • Тестовый пациент Ann Fauler — англоязычный аналог польской Anna Pełnialska для демонстраций только на английском
  • Переключатель режима презентации в Dev UI — быстрый переход в режим презентации
  • Отчёт об ошибке — вложения Jira + метка автора отчёта + центрированная кнопка “Отправить”
  • Исправлен цикл обновления авторизации (auth-refresh loop) — прерывание запросов и возврат на страницу входа при 401
  • Баннер “Сервер запускается” — при холодном старте (scale-to-zero) показывается уведомление вместо пустой страницы
  • Шкала оценки сессии — самонаблюдение вместо оценки качества + дисклеймер (SCRUM-1005, Joanna)
  • Цвет кнопки “Свернуть” изменён на кобальтово-фиолетовый (SCRUM-1307, Ewa)
  • Цвет метки “Транскрипция” изменён с красного на зелёный (SCRUM-1304, Ewa)
  • “Записать сейчас” → “Записать разовую (AdHoc) сессию” — более точное название кнопки
  • Песочница с зелёной лентой в левом верхнем углу + префикс [SANDBOX] в заголовке — во избежание путаницы окружений, плюс повторяемое клонирование PROD → Sandbox (Azure IaC + скрипты)

✅ Чек-лист QA — что проверить после деплоя

ФункцияПроверка
Разовая (ad-hoc) сессия — Quick RecordНажмите Quick Record на дашборде или в PWA — запись начинается сразу, сессия попадает в AdHoc Inbox
AssignPatient в AdHoc InboxОткройте разовую запись — можно назначить существующему пациенту или создать нового
Лимит пакетаДашборд показывает счётчик сессий за текущий месяц и сколько осталось в пакете
Льготный период после неудачного платежаСимулятор подписки в PromptyAI — вызовите неудачный платёж, вы получаете доступ только к аккаунту на 14 дней
Трёхстороннее слияние заметокВ деталях сессии поле Notes показывает три источника бок о бок (терапевт / AI / транскрипция); можно выбрать, что оставить
9 CBT-анализовВкладка CBT-анализов показывает 9 отдельных пунктов; каждый генерируется по запросу; у каждого есть шестерёнка редактирования промпта
Публичный профиль — панелиОткройте свой публичный профиль в авторизованном состоянии — видны панели редактирования биографии, специализации, контактов
Видео PiPВо время видеосессии нажмите свернуть — окно сворачивается в мини-плеер, микрофон продолжает работать, вы возвращаетесь без лобби
Размытие фонаВ лобби видео включите размытие фона — работает сразу, без ошибок CSP
PDF концептуализации BeckСгенерируйте PDF концептуализации — он также появляется в материалах сессии
Переключатель ABC v1/v2В концептуализации v2 можно переключить источник ABC между версией 1 и 2
Инвойс из выбранных платежейВыберите несколько платежей и нажмите “Выставить счёт” — из снимка создаётся единый счёт
Повторяющаяся сессия с Google MeetВторая и третья сессии серии правильно настроены на Google Meet, а письмо содержит правильную ссылку
Сессии с 22:00Недельный календарь показывает сессии, запланированные на 22:00 и позже
Статус “Не явился”В завершённой / отменённой сессии можно изменить статус на “Не явился”
Тёмная тема на мобильномВ мобильном приложении переключитесь на тёмную тему — заголовки групп читаемы
AdHoc Inbox на мобильномМобильное приложение показывает лоток разовых сессий и позволяет назначить пациента
Повторная проверка MFAПри смене пароля приложение снова запрашивает MFA
Псевдонимизация для AIВ логах видно, что данные пациента передаются в AI в виде псевдонимов
Материалы сессии как blobЗагрузите файл в материалы сессии — он попадает в Azure Blob Storage, а не на локальный диск
Глобальная уникальность email пациентаДобавьте второго пациента с тем же email — вы получите 409, и модальное окно закроется
Баннер “Сервер запускается”После длительного простоя вход в приложение показывает баннер вместо пустой страницы

🛠️ Что мы исправили — мелкий шрифт

Помимо крупных функций, было устранено ~80 отчётов от тестировщиков и пользователей. Основные моменты:

  • Оверлей PiP не был кликабельным — исправлено
  • Устаревшее замыкание в handleMaximize — разворачивание из PiP больше не выдаёт ошибку
  • PiP сохраняет соединение — раньше room.disconnect() срабатывал при переходе между полноэкранным режимом и PiP
  • Кнопка “Присоединиться к сессии” была скрыта переопределением CSS — раскрыта
  • Вторая сессия AITS для одного пациента (SCRUM-1319, Ewa) — убран UNIQUE INDEX на Session.VideoInviteToken
  • Нумерация сессий в концептуализации пропускает отменённые (SCRUM-1267, Bohdan)
  • Null-safe доступ к Payment в GetSessionDetailsAsync (SCRUM-1268, Bohdan)
  • Коллизия тестовой сессии Anna Pełnialska с Jan в 14:00 — исправлено в сидере
  • Замедление дашборда — null-safe маппинг в GetTodaySessionsAsync и GetSessionDetailsAsync
  • Автообновление после завершения записи с микрофона — работает
  • Резервный batch-режим не перезаписывает текст из предыдущих записей и не блокирует интерфейс статусом Processing
  • Язык транскрипции из настроек сессии — STT учитывает предпочтение пациента
  • CSP — разрешены *.clarity.ms, blob: в connect-src, аналитика в script-src
  • Цикл обновления авторизации — прерывание запросов после 401 и возврат на страницу входа
  • CSP MediaPipe WASM — размытие фона работает
  • Лента DEV/SANDBOX также на Azure FQDN, не только на кастомном домене
  • Ложный тост “Ошибка транскрипции” при входе в сессию — удалён
  • Тост вместо красного баннера при неудачной транскрипции + убрана кнопка “Resample”
  • Реальное время с диаризацией в видеосессии — запускается корректно
  • AI-стриминг — отдельный AbortController на каждый обработчик вместо общего (BodyStreamBuffer was aborted)
  • Nginx non-root + Azure Container Apps — несколько итераций, чтобы это заработало
  • Распределённая блокировка (sp_getapplock) — миграции при запуске больше не конфликтуют при параллельных деплоях
  • DbUpdateConcurrencyException в пуллере batch-транскрипции (SCRUM-1313, Bohdan)
  • BlobNotFound как ожидаемое состояние (SCRUM-1314, Bohdan)
  • Не-JSON payload в вебхуке Stripe (сканеры / боты) — обрабатываются без ошибок (SCRUM-1315, Bohdan)
  • Определение формата аудио по магическим байтам (SCRUM-1311, Bohdan)
  • Устойчивая загрузка аудио + защитный Content-Type (SCRUM-1293, Bohdan)
  • Миграция внешнего ключа ActiveEmbeddingModelId → ON DELETE NO ACTION
  • Деплой dev-клиента — CACHE_BUST=github.sha принудительно пересобирает фронтенд

Это самый большой и насыщенный релиз этой весны. Если какая-то функция кажется знакомой — это потому, что это был ваш запрос или ваш тикет. Спасибо за каждый отчёт и каждый скриншот.

Статья подготовлена командой Therapy Support

Therapy Support · Начните уже сегодня

Верните время себе
и вашим пациентам

Вы КПТ-терапевт?
Узнайте, как платформа поддерживает вашу ежедневную работу.
Резюме сессий, структурирующие клинический материал. Администрирование, которое не мешает.