Система записи пациентов на приём
Self-hosted веб-система для онлайн-записи пациентов и работы медицинского персонала
Задача
Разработать self-hosted систему записи пациентов на приём для организации с взаимодействием с корпоративной сетью
Что умеет система
- пациент может выбрать врача, направление, свободный слот, а потом подтвердить запись в личном кабинете;
- вести запись пациентов через профиль регистратуры;
- врач видит свои приёмы, меняет доступность слотов и завершает приём;
- управлять расписанием и учётными записями сотрудников через учетную запись глав. врача.
Структура приложения
Серверная часть построена на Java и Spring Boot. HTTP-контроллеры принимают запросы из публичного и внутреннего (корпоративного) интерфейсов, валидируют данные. В бизнес логике проверяется доступность слота, можно создать и отменить записи
Данные хранятся в бд PostgreSQL. Для работы с запросами используется jOOQ, Flyway использовался для миграций

Для развёртывания предусмотрены Dockerfile, Docker Compose и Caddy как reverse proxy. REST API документирован через OpenAPI; для критичных сценариев добавлены интеграционные тесты
Active Directory и Kerberos
Приложение не подключается к Active Directory, а идёт через Keycloak как OIDC-провайдеру, Spring Security получает OIDC/JWT-токен, преобразует роли и связывает учётную запись с локальным профилем пациента / сотрудника.
В режиме ad Keycloak подключается к Active Directory через LDAP federation. Конфиг предусматривает Kerberos как предпочтительный механиз, так наш пользователь Windows в доменной сети может пройти бесшовный вход по доменной учётной записи
Архитектура
На схеме показаны четыре роли, веб-интерфейс, REST-слой, сервисы, Keycloak и PostgreSQL

Результат
ПО можно найти на github: medical-appointment-system