m. MuskatGroupEN ↗

MuskatGroup / Продукты

Электронная очередь: от табло до кабинета врача

Живая демонстрация маршрутизации пациентов с личными сессиями, новым React-интерфейсом и Rust API.

ReactTypeScriptViteRustAxumSQLite
Табло PatientQueue с шестью кабинетами и текущими вызовами

Задача

Превратить исходный PatientQueue в самостоятельное интерактивное демо: посетитель видит общую картину очереди, следит за выбранным талоном и пробует рабочее место врача. Персональная демосессия позволяет исследовать систему, не меняя данные других посетителей.

Три режима одной системы

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

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

Модернизация

Две исходные React-части объединены в новый интерфейс на React, TypeScript и Vite. Переработаны композиция, карточки кабинетов, типографика и мобильное представление. Есть русский и английский языки, светлая и тёмная темы, полноэкранное табло и управление с клавиатуры.

Backend переписан с .NET на Rust: Axum, Tokio, SQLx и SQLite. HTTP, хранение, доменные переходы и симуляция разделены. Контракт описан в OpenAPI; типы frontend генерируются из этого контракта.

Изоляция и согласованность

Сессия определяется серверной HttpOnly cookie, все операции ограничены её состоянием. Версия снимка и Idempotency-Key защищают от конфликтов и повторной отправки. При сетевом сбое интерфейс сохраняет текущий вид и позволяет повторить команду. SQLite сохраняет сессии после перезапуска API; автоматическая очистка ограничивает время их жизни.

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

Выпуск

Frontend и API имеют отдельные репозитории и собираются независимо. Собственный Compose-проект подключается к общему Caddy только через frontend. Предусмотрены согласованная копия SQLite перед миграцией, откат пары образов и базы, внешние проверки доступности и резервирование.

Публичная ссылка появится после размещения на отдельном поддомене.

Интерфейс продукта

Открыть демо ↗