מרפאה רפואית זקוקה לאפליקציה לנייד העומדת בתקנות מחמירות: HIPAA בארה"ב, FZ-323 וצו משרד הבריאות מס' 965n ברוסיה, GDPR באירופה. אינטגרציה עם מערכות מידע רפואיות (MIS) ומקרי שימוש ספציפיים דורשים גישה מיוחדת שבה כל שגיאת UX עלולה להיות בעלת השלכות קליניות. הניסיון הרב שלנו מראה שארכיטקטורה נכונה מההתחלה קובעת את הצלחת הפרויקט — אנו מבטיחים אבטחת מידע ופעילות אמינה.
לפני תחילת הפיתוח, אנו עונים על שלוש שאלות מפתח: איזה מידע אישי מעובד (שם מלא, אבחנות, תוצאות מעבדה — קטגוריה מיוחדת), האם תיעשה שימוש בטלרפואה (דורש KYC ו-BAA), ואיזו MIS דורשת אינטגרציה (1C:Medicine, MedElement, Archimed+ — לכל אחת API משלה).
כיצד הארכיטקטורה משפיעה על אבטחה וסקיילינג
מערך מודולים טיפוסי למרפאה: Auth (אימות זהות, ביומטריה), קביעת תורים (תזמון, תזכורות), חשבון אישי (היסטוריה, תוצאות מעבדה, מרשמים), טלרפואה (שיחת וידאו, הודעות), תשלומים (רכישה, פיסקליזציה), התראות (push, SMS).
עבור Flutter, אנו משתמשים ב-Clean Architecture עם BLoC: מודולי פיצ'רים נפרדים (appointment, telemedicine, lab_results) עם BLoC, Repository ו-Data source משלהם. תלויות מנוהלות באמצעות get_it או Riverpod. עבור React Native — Redux Toolkit או Zustand עם פירוק לפי דומיינים ו-React Query לניהול state של השרת.
Flutter עם BLoC מספק ביצועים יציבים יותר ב-25% בהשוואה ל-React Native בעומס גבוה (לפי בדיקות העומס שלנו).
קביעת תורים: אתגרים אמיתיים
תזמון אינו בורר תאריכים פשוט. זמינות בזמן אמת דורשת WebSocket או polling כל 10–15 שניות. נעילת אופטימית על השרת מונעת כפל הזמנות. שילוב של רישום מוקדם ותור חי הוא משימה נפוצה. מדיניות ביטול (חינם עד N שעות, ואז קנס) מיושמת עם התראה של 24 שעות עם כפתורים: "אישור / דחייה / ביטול".
טלרפואה: תקשורת וידאו
ספקים: Daily.co, Twilio Video, Agora, Zoom SDK, Vonage. עבור עמידה ב-HIPAA — תוכנית Daily.co Business או Twilio HIPAA-eligible. ברוסיה, אנו מוודאים את מיקום השרת (FZ-152). דוגמה לאינטגרציה של Agora על Flutter:
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 נוצר עם TTL של 15–60 דקות. Tokens סטטיים בסביבת ייצור אינם מקובלים. UX: מחוון איכות חיבור, השתקה, מצלמה, טיימר ייעוץ, כפתור תמיכה. הקלטת שיחה עם הודעה לשני הצדדים.
תוצאות מעבדה ואחסון מאובטח
מעבדות מספקות נתונים כ-PDF או בפורמט מובנה (HL7, FHIR, JSON). PDF מוצג באמצעות 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, ), ); (iOS) או PDFKit. FHIR AndroidPdfViewer מנותח עם טווחי ייחוס וקידוד צבעים. הצפנה על המכשיר היא חובה: DiagnosticReport (iOS) / FileProtectionType.completeUnlessOpen (Android). שמירה במטמון ללא הצפנה אינה מקובלת.
למה לבדוק נגישות עבור מטופלים מבוגרים?
Dynamic Type (iOS) והגדלת גופן (Android) נבדקים בגודל מקסימלי. VoiceOver / TalkBack — תמיכה מינימלית. אזורי מגע — לפחות 44×44pt. לפי סטטיסטיקות הפרויקטים שלנו, 40% ממשתמשי אפליקציות רפואיות הם מעל גיל 60, ונוחות השימוש בממשק משפיעה ישירות על נאמנות.
התראות Push: מידע רגיש
תזכורות לתורים — 24 ו-2 שעות מראש עם כפתורי פעולה: "אישור" / "דחייה". התראה על תוצאות מעבדה מוכנות אינה כוללת אבחנה בתצוגה המקדימה — רק "התוצאות שלך מוכנות". מוגדר באמצעות EncryptedFile (iOS) ו-UNMutableNotificationContent.interruptionLevel (Android).
תשלומים ופיסקליזציה
רכישה: CloudPayments, Tinkoff, Stripe. תמיכה ב-Apple Pay ו-Google Pay היא חובה. פיסקליזציה לפי FZ-54 דרך ATOL Online או OFD.ru — קבלה נשלחת בדוא"ל/טלפון.
השוואת דרישות הגנת מידע
| אזור | תקן מרכזי | דרישות נוספות |
|---|---|---|
| ארה"ב | HIPAA | BAA עם ספקים, הצפנת PHI |
| רוסיה | FZ-323, 152-FZ | לוקליזציה של נתונים, הסכמה לעיבוד |
| אירופה | GDPR | זכות להימחק, DPA עם מפעילים |
אמצעי אבטחה טכניים
| שיטה | iOS | Android |
|---|---|---|
| Certificate Pinning | TrustKit | OkHttp CertificatePinner |
| הצפנה על המכשיר | FileProtectionType.completeUnlessOpen | EncryptedFile |
| זיהוי Root/Jailbreak | IOSSecuritySuite | RootBeer |
Certificate Pinning הוא חובה: NotificationCompat.PRIORITY_DEFAULT (iOS) או TrustKit (Android). גיבוי של תעודות pinned מונע אובדן חיבור בעת פקיעת תוקף. זיהוי Root/Jailbreak אינו חוסם גישה אלא מחזק את ההצפנה של תוכן רגיש. כל גישה לנתונים רפואיים מתועדת (יומן ביקורת) על שרת שאינו נגיש ללקוח.
מידע נוסף על Certificate Pinning
אנו משתמשים רק בתעודות רשמיות ומאמתים אותן באמצעות public key pinning. במקרה של אי-התאמה, החיבור מנותק והמשתמש רואה אזהרה על התקפה אפשרית.
מה כלול במסירה
- קוד מקור עם הערות
- תיעוד: דיאגרמת ארכיטקטורה, הוראות בנייה ופריסה
- גישה לקונסולות: App Store Connect / Google Play Console, שרת אנליטיקה, מערכת ניטור שגיאות
- הדרכת מנהלים (2–3 שעות)
- תמיכה באחריות ל-3 חודשים
תהליך הפיתוח
- אנליטיקה, ארכיטקטורה, אב-טיפוס UX (3–4 שבועות)
- מודול Auth + אימות (2–3 שבועות)
- קביעת תורים (3–4 שבועות)
- חשבון אישי + תוצאות מעבדה (2–3 שבועות)
- טלרפואה (וידאו + צ'אט) (3–4 שבועות)
- תשלומים + פיסקליזציה (שבועיים)
- אינטגרציית MIS (3–6 שבועות)
- QA, בדיקות עומס, פרסום (3–4 שבועות)
לוחות זמנים ועלות
MVP (קביעת תורים + חשבון אישי ללא טלרפואה) — 4–5 חודשים. אפליקציה מלאה עם טלרפואה ואינטגרציית MIS — 7–12 חודשים. העלות מחושבת באופן אישי לאחר ביקורת דרישות. תזמון אוטומטי מפחית את עומס מוקד הטלפוני ב-30–40%, ומכסה את עלות הפיתוח תוך שנה. יש לנו 7 שנות ניסיון בפרויקטים רפואיים ומסרנו מעל 30 פתרונות למרפאות ברוסיה, בארה"ב ובאירופה. צרו קשר לביקורת מפורטת של הדרישות שלכם. נכין תוכנית ראשונית והערכת לוחות זמנים. בקשו ייעוץ לדיון באינטגרציה עם ה-MIS שלכם.







