Plan implementacji Android aplikacji zgodnej z Figmy, bez Jetpack Compose. Architektura: MVVM + Clean Architecture, RxKotlin/RxJava3, DI przez Koin, UI w XML z ViewBinding i DataBinding. Dane i auth w Firebase (Phone Auth + Firestore). Logowanie: telefon+OTP lub kod zaproszenia + OTP. Role logowania: Pacjent i Opiekun (lekarz bez logowania). Relacje many-to-many pacjent <-> wielu opiekunow. Opiekun po pierwszym logowaniu ma onboarding dodania pacjenta, pacjent od razu trafia na ekran pomiarow.
- Role logowania: tylko Pacjent i Opiekun. Lekarz jest kontaktem do powiadomien (bez logowania).
- Logowanie:
- Telefon -> OTP (Firebase Phone Auth).
- Kod zaproszenia (6 cyfr) + telefon -> OTP (dwa kody).
- Zaproszenia tworza konta/relacje jako PENDING w Firestore do pierwszego zalogowania.
- Relacje many-to-many: pacjent moze miec wielu opiekunow; opiekun moze miec wielu pacjentow.
- Glowny opiekun: pierwszy dodany jest domyslny; tylko glowny opiekun moze zmienic glownego.
- Kto kogo dodaje:
- Pacjent dodaje opiekunow i lekarzy.
- Glowny opiekun moze zarzadzac lekarzami pacjenta.
- Lekarz niczym nie zarzadza.
- Powiadomienia:
- Konfiguracja SMS/email/in-app/push.
- MVP: push + in-app dla opiekunow; SMS/email jako intencja udostepnienia.
- Profil pacjenta: jak w Figmie (imie, nazwisko, PESEL, adres, telefon) - opcjonalne.
- Routing po logowaniu:
- Pacjent -> zawsze Home (pomiary).
- Opiekun -> jesli brak pacjentow: PatientSelection (onboarding).
- Opiekun -> jesli sa pacjenci: CaregiverDashboard.
- Utworzenie modulow:
app,domain,data(opcjonalniecore). - Konfiguracja Koin (moduly DI dla data, domain, app).
- Konfiguracja RxJava3/RxKotlin oraz SchedulersProvider.
- Konfiguracja Navigation (auth_graph + main_graph) i MainActivity.
- Ustalenie wzorca ViewBinding + DataBinding.
- Dodanie Firebase SDK (Auth, Firestore, Messaging) i podstawowy config.
Punkt kontrolny: aplikacja sie uruchamia, przechodzi na ekran startowy (RoleSelection), DI i nawigacja dzialaja.
- Ekrany: RoleSelection, Login (telefon/kod), OTP.
- Usecase'y: SendPhoneOtp, VerifyPhoneOtp, EnsureUserRecord, ObserveSession, SignOut.
- Implementacja Phone Auth (Firebase).
- Zapisywanie sesji i roli w lokalnym store (DataStore).
- Routing po logowaniu zgodnie z zasadami.
Punkt kontrolny: pacjent i opiekun moga zalogowac sie OTP, przekierowanie na wlasciwy start.
- Cloud Functions (callable):
createInvite(tworzy zaproszenie z codeHash).resolveInvite(weryfikuje kod + numer, zwraca inviteId).claimInvite(po OTP: konsumuje zaproszenie i tworzy relacje).
- Firestore: kolekcje
invitesz polami status/expiry. - UI: tworzenie zaproszen (pacjent -> opiekun, opiekun -> pacjent).
Punkt kontrolny: kod zaproszenia dziala tylko z poprawnym telefonem i OTP, relacja zostaje aktywowana.
- Dokumenty:
users/{uid}(role, phoneE164, active).patients/{patientId}(status, ownerUid, invitedPhoneE164, displayName).- Subkolekcje: caregivers, doctors, measurements, alertSettings, alerts, visits, medicines, diseases.
- Security Rules: dostep pacjent/opiekun zgodny z relacja; zarzadzanie lekarzami tylko pacjent lub glowny opiekun.
Punkt kontrolny: odczyty/zapisy dzialaja zgodnie z rolami i relacjami.
- Ekran Home (dodawanie pomiarow) + VoiceInput.
- Usecase'y: AddMeasurement, ObserveMeasurements (filtry), MarkRead, ObserveUnreadCount.
- Ekran History (wykres + lista).
- Normalizacja wartosci (cisnienie ma 2 liczby).
Punkt kontrolny: pacjent dodaje pomiary i widzi historie; opiekun widzi historie pacjenta.
- Ekran AlertSettings z konfiguracja progow, rapid change i przypisania opiekunow.
- Usecase'y: ObserveAlertSettings, UpdateAlertSettings, EvaluateAndCreateAlerts, ObserveAlerts.
- Cloud Function trigger -> FCM do przypisanych opiekunow + zapis in-app alert.
- In-app inbox powiadomien.
Punkt kontrolny: przekroczenie progow generuje alerty i push dla opiekunow.
- Ekran Contacts (opiekunowie i lekarze).
- Usecase'y: InviteCaregiver, RemoveCaregiver, SetPrimaryCaregiver, AddDoctor/UpdateDoctor/RemoveDoctor.
- Blokady uprawnien dla lekarzy.
Punkt kontrolny: pacjent dodaje opiekuna i lekarza; glowny opiekun moze zarzadzac lekarzami.
- CaregiverDashboard: trendy, unread, przeglad pacjentow.
- PatientSelection: onboarding i wybor aktywnego pacjenta.
- DataStore: zapamietanie aktywnego pacjenta.
Punkt kontrolny: opiekun zarzadza pacjentami i przechodzi miedzy kontekstami.
- Ekran Visits z CRUD wizyt.
- Usecase'y: Create/Update/Delete/ObserveVisits.
- MVP: przypomnienia jako in-app + opcjonalnie lokalny alarm.
Punkt kontrolny: opiekun planuje i widzi wizyty pacjentow.
- Ekran Home: akcja SOS (tel:112 + SMS do kontaktow).
- Usecase'y: BuildEmergencyMessage, GetEmergencyRecipients.
Punkt kontrolny: akcja SOS wywolywuje polaczenie i przygotowuje SMS.
- Unit testy w domain (normalizacja, alerty).
- Integracyjne dla repozytoriow (emulatory Firebase).
- UI testy najwazniejszych flow logowania.
Punkt kontrolny: scenariusze krytyczne przechodza na emulatorach.
resolveInvite(kod + telefon -> inviteId)claimInvite(inviteId -> aktywacja relacji)createInvite(tworzenie zaproszen przez pacjenta/opiekuna)
- AuthRepository: sendOtp, verifyOtp, observeSession, signOut
- InviteRepository: createInvite, resolveInvite, claimInvite
- PatientRepository: observePatients, observePatient, selectActivePatient, observeActivePatient
- MeasurementRepository: addMeasurement, observeMeasurements, markRead, observeUnreadCount
- AlertRepository: observeSettings, updateSettings, observeAlerts, createAlert
- VisitRepository: createVisit, updateVisit, deleteVisit, observeVisits
- Logowanie pacjenta tel+OTP -> Home.
- Logowanie opiekuna tel+OTP bez pacjentow -> PatientSelection (onboarding).
- Kod zaproszenia + tel + OTP -> aktywacja relacji.
- Opiekun z pacjentami -> CaregiverDashboard.
- Dodanie pomiaru -> zapis + historia + alerty.
- Konfiguracja alertow -> push do opiekuna.
- Dodanie lekarza przez pacjenta i przez glownego opiekuna.
- Kod zaproszenia nigdy nie jest przechowywany jawnie (hash w Firestore).
- Brak backendowego SMS/email w MVP (intencje udostepnienia).
- Dla in-app powiadomien i push potrzebne FCM tokeny per urzadzenie.