Розробка мобільного додатку для медичної клініки
Медичний додаток — це не просто "запис до лікаря + онлайн-консультації". Це робота в умовах жорстких вимог до даних (HIPAA у США, ФЗ-323 та Наказ Мінздрава № 965н у Росії, GDPR у Європі), інтеграції з медичними інформаційними системами (МІС) та специфічних сценаріїв, де UX-помилка може мати клінічні наслідки.
Визначення архітектури
Перед першою строкою коду потрібно відповісти на три питання:
Які персональні дані обробляємо? ПІБ + дата народження = персональні дані за ФЗ-152. Діагнози, аналізи, історія хвороби = спеціальна категорія — вимагає окремої згоди та посиленого захисту. HIPAA аналогічно виділяє PHI. Вимоги до сервера та зберігання принципово відрізняються.
Є ли телемедицина? Онлайн-консультації у Росії регулюються Наказом МЗ № 965н. Призначення лікування через видеосвязь вимагає ідентифікації пацієнта з підтвердженою особистістю (СНІЛС, паспорт). Західні додатки — HIPAA вимагає BAA від провайдерів відеосвязи.
Інтеграція з МІС? 1С:Медицина, МедЕлемент, Archimed+, TeleMed2 — у кожної своя API. Часто через FHIR (Fast Healthcare Interoperability Resources) — міжнародний стандарт для обміну медичними даними. Або HL7 v2 — legacy протокол, все ще широко використовується.
Типова архітектура
Стандартний набір модулів для клініки:
- Auth — реєстрація, верифікація особистості (СНІЛС / паспорт), біометричний вхід.
- Запис — розписання лікарів, онлайн-запис, нагадування (Push, СМС).
- Особистий кабінет — історія приймів, результати аналізів, рецепти.
- Телемедицина — відеоконсультація, чат з лікарем.
- Платежі — еквайринг, оплата страховкою, розстрочка.
- Сповіщення — нагадування про прийом, готовність аналізів, повторні візити.
Запис до лікаря: не просто calendar picker
Складності:
Завантаженість в реальному часі. Слот, доступний 30 секунд назад, може бути зайнятий. Без WebSocket/polling кожні 10–15 секунд — користувач вибере зайнятий слот, отримає помилку. Optimistic locking + інформативне повідомлення.
Попередня запис vs жива черга. Деякі клініки комбінують. Додаток показує: "Запис на 14:30" та "Жива черга, сейчас приймають пацієнта №4 з 7".
Скасування та перенесення. Політика скасування (до N годин — безплатно, пізніше — штраф). Push за 24 години з кнопками "Підтвердити / Перенести / Скасувати".
Телемедицина: відеосвязь
Провайдери: Daily.co, Twilio Video, Agora, Zoom SDK, Vonage. HIPAA-compliant: Daily.co Business, Twilio HIPAA-eligible. Російський ринок: перевіримо вимоги зберігання даних на серверах РФ — багато західних провайдерів непридатні.
// Flutter — Agora RTC
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
final engine = createAgoraRtcEngine();
await engine.initialize(RtcEngineContext(appId: agoraAppId));
await engine.enableVideo();
await engine.startPreview();
final token = await consultationRepository.getAgoraToken(channelId);
await engine.joinChannel(
token: token,
channelId: channelId,
uid: currentUserId,
options: const ChannelMediaOptions(
channelProfile: ChannelProfileType.channelProfileCommunication,
clientRoleType: ClientRoleType.clientRoleBroadcaster,
),
);
Token Agora генерується на сервері з тимчасовим TTL. Ніколи не статичний у продакшені.
UX під час дзвінка: індикатор якості зв'язку, mute / camera toggle, запит на вмикання камери, таймер консультації, кнопка технічної підтримки. Запис дзвінка (якщо дозволено) — явне сповіщення обом сторонам.
Результати аналізів: PDF та структуровані дані
Лабораторії віддають результати двома способами: PDF та структуровані (HL7, FHIR, JSON через API МІС). Для додатку потрібні обидва:
PDF — вбудовуємо через PDFKit (iOS) або AndroidPdfViewer. Для FHIR DiagnosticReport — парсимо та показуємо з референсними значеннями та кольоровою індикацією (норма / відхилення).
Важливо: результати аналізів — спеціальна категорія ПДн. Шифрування на пристрої обов'язково. FileProtectionType.completeUnlessOpen (iOS) / EncryptedFile з androidx.security (Android). Не кешуємо без шифрування.
Push-сповіщення: медична специфіка
Нагадування про прийом — за 24 години та за 2 години. Push з action buttons: "Підтвердити" / "Перенести" — обробляємо в UNNotificationResponse (iOS) / NotificationReceiver (Android) без відкриття додатку.
"Готові результати аналізів" — чутливе. У preview (на заблокованому екрані) не показуємо діагноз — лише "Результати готові, відкрийте додаток". Налаштовуємо через UNMutableNotificationContent.interruptionLevel (iOS 15+) та NotificationCompat.PRIORITY_DEFAULT без чутливого вмісту.
Платежі
Еквайринг: CloudPayments, Tinkoff Acquiring SDK, Robokassa для Росії. Stripe для міжнародного. Інтеграція Apple Pay та Google Pay обов'язкова для конверсії.
Хмарна касса (ФЗ-54): кожен платіж через додаток повинен фіскалізуватися. Підключаємо АТОЛ Онлайн, OFD.ru або аналог — відправляємо чек на email/телефон. Без цього — адміністративна відповідальність.
Безпека та аудит
Certificate Pinning — обов'язковий. TrustKit (iOS) або OkHttp CertificatePinner (Android). Резервні pinned сертифікати.
Root/Jailbreak detection — для додатків з PHI. IOSSecuritySuite (iOS), RootBeer (Android). При виявленні: не блокуємо повністю (агресивно, неточно), але шифруємо додатково чутливий контент.
Audit Log — кожне звернення до медичних даних логується (хто, що, коли). Лог на сервері, недоступний до змін з клієнта.
Сроки
| Етап | Строк |
|---|---|
| Аналітика, архітектура, UX | 3–4 тижні |
| Auth + верифікація | 2–3 тижні |
| Запис + розписання | 3–4 тижні |
| Особистий кабінет + лабораторія | 2–3 тижні |
| Телемедицина (відео + чат) | 3–4 тижні |
| Платежі + фіскалізація | 2 тижні |
| Інтеграція з МІС | 3–6 тижнів (залежить від МІС) |
| QA, безпека, публікація | 3–4 тижні |
MVP (запис + особистий кабінет без телемедицини) — 4–5 місяців. Повний з телемедициною та МІС — 7–12 місяців. Вартість розраховується індивідуально.







