ProteGO-Safe / specs

Opis, specyfikacja i zadania. Zacznij tutaj.
GNU General Public License v3.0
118 stars 29 forks source link

Funkcjonalność umożliwiająca wykonanie testu laboratoryjnego COVID-19 dla osób z wysokim ryzykiem kontaktu z osobą chorą z Exposure Notification oraz występującymi objawami COVID-19 #244

Open pkleczko opened 3 years ago

pkleczko commented 3 years ago

Wkrótce aplikacja dołączy do kanałów umożliwiających zapisanie się na test medyczny na COVID-19. Nowa funkcjonalność została zapowiedziana w tym tygodniu przed departament cyfryzacji KPRM. Zapis jest możliwy kiedy moduł analizy kontaktów Exposure Notification [EN] wskaże wysokie ryzyko kontaktu z COVID-19 oraz Test Oceny Ryzyka wskazuje na występowanie objawów COVID-19.

legenda: EN - Exposure Notifications, moduł Google & Apple WGR - Wysoka Grupa Ryzyka (Stan nadawany przez EN i/lub TOR) TOR - Test Oceny Ryzyka (funkcjonalność testu samooceny ryzyka objawów COVID-19 na podstawie ankiety MZ/GIS) PIN - służy do wysyłki kluczy [TEK] PINT (PIN testu) - służy do autoryzacji w trakcie procesu zapisu na test medyczny na COVID-19 TEK - Temporary Exposure Keys (anonimowe klucze, którymi przedstawiają się aplikacje) MZ - Ministerstwo Zdrowia GIS - Generalny Inspektorat Sanitarny Cloud Backend - umowny zestaw funkcji chmurowych i usług składowania danych stanowiący zaplecze aplikacji SafetyNet - weryfikacja autentyczności aplikacji w ekosystemie Google DeviceCheck - weryfikacja autentyczności aplikacji w ekosystemie Apple

Jak wygląda proces zapisu na test?

I CZĘŚĆ - która odbywa się w aplikacji STOP COVID - ProteGO Safe

  1. Funkcjonalność jest dostępna tylko wtedy kiedy moduł analizy kontaktów Exposure Notification wskazuje wysokie ryzyko kontaktu z COVID-19.
  2. Po uzyskaniu Wysokiej Grupy Ryzyka [WGR] z EN użytkownik będzie proszony o wypełnienie Testu Oceny Ryzyka [TOR] (lub regularne wypełnianie do momentu utrzymywania się WGR z EN - jeżeli wynik TOR nie wskazuje na występowanie objawów). Jeżeli Test Oceny Ryzyka wskazuje na objawy charakterystyczne dla COVID-19, użytkownik widzi na ekranie głównym informację o możliwości zapisu na test (“Odbierz test na COVID-19”). Po kliknięciu w przycisk z informacją o możliwości zapisu na test użytkownik przechodzi do procesu zapisu na test. [ Jeśli użytkownik nie wypełnił Testu Oceny Ryzyka na ekranie głównym pojawi mu się sugestia jego wypełnienia (“Sprawdź swoje objawy i zobacz, czy kwalifikujesz się do testu na COVID-19”). Użytkownik może przejść stąd bezpośrednio do Testu Oceny Ryzyka. Jeśli na podstawie ankiety, analiza wykaże występowanie objawów COVID-19, na podsumowaniu Testu będzie dostępny przycisk prowadzący do procesu zapisu na test. ]
  3. W ramach procesu weryfikacji użytkownik musi zadzwonić na infolinię (Centrum Kontaktu) (222 500 115), przekazać konsultantowi informację o tym, że aplikacja pozwala mu na zapis i poprosić o wygenerowanie PIN-u do potwierdzający spełnienie warunków uprawniających do wykonania testu [PIN].
  4. Konsultant generuje w systemie nowy, losowy, jednorazowy i tymczasowy (ważny 30 minut) kod PINT, który przez telefon przekazuje użytkownikowi.
  5. Użytkownik wprowadza PINT w aplikacji, który po zatwierdzeniu przesyłany jest na serwer systemu.
  6. Po otrzymaniu informacji w aplikacji, że PINT został poprawnie przesłany, użytkownik informuje konsultanta o tym fakcie. Od tego momentu jego aplikacja nie będzie pozwalała na ponowne wprowadzenie PINT (aż do wygaśnięcia wysokiego ryzyka kontaktu z modułu EN i jego ponownego wystąpienia).

II CZĘŚĆ - która odbywa się w ramach istniejących procedur GIS/MZ (poza aplikacją, niezależnie od niej).

  1. Konsultant sprawdza w systemie czy przekazany kod PINT został oznaczony jako zweryfikowany (przesłany z aplikacji wskazującej na stan uprawniający do zapisu na test).
  2. Jeśli konsultant widzi, że kod został zweryfikowany, kontynuuje proces zapisu na test, który odbywa się już poza aplikacją.
  3. Po zapisaniu użytkownika na test, konsultant oznacza w systemie, że ten użytkownik (identyfikowany anonimowo na podstawie podanego PINT) został rzeczywiście zapisany na test.

III CZĘŚĆ - która odbywa się w aplikacji STOP COVID - ProteGO Safe

  1. Użytkownik po przesłaniu PIN-u Testu, widzi na ekranie głównym informacje o statusie zapisu na test. Dopóki konsultant nie oznaczy go jako finalnie zapisanego, użytkownik widzi informację, że jest zweryfikowany i powinien kontynuować proces z konsultantem (na wypadek gdyby rozmowa została przerwana a proces niezakończony). Jeśli użytkownik został zapisany, widzi stosowną informację oraz dodatkowe wyjaśnienie, że od tej pory aplikacja nie ma możliwości sprawdzenia wyniku testu ( w praktyce nie istnieje żadne połączenie) , więc również w przypadku otrzymania negatywnego wyniku (użytkownik laboratoryjnie potwierdził, że nie ma COVID-19) aplikacja może przez kilka dni nadal wyświetlać komunikat wysokiego zagrożenia (dopóki w aplikacji nie wygaśnie stan wysokiego ryzyka ze względu na wykryty kontakt przez moduł EN).

Szczegóły techniczne:

  1. Aplikacja w momencie wprowadzenia kodu PINT generuje losowy ciąg znaków jako unikalny identyfikator (GUID) wysokiego stanu ryzyka aplikacji związany z „subskrypcją” na test laboratoryjny. GUID jest usuwany z aplikacji jak tylko ryzyko związane z kontaktem z osobą zarażoną COVID-19 z modułu EN obniży się z poziomu wysokiego.
  2. Po wygenerowaniu identyfikatora jest on razem z kodem PINT przesyłany do Cloud Backend. Do zapytania dodawany jest token pobrany z serwisu SafetyNet (Android) lub DeviceCheck (Apple), w celu weryfikacji instancji aplikacji (certyfikatu jakim jest podpisana), również informacja o tym czy jest to aplikacja Android czy iOS. Przykładowe zapytanie wygląda jak niżej:
curl --location --request POST 'https://mb-dev.safesafe.app/createSubscription' \
--header 'Content-Type: application/json' \
--header 'Safety-Token: token_safetynet_or_device_check'
--header 'User-Agent: android_or_ios'
--data-raw '{
    "code" : "MPCPRY",
    "guid" : "23c713e3-2790-4f52-9e19-106a218ff779"
}'

W odpowiedzi Cloud Backend zwraca token JWT do przyszłej autoryzacji zapytań o status subskrypcji.

  1. Cloud Backend zachowuje subskrypcję na serwerze.
  2. Konsultant Centrum Kontaktu może odpytać Cloud Backend (po wygenerowanym kodzie PINT) czy istnieje subskrypcja z potwierdzonym kodem. Jeśli tak się dzieje kontynuowany jest proces zapisu na test.
  3. Po zakończeniu procesu konsultant przesyła do Cloud Backend żądanie oznaczenia subskrypcji jako zapisany na test.
  4. Aplikacja jeśli posiada subskrypcję, która jest w stanie bez potwierdzenia zapisu na test, odpytuje Cloud Backend przy każdym wejściu na dashboard (nie częściej niż raz na 60 sekund) o daną subskrypcję. Zapytanie wygląda jak niżej:
curl --location --request POST 'https://mb-dev.safesafe.app/getSubscription' \
--header 'Content-Type: application/json' \
--header 'Safety-Token: token_safetynet_or_device_check'
--header 'User-Agent: android_or_ios'
--data-raw '{
    "guid" : "23c713e3-2790-4f52-9e19-106a218ff779"
}'
  1. Jeśli stan zwróconej subskrypcji zmienia się na zapisany na test aplikacja oznacza to i nigdy więcej nie odpytuje o daną subskrypcję (GUID).
  2. Po wygaśnięciu ryzyka z EN aplikacja usuwa wszelkie informacje o subskrypcji. Przy wystąpieniu wysokiego ryzyka po raz kolejny, proces przebiega od nowa w ten sam sposób.
tomekziel commented 3 years ago
potiuk commented 3 years ago

Super, że w końcu Minsterstwo i Twórce zaczynają realizować postulaty zgłaszane od początku przez społeczność. Szybka ścieżka do testów to warunek, który od samego poczatku stawiałem jako konieczny, żeby w ogóle myśleć o wdrożeniu aplikacji masowo.

Czy jest przewidziany sposób w jaki można będzie faktycznie przyspieszyć kwestię przeprowadzenia i otrzymania wyników testów szybko?

Z tego co Minister Zagórski mówił, planujecie rozdmuchać kampanię Protego a ja się obawiam, że jeśli ta ścieżka nie będzie szybka, doprowadzi to do tego, o czym mówiły facebookowe memy - czyli że aplikacja będzie wysyłała ludzi na samo-kwarantannę, bo nie będą w stanie a) szybko testów zrobić, b) dostać szybko wyników.

To jest oczywiście część, która jest poza samą aplikacją, ale jest nieodłączną częścią procesu i musi zostać uwzględniona przy projektowaniu aplikacji - a zwłaszcza uwzgledniając to, że epidemia w tej chwili praktycznie wymknęła się spod jakiejkolwiek kontroli.

Ostatnio mój znajomy (objawowy według testu i z wcześniejszym kontaktem z osobą zarażoną) próbował zrobić sobie test (w punktach drive-through) i udało mu się dopiero po kilku dniach, wynik testu dostał po następnych kilku - w sumie przez prakrycznie 10 dni był na samo-kwarantannie. Wynik wyszedł negatywny. Obawiam się że podobnie będzie to działać dla użytkowników ProteGo.

Pytanie - czy jest jakaś mozliwość zagwarantowania ile czasu będzie zajmować procedura do uzyskania wyniku testu (albo przynajmniej target i dążenie) do określenia jak szybko osoba która dostanie informację o kontakcie, i wynik samo-testu będzie zły?

Czy - w związku z planowaną kampanią zostały przeprowadzone choćby podstawowe (back-of-the envelope) obliczenia - np. Zakładające jaki poziom "nasycenia" chcecie osiągnąć, jak to przeniesie się na liczbę zgłoszeń, testów, jak to potem przeniesie się na dostępność testów i czas uzyskania wyników? Czy raczej jest to działanie którego efektów na razie nie próbowaliście oceniać? Jest spore ryzyko, że jeśli system nie będzie wydolny, to dodatkowo podminuje to zaufanie (bardzo już nadwyrężone) do waszej aplikacji, mam nadzieję, że uwzględniliście to w swoich kalkulacjach.

Czy mógłbym prosić - w imieniu społeczności - o takie wyliczenia? Wydaje mi się, że warto wiedzieć, że zarówno kampanię, jak i przygotowywane mechanizmy obsługi opieracie na jakichś - choćby zgrubnych - wyliczeniach które pokażą że nie zatkacie dodatkowo i tak niewydolnego systemu.

Myślę że bardzo ważne jest wzięcie pod uwagę obecnej sytuacji epidemiologicznej - i świadome zdecydowanie kiedy wprowadzać taką funkcjoinalność (biorąc pod uwage wydolność systemu i założony efekt) oraz kiedy prowadzić kampanię. Do tej pory wszystko było robione "na już" i wielokrotnie się sparzyliście na tym, więc zachęcam do świadomego zastanowienia się nad konsekwencjami waszych działań zanim je podejmiecie i nad odpowiednim ułożeniem ich w czasie - nie ze względu na decyzje polityczne, ale rzetelne wyliczenia inżynierskie i świadomie podejmowane decyzje na podstawie dostępnych danych.

Bardzo bym prosił - w imieniu społeczności - o pokazanie nam swoich wyliczeń i założeń, udawadniając, że zarówno kampania, jak i ta nowa funkcjonalność są na pewno wprowadzane w najlepszym do tego czasie.

pkleczko commented 3 years ago
  • Jaką rolę pełni Safety-Token? Czy użytkownik zrootowanego telefonu będzie mógł przejść opisaną ścieżkę?
  • Czy i w jaki sposób opisana funkcja obroni się przed zapisaniem na test osób, które zasymulują działanie aplikacji CURL-em?

Nie blokujemy root. SafetyNet służy weryfikacji certyfikatu, który został użyty do wygenerowania tokenu. Tylko aplikacja podpisana produkcyjnym certyfikatem będzie akceptowana. To jednocześnie blokuje przypadek z drugiego pytania, czyli curlem nie będzie możliwe wysłanie PINu.

potiuk commented 3 years ago

Naprawdę chętnie poznałbym dane na podstawia których są podejmowane te ostatnie decyzje w projekcie.

Dziś w mediach społecznościowych pojawiły się sugestie, że strategie walki z epidemią są nieprzemyślane i wyglądają bardziej jak maszyna losująca (nie chcę cytować i dawać linków żeby nie być oskarżonym o jakieś jątrzenie) - myślę że warto żebyście pokazali razem z ministerstwem że faktycznie decyzje podejmujecie na podstawie najlepszych danych i w sposób przemyślany.

dbielawsd commented 3 years ago

Zgadzam się to fajny pomysł, ponieważ z jednej strony wykorzystywany są modele matematyczne zdaje się przygotowane zarówno przez osoby z Uniwersytetu Warszawskiego jak i Politechniki Wrocławskiej. Druga rzecz to w moim odczuciu warto pomówić o automatyzacji procesów np. zapisu na testy i odbioru wyników co było już poruszone w jednym ze wcześniejszych wpisów. Tu trzeba będzie wielkiej rozwagi, aby nie było cienia wątpliwości odnośnie utraty prywatności. Co oczywiście będzie kłopotliwe bo siłą rzeczy zapisując się na test trzeba podać dane wymagane do skierowania. Automatyzacja to jeden z elementów, które mogą poprawić komfort użytkowników oraz odciąży system (poprawić wydolność) .

KoderFPV commented 3 years ago

@dbielawsd zgadzam się. Jednak trzeba pamiętać że zaczyna się krok po kroku. Myślę że naturalnie jeżeli mechanizm będzie popularny to pewne rzeczy zostaną poddane automatyzacji.

Chociaż widać że ostatnio ministerstwo zdrowia coraz bardziej odciąża system krok po kroku i to chyba kolejny z elementow.

@pkleczko czy jest jakaś planowana data wydania?

MateuszRomanow commented 3 years ago

@pkleczko czy jest jakaś planowana data wydania?

Zgłoszone do review

pkleczko commented 3 years ago

Aplikacje są już w sklepach.

potiuk commented 3 years ago

A ja bym mimo wszystko poprosił o te dane na podstawie których podejmujecie decyzje:

Prosiłbym o odpwiedź na ten temat - jakie były założenia kampanii, co kampania ma osiągnąć, jakie są podstawowe komunikaty do przekazania ? To są wszystko rzeczy, które się robi przed takimi kampaniami, więc zapewne możecie to tutaj przytoczyć.

KoderFPV commented 3 years ago

https://tvn24.pl/biznes/z-kraju/stop-covid-rzadowa-aplikacja-pozwala-zapisac-sie-na-test-na-koronawirusa-ale-jest-warunek-4739773

Prosta czysta przejrzysta informacja.

potiuk commented 3 years ago

Czy mógłbym prosić jednak o te dane o które prosiłem? Czy ich po prostu nie ma ?

Może jeśli tak jest to po prostu to warto to po prostu powiedzieć ?

drakien223 commented 3 years ago

Dobrze rozumiem, aplikacja opiera się na mocno zamkniętych komponentach ( SafetyNET)? Czy to lata 90?

dbielawsd commented 3 years ago

@drakien223 raczej nie 90 :) proszę spojrzeć na https://developer.android.com/training/safetynet

KoderFPV commented 3 years ago

https://www.onet.pl/styl-zycia/onetkobieta/test-na-koronawirusa-bez-kontaktu-z-lekarzem-poz-aplikacja-stop-covid/mptmm66,2b83378a

Kolejna przejrzysta informacja w dużych mediach.