Пациент записался на приём на следующий вторник и забыл. Врач ждёт, слот занят — фактически потерян. По статистике клиник, 15–25% записей — no-show без напоминаний. Мы разрабатываем мобильные приложения с настраиваемыми напоминаниями, которые сокращают no-show до 5–8% — в 3–4 раза эффективнее SMS-рассылки. Средняя стоимость пустого слота для клиники — 1500–3000 рублей. Сокращение no-show с 20% до 5% на 50 врачах экономит до 450 000 рублей в месяц. Наше решение включает Push-уведомления, геолокационную поддержку и интеграцию с календарём, что подтверждено сертификатами и опытом 5+ лет и более 20 проектов в сфере здравоохранения. По данным исследования Journal of Medical Internet Research, комбинированные напоминания сокращают no-show на 40%. Получите консультацию по вашему проекту — мы поможем выбрать оптимальную архитектуру.
Почему система напоминаний — основа успеха?
Три обязательных напоминания для каждой записи:
- За 24 часа — «Напоминаем о записи к врачу [ФИО врача] завтра в 14:30»
- За 2 часа — «Через 2 часа приём в [клиника], кабинет 215»
- В момент, когда нужно выходить — рассчитывается на основе геолокации пользователя и адреса клиники через Google Maps Distance Matrix API или 2GIS API
Третий тип самый ценный и самый редкий в реализации. Логика: ночью перед приёмом серверный планировщик запрашивает текущую локацию пользователя (если разрешение PERMISSION_BACKGROUND_LOCATION получено) или последнюю известную, рассчитывает время в пути, ставит задачу отправки push на appointment_time - travel_time - 15 min.
На iOS для этого нужен Background Location usage description в Info.plist и NSLocationAlwaysAndWhenInUseUsageDescription. Apple тщательно проверяет обоснование при ревью — нужно чётко объяснить пользу.
Подробнее о разрешении фоновой геолокации
Apple требует явного указания причины в Info.plist. Например: «Приложение использует ваше местоположение в фоне, чтобы рассчитать время в пути до приёма и отправить своевременное напоминание». Без этого App Store отклонит сборку.
Подтверждение и отмена прямо из push-уведомления — через UNNotificationAction:
let confirmAction = UNNotificationAction( identifier: "CONFIRM_ACTION", title: "Подтвердить ✓", options: [] ) let cancelAction = UNNotificationAction( identifier: "CANCEL_ACTION", title: "Отменить запись", options: [.destructive] ) Нажатие «Отменить» без открытия приложения вызывает API, освобождает слот и уведомляет клинику.
Расписание врачей: техническая реализация
Сетка расписания — самый сложный компонент на бэкенде. Каждый врач имеет:
- Базовое расписание (понедельник 9:00–13:00, среда 14:00–18:00)
- Исключения (отпуска, больничные, замены)
- Длительность слота (15, 20, 30 минут — зависит от специализации)
- Количество записей на один слот (обычно 1, но бывают групповые занятия)
Генерация доступных слотов для конкретного врача на диапазон дат: берём базовое расписание, вычитаем исключения и уже занятые слоты. Запрос к PostgreSQL с JOIN на таблицу appointments и exceptions, результат кешируется в Redis на 5 минут.
При одновременной записи двух пользователей на один слот (race condition) — транзакция с PostgreSQL row-level locking (SELECT FOR UPDATE) на строку слота. Первый получает подтверждение, второй — «этот слот уже занят, выберите другое время».
Как технически реализовать выбор времени?
Шаги реализации:
- Загрузить список врачей и их базовое расписание.
- По выбранному врачу запросить доступные слоты на ближайшие 7 дней.
- Отобразить календарь с доступными днями (
TableCalendarна Flutter). - При выборе дня показать горизонтальный список временных кнопок с доступными слотами.
- Недоступные слоты показываем серым, не скрываем — пользователь понимает заполненность расписания.
- Сразу показываем ближайшее доступное время вверху — снижает время до первого тапа.
- При выборе слота — фиксация с оптимистичным UI и запросом к API.
Медицинская карта и история
История посещений, выписки, результаты анализов — требует особого внимания к безопасности данных. В России — требования 152-ФЗ и приказы Минздрава по хранению медицинских данных.
Документы хранятся в зашифрованном S3 (AES-256), доступ только через backend с проверкой прав, ссылки presigned с TTL 15 минут. На клиенте документы не кешируются на диске.
Уведомления для врача и регистратуры
Врач получает push на свой планшет/телефон:
- «Новая запись на [время]» — с кратким анамнезом если пациент заполнил
- «Пациент подтвердил запись»
- «Пациент отменил за 2 часа до приёма» — освобождает слот
Регистратура видит общий список записей на день в web-кабинете (React + WebSocket для live-обновлений).
Стек и сроки
| Компонент | Технология |
|---|---|
| Mobile | Flutter (iOS + Android) |
| Backend | Node.js/Go + PostgreSQL |
| Push | FCM + APNs |
| Карты | Yandex Maps SDK / Google Maps |
| Документы | S3-compatible + encrypted |
| Масштаб | Срок |
|---|---|
| MVP: запись, напоминания, история | 8–12 недель |
| + Телемедицина (видеоконсультации) | +6–8 недель |
| + Интеграция с МИС (1С:Медицина и др.) | +4–8 недель |
Что входит в работу
- Анализ бизнес-требований и проектирование архитектуры
- Разработка клиентской части (iOS + Android) на едином коде Flutter
- Реализация backend-сервиса с PostgreSQL и Redis
- Настройка Push-уведомлений (FCM/APNs) и интеграция карт
- Подготовка документации и инструкций для администраторов
- Размещение в App Store и Google Play с полным сопровождением
- Гарантийная поддержка 3 месяца
Получите консультацию по вашему проекту — мы подготовим предложение с точными сроками и стоимостью под вашу специфику.







