diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index c47ef47fd..f85ac0b82 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -2,9 +2,9 @@ name: Android Check Build on: push: - branches: [ master, develop ] + branches: [ master, develop, feature/v2 ] pull_request: - branches: [ master, develop ] + branches: [ master, develop, feature/v2 ] jobs: build: diff --git a/.github/workflows/appcenter_test.yml b/.github/workflows/appcenter_test.yml deleted file mode 100644 index 1bf3f23f2..000000000 --- a/.github/workflows/appcenter_test.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Android Build - -on: - push: - branches: [ master, develop ] - pull_request: - branches: [ master ] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: Build with Gradle - uses: ./.github/actions/gradle_docker - with: - gradle-cmd: assembleTeschtRelease -PkeystorePassword=${{secrets.KEYSTORE_PASSWORD}} -PkeyAliasPassword=${{secrets.KEY_ALIAS_PASSWORD}} - - name: upload artefact to App Center - uses: wzieba/AppCenter-Github-Action@v1.0.0 - with: - appName: ${{secrets.APPCENTER_ORGANIZATION}}/${{secrets.APPCENTER_APP_TEST}} - token: ${{secrets.APPCENTER_API_TOKEN}} - group: Internal - file: app/build/outputs/apk/tescht/release/app-tescht-release.apk diff --git a/Dockerfile b/Dockerfile index 777679f88..803636bd0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,9 @@ FROM gradle:6.6.1-jdk8 ENV ANDROID_SDK_URL https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip -ENV ANDROID_BUILD_TOOLS_VERSION 29.0.3 +ENV ANDROID_BUILD_TOOLS_VERSION 30.0.1 ENV ANDROID_HOME /usr/local/android-sdk-linux -ENV ANDROID_VERSION 29 +ENV ANDROID_VERSION 30 ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools RUN mkdir "$ANDROID_HOME" .android && \ diff --git a/README.md b/README.md index 3b6ddec41..c7a986f34 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,26 @@ -# SwissCovid: DP3T Android App for Switzerland +
- - - - -
+Please see the [SwissCovid documentation repository](https://github.com/SwissCovid/swisscovid-doc) for more details. ## Contribution Guide @@ -29,18 +31,19 @@ Bugs or potential problems should be reported using Github issues. We welcome al Platform independent UX and design discussions should be reported in [dp3t-ux-screenflows-ch](https://github.com/DP-3T/dp3t-ux-screenflows-ch) ## Repositories -* Android SDK & Calibration app: [dp3t-sdk-android](https://github.com/DP-3T/dp3t-sdk-android) -* iOS SDK & Calibration app: [dp3t-sdk-ios](https://github.com/DP-3T/dp3t-sdk-ios) -* Android App: [dp3t-app-android](https://github.com/DP-3T/dp3t-app-android-ch) -* iOS App: [dp3t-app-ios](https://github.com/DP-3T/dp3t-app-ios-ch) -* Backend SDK: [dp3t-sdk-backend](https://github.com/DP-3T/dp3t-sdk-backend) -* UX & Screenflows [dp3t-ux-screenflows-ch](https://github.com/DP-3T/dp3t-ux-screenflows-ch) - - -## Further Documentation -The full set of documents for DP3T is at https://github.com/DP-3T/documents. Please refer to the technical documents and whitepapers for a description of the implementation. - -A description of the usage of the Google Exposure Notifcation API can be found [here](https://github.com/DP-3T/dp3t-sdk-android/blob/master/EXPOSURE_NOTIFICATION_API_USAGE.md). +* Android App: [swisscovid-app-android](https://github.com/SwissCovid/swisscovid-app-android) +* iOS App: [swisscovid-app-ios](https://github.com/SwissCovid/swisscovid-app-ios) +* CovidCode Web-App: [CovidCode-UI](https://github.com/admin-ch/CovidCode-UI) +* CovidCode Backend: [CovidCode-Service](https://github.com/admin-ch/CovidCode-service) +* Config Backend: [swisscovid-config-backend](https://github.com/SwissCovid/swisscovid-config-backend) +* Additional Info Backend: [swisscovid-additionalinfo-backend](https://github.com/SwissCovid/swisscovid-additionalinfo-backend) +* QR Code Landingpage: [swisscovid-qr-landingpage](https://github.com/SwissCovid/swisscovid-qr-landingpage) +* DP3T Android SDK & Calibration app: [dp3t-sdk-android](https://github.com/DP-3T/dp3t-sdk-android) +* DP3T iOS SDK & Calibration app: [dp3t-sdk-ios](https://github.com/DP-3T/dp3t-sdk-ios) +* DP3T Backend SDK: [dp3t-sdk-backend](https://github.com/DP-3T/dp3t-sdk-backend) +* CrowdNotifier Android SDK: [crowdnotifier-sdk-android](https://github.com/CrowdNotifier/crowdnotifier-sdk-android) +* CrowdNotifier iOS SDK: [crowdnotifier-sdk-ios](https://github.com/CrowdNotifier/crowdnotifier-sdk-ios) +* CrowdNotifier Backend: [swisscovid-cn-backend](https://github.com/SwissCovid/swisscovid-cn-backend) ## Installation and Building diff --git a/app/build.gradle b/app/build.gradle index dbc046255..2ff71f802 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,37 +12,20 @@ plugins { id 'com.android.application' id 'kotlin-android' id 'org.sonarqube' version '2.8' + } apply from: 'backend_certs.gradle' -ext.readProperty = { paramName -> readPropertyWithDefault(paramName, null) } -ext.readPropertyWithDefault = { paramName, defaultValue -> - if (project.hasProperty(paramName)) { - return project.getProperties().get(paramName) - } else { - Properties properties = new Properties() - if (project.rootProject.file('local.properties').exists()) { - properties.load(project.rootProject.file('local.properties').newDataInputStream()) - } - if (properties.getProperty(paramName) != null) { - return properties.getProperty(paramName) - } else { - return defaultValue - } - } -} - android { compileSdkVersion 30 - buildToolsVersion "29.0.3" defaultConfig { applicationId "ch.admin.bag.dp3t" minSdkVersion 23 targetSdkVersion 30 - versionCode 15000 - versionName "1.5.0" + versionCode 20002 + versionName "2.0.0" resConfigs "en", "fr", "de", "it", "pt", "es", "sq", "bs", "hr", "sr", "rm", "tr", "ti" buildConfigField "long", "BUILD_TIME", readPropertyWithDefault('buildTimestamp', System.currentTimeMillis()) + 'L' @@ -68,20 +51,13 @@ android { buildConfigField 'String', 'BUCKET_URL', '"https://www.pt-d.bfs.admin.ch/"' buildConfigField 'String', 'REPORT_URL', '"https://www.pt1-d.bfs.admin.ch/"' buildConfigField 'String', 'STATS_URL', '"https://www.pt-d.bfs.admin.ch/"' + buildConfigField 'String', 'PUBLISHED_CROWDNOTIFIER_KEYS_BASE_URL', '"https://www.pt-d.bfs.admin.ch/"' + buildConfigField "String", "ENTRY_QR_CODE_HOST", '"qr-d.swisscovid.ch"' + buildConfigField "String", "QR_MASTER_PUBLIC_KEY_BASE_64", '"lW5voTRVR-jgYMiWLd04hjvyyFQG7QOyBLw0D7XbASlqlg0AviQMqgjbABZk9PcCip27szrqFyv_1YtKZE8eyzt7vtN4qKfJdWrItLRzRtjb83piN3cDt_yNo7siohQV"' buildConfigField 'String', 'CONFIG_CERTIFICATE', "\"${project.backend_certs.dev.CONFIG_CERTIFICATE}\"" buildConfigField 'String', 'BUCKET_PUBLIC_KEY', "\"${project.backend_certs.dev.BUCKET_PUBLIC_KEY}\"" applicationIdSuffix '.dev' - } - tescht { - buildConfigField 'boolean', 'DEV_HISTORY', 'true' - buildConfigField 'String', 'AUTH_CODE_URL', '"https://codegen-service-t.bag.admin.ch/"' - buildConfigField 'String', 'CONFIG_URL', '"https://www.pt-t.bfs.admin.ch/"' - buildConfigField 'String', 'BUCKET_URL', '"https://www.pt-t.bfs.admin.ch/"' - buildConfigField 'String', 'REPORT_URL', '"https://www.pt1-t.bfs.admin.ch/"' - buildConfigField 'String', 'STATS_URL', '"https://www.pt-t.bfs.admin.ch/"' - buildConfigField 'String', 'CONFIG_CERTIFICATE', "\"${project.backend_certs.test.CONFIG_CERTIFICATE}\"" - buildConfigField 'String', 'BUCKET_PUBLIC_KEY', "\"${project.backend_certs.test.BUCKET_PUBLIC_KEY}\"" - applicationIdSuffix '.test' + manifestPlaceholders = [qrCodeHostName: "qr-d.swisscovid.ch"] } abnahme { buildConfigField 'boolean', 'DEV_HISTORY', 'true' @@ -90,9 +66,13 @@ android { buildConfigField 'String', 'BUCKET_URL', '"https://www.pt-a.bfs.admin.ch/"' buildConfigField 'String', 'REPORT_URL', '"https://www.pt1-a.bfs.admin.ch/"' buildConfigField 'String', 'STATS_URL', '"https://www.pt-a.bfs.admin.ch/"' + buildConfigField 'String', 'PUBLISHED_CROWDNOTIFIER_KEYS_BASE_URL', '"https://www.pt-a.bfs.admin.ch/"' + buildConfigField "String", "ENTRY_QR_CODE_HOST", '"qr-a.swisscovid.ch"' + buildConfigField "String", "QR_MASTER_PUBLIC_KEY_BASE_64", '"RHk4TO95YVnihWuCSVnbQ3ow-AcO-BXZ9caWeO_GP7o-vEiowJXTkKSUAf77n4oAmzshDvFVLkQFsA72JfBcaC8QSIT9owk83tnDuwpUuDfFgiBq_KXqcA2UcxaInmQS"' buildConfigField 'String', 'CONFIG_CERTIFICATE', "\"${project.backend_certs.abnahme.CONFIG_CERTIFICATE}\"" buildConfigField 'String', 'BUCKET_PUBLIC_KEY', "\"${project.backend_certs.abnahme.BUCKET_PUBLIC_KEY}\"" applicationIdSuffix '.abnahme' + manifestPlaceholders = [qrCodeHostName: "qr-a.swisscovid.ch"] } prod { buildConfigField 'boolean', 'DEV_HISTORY', 'false' @@ -101,8 +81,12 @@ android { buildConfigField 'String', 'BUCKET_URL', '"https://www.pt.bfs.admin.ch/"' buildConfigField 'String', 'REPORT_URL', '"https://www.pt1.bfs.admin.ch/"' buildConfigField 'String', 'STATS_URL', '"https://www.pt.bfs.admin.ch/"' + buildConfigField 'String', 'PUBLISHED_CROWDNOTIFIER_KEYS_BASE_URL', '"https://www.pt.bfs.admin.ch/"' + buildConfigField "String", "ENTRY_QR_CODE_HOST", '"qr.swisscovid.ch"' + buildConfigField "String", "QR_MASTER_PUBLIC_KEY_BASE_64", '"mAofNDGOKcmVJt4fo7kWruvFRee2g0irAfIdjH6EFyd6vHY_uTb6ZXOf9eFVzTUEiZLDLL-Q2w8kZkPscWyXi3X59zuqeI25qloOF-sowHo1_-HiH7Z_4COOA030mm8J"' buildConfigField 'String', 'CONFIG_CERTIFICATE', "\"${project.backend_certs.prod.CONFIG_CERTIFICATE}\"" buildConfigField 'String', 'BUCKET_PUBLIC_KEY', "\"${project.backend_certs.prod.BUCKET_PUBLIC_KEY}\"" + manifestPlaceholders = [qrCodeHostName: "qr.swisscovid.ch"] } log { buildConfigField 'boolean', 'DEV_HISTORY', 'true' @@ -111,8 +95,12 @@ android { buildConfigField 'String', 'BUCKET_URL', '"https://www.pt.bfs.admin.ch/"' buildConfigField 'String', 'REPORT_URL', '"https://www.pt1.bfs.admin.ch/"' buildConfigField 'String', 'STATS_URL', '"https://www.pt.bfs.admin.ch/"' + buildConfigField 'String', 'PUBLISHED_CROWDNOTIFIER_KEYS_BASE_URL', '"https://www.pt.bfs.admin.ch/"' + buildConfigField "String", "ENTRY_QR_CODE_HOST", '"qr.swisscovid.ch"' + buildConfigField "String", "QR_MASTER_PUBLIC_KEY_BASE_64", '"mAofNDGOKcmVJt4fo7kWruvFRee2g0irAfIdjH6EFyd6vHY_uTb6ZXOf9eFVzTUEiZLDLL-Q2w8kZkPscWyXi3X59zuqeI25qloOF-sowHo1_-HiH7Z_4COOA030mm8J"' buildConfigField 'String', 'CONFIG_CERTIFICATE', "\"${project.backend_certs.prod.CONFIG_CERTIFICATE}\"" buildConfigField 'String', 'BUCKET_PUBLIC_KEY', "\"${project.backend_certs.prod.BUCKET_PUBLIC_KEY}\"" + manifestPlaceholders = [qrCodeHostName: "qr.swisscovid.ch"] } } @@ -120,7 +108,7 @@ android { release { storeFile file(readPropertyWithDefault('keystoreFile', 'testKeystore')) storePassword readProperty('keystorePassword') - keyAlias 'keyAlias' + keyAlias readPropertyWithDefault('keyAlias', 'keyAlias') keyPassword readProperty('keyAliasPassword') } } @@ -137,13 +125,17 @@ android { compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 + coreLibraryDesugaringEnabled true } kotlinOptions { jvmTarget = "1.8" } -} + buildFeatures { + viewBinding true + } +} sonarqube { properties { @@ -154,35 +146,56 @@ sonarqube { } } + dependencies { + + implementation project(":common") + implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) + implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' - def dp3t_sdk_version = '2.2.0' + def dp3t_sdk_version = '2.3.0' devImplementation "org.dpppt:dp3t-sdk-android:$dp3t_sdk_version-calibration" - teschtImplementation "org.dpppt:dp3t-sdk-android:$dp3t_sdk_version" abnahmeImplementation "org.dpppt:dp3t-sdk-android:$dp3t_sdk_version" prodImplementation "org.dpppt:dp3t-sdk-android:$dp3t_sdk_version" logImplementation "org.dpppt:dp3t-sdk-android:$dp3t_sdk_version" implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - implementation 'androidx.fragment:fragment:1.3.2' - implementation 'androidx.lifecycle:lifecycle-viewmodel:2.2.0' - implementation 'androidx.lifecycle:lifecycle-livedata:2.2.0' - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0' + implementation 'androidx.fragment:fragment-ktx:1.3.3' + implementation "androidx.activity:activity-ktx:1.2.3" + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1' + implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' implementation 'androidx.viewpager2:viewpager2:1.0.0' - implementation 'androidx.security:security-crypto:1.0.0-rc03' + implementation 'androidx.security:security-crypto:1.0.0' implementation 'androidx.work:work-runtime-ktx:2.5.0' + implementation "androidx.datastore:datastore:1.0.0-beta01" implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' implementation 'io.reactivex.rxjava3:rxjava:3.0.0' implementation 'com.google.android.material:material:1.2.1' implementation 'com.google.android.gms:play-services-base:17.5.0' - + implementation 'com.google.protobuf:protobuf-lite:3.0.1' + implementation('com.squareup.retrofit2:converter-protobuf:2.9.0') { transitive = false } implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' + // QR code scanning + def camerax_version = "1.0.0-rc04" + implementation "androidx.camera:camera-camera2:${camerax_version}" + implementation "androidx.camera:camera-lifecycle:${camerax_version}" + implementation "androidx.camera:camera-view:1.0.0-alpha23" + //DO NOT UPDATE ZXING TO 3.4.0! (3.4.0 is not compatible with API Level 23 or lower) + implementation "com.google.zxing:core:3.3.0" + + implementation 'androidx.biometric:biometric:1.1.0' + + implementation 'io.github.ShawnLin013:number-picker:2.4.13' + + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test:core:1.3.0' diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 244ed4eab..319c99004 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -23,4 +23,6 @@ -dontobfuscate -keep class ch.admin.bag.dp3t.inform.models.** { *; } --keep class ch.admin.bag.dp3t.networking.models.** { *; } \ No newline at end of file +-keep class ch.admin.bag.dp3t.networking.models.** { *; } + +-keep class com.sun.jna.** { *; } diff --git a/app/src/androidTest/java/ch/admin/bag/dp3t/AutoCheckoutTest.java b/app/src/androidTest/java/ch/admin/bag/dp3t/AutoCheckoutTest.java new file mode 100644 index 000000000..b8ad970ab --- /dev/null +++ b/app/src/androidTest/java/ch/admin/bag/dp3t/AutoCheckoutTest.java @@ -0,0 +1,145 @@ +package ch.admin.bag.dp3t; + +import android.content.Context; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; + +import java.io.IOException; + +import org.crowdnotifier.android.sdk.model.VenueInfo; +import org.crowdnotifier.android.sdk.utils.QrUtils; +import org.dpppt.android.sdk.internal.logger.LogLevel; +import org.dpppt.android.sdk.internal.logger.Logger; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import ch.admin.bag.dp3t.checkin.models.CheckInState; +import ch.admin.bag.dp3t.checkin.models.DiaryEntry; +import ch.admin.bag.dp3t.checkin.storage.DiaryStorage; +import ch.admin.bag.dp3t.checkin.utils.CrowdNotifierReminderHelper; +import ch.admin.bag.dp3t.extensions.VenueInfoExtensionsKt; +import ch.admin.bag.dp3t.storage.SecureStorage; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +@RunWith(AndroidJUnit4.class) +public class AutoCheckoutTest { + + Context context; + DiaryStorage diaryStorage; + VenueInfo checkinVenueInfo; + + @Before + public void setup() throws IOException, QrUtils.InvalidQRCodeFormatException { + context = InstrumentationRegistry.getInstrumentation().getTargetContext(); + Logger.init(context, LogLevel.DEBUG); + diaryStorage = DiaryStorage.getInstance(context); + diaryStorage.clear(); + + checkinVenueInfo = QrUtils.getVenueInfoFromQrCode("CAQSFAgEEgRUZXN0IL3drYYGKL29nZ4mGoYBCAQSYJVub6E0VUfo4GDIli3dOIY78shUBu0DsgS8NA-12wEpapYNAL4kDKoI2wAWZPT3Aoqdu7M66hcr_9WLSmRPHss7e77TeKinyXVqyLS0c0bY2_N6Yjd3A7f8jaO7IqIUFRogzt1hjKGnZoXWLtf-Oqmx755rZDjLagUig00M4lBkfFAiHwgEIIDo3Q0ogNzMFDDg1AMwgN3bATCAurcDMID07gY"); + } + + @Test + public void checkAutoCheckoutWithEmptyDiary(){ + + long checkinTime = System.currentTimeMillis()-13*60*60*1000L; + CheckInState checkInState = new CheckInState(true, checkinVenueInfo, checkinTime, -1, -1); + CrowdNotifierReminderHelper.autoCheckoutIfNecessary(context, checkInState); + + // There should be exactly one entry in the diary + assertEquals(1, diaryStorage.getEntries().size()); + assertEquals(checkinTime, diaryStorage.getEntries().get(0).getCheckInTime()); + assertEquals(checkinTime+ VenueInfoExtensionsKt.getAutoCheckoutDelay(checkinVenueInfo), diaryStorage.getEntries().get(0).getCheckOutTime()); + } + + @Test + public void checkAutoCheckoutWithoutOverlap(){ + + long checkinTime = System.currentTimeMillis()-13*60*60*1000L; + + diaryStorage.addEntry(new DiaryEntry(0, checkinTime-60*60*1000L, checkinTime, checkinVenueInfo)); + + CheckInState checkInState = new CheckInState(true, checkinVenueInfo, checkinTime, -1, -1); + CrowdNotifierReminderHelper.autoCheckoutIfNecessary(context, checkInState); + + // There should be exactly one entry in the diary + assertEquals(2, diaryStorage.getEntries().size()); + assertEquals(checkinTime, diaryStorage.getEntries().get(1).getCheckInTime()); + assertEquals(checkinTime+ VenueInfoExtensionsKt.getAutoCheckoutDelay(checkinVenueInfo), diaryStorage.getEntries().get(1).getCheckOutTime()); + } + + @Test + public void checkAutoCheckoutWithOneOverlap(){ + + long checkinTime = System.currentTimeMillis()-13*60*60*1000L; + long overlapCheckin = checkinTime+60*60*1000L; + long overlapCheckout = overlapCheckin+60*60*1000L; + + diaryStorage.addEntry(new DiaryEntry(0, overlapCheckin, overlapCheckout, checkinVenueInfo)); + + CheckInState checkInState = new CheckInState(true, checkinVenueInfo, checkinTime, -1, -1); + CrowdNotifierReminderHelper.autoCheckoutIfNecessary(context, checkInState); + + // There should be exactly one entry in the diary + assertEquals(3, diaryStorage.getEntries().size()); + assertEquals(checkinTime, diaryStorage.getEntries().get(1).getCheckInTime()); + assertEquals(overlapCheckin, diaryStorage.getEntries().get(1).getCheckOutTime()); + assertEquals(overlapCheckout, diaryStorage.getEntries().get(2).getCheckInTime()); + assertEquals(checkinTime+ VenueInfoExtensionsKt.getAutoCheckoutDelay(checkinVenueInfo), diaryStorage.getEntries().get(2).getCheckOutTime()); + } + + @Test + public void checkAutoCheckoutWithTwoOverlapsNoGap(){ + + long checkinTime = System.currentTimeMillis()-13*60*60*1000L; + long overlap1Checkin = checkinTime+60*60*1000L; + long overlap1Checkout = overlap1Checkin+60*60*1000L; + long overlap2Checkin = overlap1Checkout; + long overlap2Checkout = overlap1Checkout+2*60*60*1000L; + + + diaryStorage.addEntry(new DiaryEntry(0, overlap1Checkin, overlap1Checkout, checkinVenueInfo)); + diaryStorage.addEntry(new DiaryEntry(1, overlap2Checkin, overlap2Checkout, checkinVenueInfo)); + + CheckInState checkInState = new CheckInState(true, checkinVenueInfo, checkinTime, -1, -1); + CrowdNotifierReminderHelper.autoCheckoutIfNecessary(context, checkInState); + + // There should be exactly one entry in the diary + assertEquals(4, diaryStorage.getEntries().size()); + assertEquals(checkinTime, diaryStorage.getEntries().get(2).getCheckInTime()); + assertEquals(overlap1Checkin, diaryStorage.getEntries().get(2).getCheckOutTime()); + assertEquals(overlap2Checkout, diaryStorage.getEntries().get(3).getCheckInTime()); + assertEquals(checkinTime+ VenueInfoExtensionsKt.getAutoCheckoutDelay(checkinVenueInfo), diaryStorage.getEntries().get(3).getCheckOutTime()); + + } + + @Test + public void checkAutoCheckoutWithTwoOverlapsWithGap(){ + + long checkinTime = System.currentTimeMillis()-13*60*60*1000L; + long overlap1Checkin = checkinTime+60*60*1000L; + long overlap1Checkout = overlap1Checkin+60*60*1000L; + long overlap2Checkin = overlap1Checkout+60*60*1000L; + long overlap2Checkout = overlap1Checkout+2*60*60*1000L; + + + diaryStorage.addEntry(new DiaryEntry(0, overlap1Checkin, overlap1Checkout, checkinVenueInfo)); + diaryStorage.addEntry(new DiaryEntry(1, overlap2Checkin, overlap2Checkout, checkinVenueInfo)); + + CheckInState checkInState = new CheckInState(true, checkinVenueInfo, checkinTime, -1, -1); + CrowdNotifierReminderHelper.autoCheckoutIfNecessary(context, checkInState); + + // There should be exactly one entry in the diary + assertEquals(5, diaryStorage.getEntries().size()); + assertEquals(checkinTime, diaryStorage.getEntries().get(2).getCheckInTime()); + assertEquals(overlap1Checkin, diaryStorage.getEntries().get(2).getCheckOutTime()); + assertEquals(overlap1Checkout, diaryStorage.getEntries().get(3).getCheckInTime()); + assertEquals(overlap2Checkin, diaryStorage.getEntries().get(3).getCheckOutTime()); + assertEquals(overlap2Checkout, diaryStorage.getEntries().get(4).getCheckInTime()); + assertEquals(checkinTime+ VenueInfoExtensionsKt.getAutoCheckoutDelay(checkinVenueInfo), diaryStorage.getEntries().get(4).getCheckOutTime()); + + } + +} diff --git a/app/src/androidTest/java/ch/admin/bag/dp3t/FakeWorkerTest.java b/app/src/androidTest/java/ch/admin/bag/dp3t/FakeWorkerTest.java index 661676f38..afd5a5beb 100644 --- a/app/src/androidTest/java/ch/admin/bag/dp3t/FakeWorkerTest.java +++ b/app/src/androidTest/java/ch/admin/bag/dp3t/FakeWorkerTest.java @@ -330,6 +330,10 @@ public long currentTimeMillis() { return System.currentTimeMillis() + clockOffset; } + public int getUserInteractionDelay() { + return 0; + } + } private long setTDummyToDaysFromNow(int daysFromNow) { diff --git a/app/src/dev/java/ch/admin/bag/dp3t/debug/DebugFragment.java b/app/src/dev/java/ch/admin/bag/dp3t/debug/DebugFragment.java index 378046470..6afd39244 100644 --- a/app/src/dev/java/ch/admin/bag/dp3t/debug/DebugFragment.java +++ b/app/src/dev/java/ch/admin/bag/dp3t/debug/DebugFragment.java @@ -26,7 +26,10 @@ import androidx.lifecycle.ViewModelProvider; import java.util.Arrays; +import java.util.TimeZone; +import org.crowdnotifier.android.sdk.model.ExposureEvent; +import org.crowdnotifier.android.sdk.storage.ExposureStorage; import org.dpppt.android.sdk.DP3T; import org.dpppt.android.sdk.internal.nearby.ExposureWindowMatchingWorker; import org.dpppt.android.sdk.internal.storage.ExposureDayStorage; @@ -34,9 +37,12 @@ import org.dpppt.android.sdk.models.ExposureDay; import ch.admin.bag.dp3t.R; +import ch.admin.bag.dp3t.checkin.CrowdNotifierViewModel; +import ch.admin.bag.dp3t.checkin.models.SwissCovidAssociatedData; import ch.admin.bag.dp3t.debug.model.DebugAppState; import ch.admin.bag.dp3t.networking.CertificatePinning; import ch.admin.bag.dp3t.storage.SecureStorage; +import ch.admin.bag.dp3t.util.NotificationUtil; import ch.admin.bag.dp3t.viewmodel.TracingViewModel; public class DebugFragment extends Fragment { @@ -44,6 +50,7 @@ public class DebugFragment extends Fragment { public static final boolean EXISTS = true; private TracingViewModel tracingViewModel; + private CrowdNotifierViewModel crowdNotifierViewModel; public static void startDebugFragment(FragmentManager parentFragmentManager) { parentFragmentManager.beginTransaction() @@ -65,6 +72,7 @@ public DebugFragment() { public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); tracingViewModel = new ViewModelProvider(requireActivity()).get(TracingViewModel.class); + crowdNotifierViewModel = new ViewModelProvider(requireActivity()).get(CrowdNotifierViewModel.class); } @Override @@ -100,7 +108,18 @@ private void setupSdkViews(View view) { }); view.findViewById(R.id.debug_button_reset_update_boarding).setOnClickListener(v -> { - SecureStorage.getInstance(requireContext()).setLastShownUpdateBoardingVersion(0); + SecureStorage secureStorage = SecureStorage.getInstance(requireContext()); + secureStorage.setLastShownUpdateBoardingVersion(0); + secureStorage.setCheckInUpdateNotificationShown(false); + getActivity().finish(); + }); + + view.findViewById(R.id.debug_button_sync_checkin_keys).setOnClickListener(v -> crowdNotifierViewModel.refreshTraceKeys()); + + view.findViewById(R.id.debug_button_simulate_from_instant_app).setOnClickListener(v -> { + setDebugAppState(DebugAppState.NONE); + tracingViewModel.resetSdk(); + SecureStorage.getInstance(requireContext()).setOnlyPartialOnboardingCompleted(true); getActivity().finish(); }); @@ -137,23 +156,30 @@ private void setupStateOptions(View view) { updateRadioGroup(optionsGroup); view.findViewById(R.id.debug_button_testmeldung).setOnClickListener(v -> { - showExposureDaysInputDialog(); + showExposureDaysInputDialogs(); }); } - private void showExposureDaysInputDialog() { + + private void showInputDialog(String title, String defaultInput, InputDialogCallback callback) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - builder.setTitle(getString(R.string.number_of_exposure_days)); + builder.setTitle(title); final EditText input = new EditText(getContext()); - input.setText("2"); + input.setText(defaultInput); input.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_CLASS_NUMBER); builder.setView(input); builder.setPositiveButton(R.string.android_button_ok, - (a, b) -> exposeMyself(Integer.parseInt(input.getText().toString()))); + (a, b) -> callback.onResult(Integer.parseInt(input.getText().toString()))); builder.show(); } - private void exposeMyself(int numberOfDays) { + private void showExposureDaysInputDialogs() { + showInputDialog(getString(R.string.number_of_exposure_days), "2", tracingExposures -> + showInputDialog("How many Checkin Exposures should be simulated?", "2", checkinExposures -> + exposeMyself(tracingExposures, checkinExposures))); + } + + private void exposeMyself(int numberOfDays, int numberOfCheckins) { ExposureDayStorage eds = ExposureDayStorage.getInstance(requireContext()); eds.clear(); @@ -163,6 +189,21 @@ private void exposeMyself(int numberOfDays) { ExposureDay exposureDay = new ExposureDay(i, dayOfExposure, System.currentTimeMillis()); eds.addExposureDays(requireContext(), Arrays.asList(exposureDay)); } + + ExposureStorage exposureStorage = ExposureStorage.getInstance(requireContext()); + exposureStorage.clear(); + for (int i = 0; i < numberOfCheckins; i++) { + long exposureStart = new DayDate().subtractDays(i).getStartOfDay(TimeZone.getDefault()); + long exposureEnd = exposureStart + 1000L * 60 * 60; + exposureStorage.addEntry(new ExposureEvent(-i, exposureStart, exposureEnd, "debug message", + SwissCovidAssociatedData.getDefaultInstance().toByteArray())); + } + if (numberOfCheckins > 0) { + SecureStorage secureStorage = SecureStorage.getInstance(requireContext()); + NotificationUtil.generateContactNotification(requireContext()); + secureStorage.setAppOpenAfterNotificationPending(true); + secureStorage.setReportsHeaderAnimationPending(true); + } getActivity().finish(); } @@ -193,4 +234,9 @@ public void setDebugAppState(DebugAppState debugAppState) { ((TracingStatusWrapper) tracingViewModel.getTracingStatusInterface()).setDebugAppState(getContext(), debugAppState); } + private interface InputDialogCallback { + void onResult(int selectedNumber); + + } + } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1a0acd78f..322e73cd1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,6 +15,12 @@- Version: 9. April 2021 + Version: 1. Juli 2021
In dieser Datenschutzerklärung erläutert das Bundesamt für Gesundheit (BAG), inwieweit es hinsichtlich der Nutzung der Applikation «SwissCovid-App» (nachfolgend App) in der Schweiz Personendaten bearbeitet. Das ist keine abschliessende Beschreibung; allenfalls regeln andere Datenschutzerklärungen, ähnliche Dokumente, Nutzungsbedingungen oder Anwendungsprogramme spezifische Sachverhalte.
- Das Datenschutzrecht regelt die Bearbeitung von Personendaten. Die Bundesgesetzgebung über den Datenschutz ist auf die Datenbearbeitung anwendbar. Die Datenschutzerklärung steht zudem im Einklang mit dem Epidemiengesetz vom 28. September 2012 (EpG; SR 818.101) und der Verordnung vom 24. Juni 2020 über das Proximity-Tracing-System für das Coronavirus SARS-CoV-2 (VPTS; SR 818.101.25). + Das Datenschutzrecht regelt die Bearbeitung von Personendaten. Die Bundesgesetzgebung über den Datenschutz ist auf die Bearbeitung von Personendaten anwendbar. Die Datenschutzerklärung steht zudem im Einklang mit dem Epidemiengesetz vom 28. September 2012 (EpG; SR 818.101), der Verordnung vom 24. Juni 2020 über das Proximity-Tracing-System für das Coronavirus SARS-CoV-2 (VPTS; SR 818.101.25), + dem Bundesgesetz über die gesetzlichen Grundlagen für Verordnungen des Bundesrates zur Bewältigung der Covid-19-Epidemie vom 25. September 2020 (Covid-19-Gesetz; SR 818.102) sowie der Verordnung über ein Warnsystem zu Covid-19 für Veranstaltungen vom 1. Juli 2021.
Unter Personendaten werden alle Angaben verstanden, die sich auf eine bestimmte oder bestimmbare Person beziehen. Bearbeiten meint jeden Umgang mit Personendaten, unabhängig von den angewandten Mitteln und Verfahren, insbesondere das Beschaffen, Aufbewahren, Verwenden, Umarbeiten, Bekanntgeben, Archivieren oder Vernichten der Daten. @@ -48,23 +49,27 @@
- Das gesamte App-System ist darauf ausgerichtet, dass der Benutzer und die Benutzerin der App nicht bestimmbar sind. Die Bearbeitung von Personendaten wird minimiert. So sind keinerlei technische Rückschlüsse auf Personen, Standorte oder Geräte möglich. Ortsangaben werden keine erfasst, sondern lediglich verschlüsselte Daten betreffend die Kontakt-Ereignisse. Diese werden technisch vor Missbrauch geschützt. Das BAG kann keine Rückschlüsse auf die Benutzerinnen und Benutzer der App ziehen. Die App schützt die Daten der Benutzerinnen und Benutzer so, dass über weite Strecken kein Personenbezug hergestellt werden kann. Dennoch ist ein Personenbezug nicht absolut auszuschliessen. So besteht eine gewisse Wahrscheinlichkeit, dass bei der Benachrichtigung + Das gesamte App-System ist darauf ausgerichtet, dass der Benutzer und die Benutzerin der App nicht bestimmbar sind. Die Bearbeitung von Personendaten wird minimiert. So sind keinerlei technische Rückschlüsse auf Personen, Standorte oder Geräte möglich. Ortsangaben werden bei den Begegnungen via Proximity-Tracing keine erfasst, sondern lediglich verschlüsselte Daten betreffend die Kontakt-Ereignisse. Beim Warnsystem werden nur verschlüsselte Daten über Veranstaltungen und über Ansteckungsgefahren an diesen Veranstaltungen erfasst. Diese Daten werden technisch vor Missbrauch geschützt. Das BAG kann keine Rückschlüsse auf die Benutzerinnen und Benutzer der App ziehen und die Daten nicht entschlüsseln. Die App schützt die Daten der Benutzerinnen und Benutzer so, dass über weite Strecken kein Personenbezug hergestellt werden kann. Dennoch ist ein Personenbezug nicht absolut auszuschliessen. So besteht insb. beim Proximity-Tracing-System eine gewisse Wahrscheinlichkeit, dass bei der Benachrichtigung - einer möglicherweise gefährdeten Person, diese aufgrund ihrer Erinnerung an ihre Sozialkontakte der letzten Tage allenfalls Rückschlüsse auf die Identität der infizierten Person ziehen kann. Durch die Benutzung der App können somit potenziell auch Personen identifiziert werden. Die Benachrichtigung umfasst weiter Verhaltensempfehlungen des BAG, die Information, dass die Benutzerin oder der Benutzer potenziell dem Coronavirus ausgesetzt war, die Angabe, an welchen Tagen dies der Fall war sowie den Hinweis, dass das BAG einen Leitfaden (Web-Formular) und eine Infoline zur kostenlosen Beratung betreibt. Verlässt die Benutzerin oder der Benutzer die App, um den Leitfaden auszufüllen, werden die in der App genannten Tage, an welchen die Möglichkeit einer Ansteckung bestand, automatisch an den Leitfaden übermittelt. + einer möglicherweise gefährdeten Person diese aufgrund ihrer Erinnerung an ihre Sozialkontakte der letzten Tage allenfalls Rückschlüsse auf die Identität der infizierten Person ziehen kann. Durch die Benutzung der App können somit potenziell auch Personen identifiziert werden. Die Benachrichtigung aufgrund eines engen Kontaktes mit einer positiv getesteten Nutzerin / einem positiv getesteten Nutzer umfasst weiter Verhaltensempfehlungen des BAG, die Information, dass die Benutzerin oder der Benutzer potenziell dem Coronavirus ausgesetzt war, die Angabe, an welchen Tagen dies der Fall war sowie den Hinweis, dass das BAG einen Leitfaden (Web-Formular) und eine Infoline zur kostenlosen Beratung betreibt. Verlässt die Benutzerin oder der Benutzer die App, um den Leitfaden auszufüllen, werden die in der App genannten Tage, an welchen die Möglichkeit einer Ansteckung bestand, automatisch an den Leitfaden übermittelt. Die Benachrichtigung aufgrund der Check-in Funktion umfasst die obengenannten Punkte, jedoch wird hier kein Leitfaden oder eine Infoline angeboten; der primäre Inhalt der Benachrichtigung ist es, sich testen zu lassen.
@@ -78,7 +83,10 @@
@@ -107,7 +115,21 @@
- Darüber hinaus kann das App-System mit entsprechenden ausländischen Systemen verbunden werden, wenn im betreffenden Staat ein angemessener Schutz der Persönlichkeit gewährleistet wird (durch die Gesetzgebung oder hinreichende Garantien, insbesondere durch Vertrag). Ausländische Systeme gelten dann als «entsprechend», wenn sie nach den folgenden Grundsätzen des App-Systems ausgestaltet sind: + Das Veranstaltungs-Backend besteht aus einer Liste mit folgenden Daten: +
++ Darüber hinaus kann das Proximity-Tracing-System mit entsprechenden ausländischen Systemen verbunden werden, wenn im betreffenden Staat ein angemessener Schutz der Persönlichkeit gewährleistet wird (durch die Gesetzgebung oder hinreichende Garantien, insbesondere durch Vertrag). Ausländische Systeme gelten dann als «entsprechend», wenn sie nach den folgenden Grundsätzen des App-Systems ausgestaltet sind:
- Das vom BAG betriebene App-System und das Verbindungssystem stützt sich auf das EpG und die VPTS. - Die App und die mit ihr einhergehenden Datenbearbeitungen bezwecken ausschliesslich, die Benutzerinnen und Benutzer, die potenziell dem Coronavirus ausgesetzt waren, unter Wahrung des Datenschutzes zu benachrichtigen sowie Statistiken aus Daten der beiden Backends im Zusammenhang mit dem Coronavirus zu erstellen. + Das vom BAG betriebene App-System und das Verbindungssystem stützt sich auf das EpG, die VPTS, das Covid-19-Gesetz sowie die VWV. + Die App und die mit ihr einhergehenden Datenbearbeitungen bezwecken ausschliesslich, die Benutzerinnen und Benutzer, die potenziell dem Coronavirus ausgesetzt waren, unter Wahrung des Datenschutzes zu benachrichtigen sowie Statistiken aus Daten der drei Backends im Zusammenhang mit dem Coronavirus zu erstellen.
Das Verbindungssystem dient dazu, dass eine solche Benachrichtigung auch zwischen verbundenen nationalen Apps möglich ist. Damit können Benutzerinnen und Benutzer der App auch dann benachrichtigt werden, wenn sie eine Annäherung zu infizierten Benutzerinnen und Benutzern einer ausländischen App gehabt haben (z.B. zu Grenzgängern und Touristen im Inland oder Kontakten im Ausland). Umgekehrt können auch Benutzerinnen und Benutzer einer verbundenen ausländischen App benachrichtigt werden bei Annäherungen zu infizierten Benutzerinnen und Benutzern der App. @@ -144,20 +166,20 @@
- Die Liste mit den Daten des VA-Backends wird der App im Abrufverfahren zur Verfügung gestellt. Soweit das BAG für diesen Service Dritte im In- oder Ausland beauftragt, verpflichten sich diese vertraglich, die Vorgaben nach Artikel 60a EpG und der VPTS einzuhalten. Davon ausgenommen ist die Regelung betreffend den Quellcode nach Artikel 60 + Die Liste mit den Daten des VA-Backends sowie des Veranstaltungs-Backends wird der App im Abrufverfahren zur Verfügung gestellt. Soweit das BAG für diesen Service Dritte im In- oder Ausland beauftragt, verpflichten sich diese vertraglich, die Vorgaben nach Artikel 60a EpG, der VPTS, Artikel 3 Absatz 7 Buchstabe a Covid-19-Gesetz und der VWV einzuhalten. Davon ausgenommen ist die Regelung betreffend den Quellcode nach Artikel 60 a - Absatz 5 Buchstabe e EpG. Das BAG kontrolliert die Einhaltung der Vorgaben. Bei der Ausführung des Auftrags anfallende Randdaten dürfen die beauftragten Dritten nicht für eigene Zwecke nutzen. Diese Daten werden nur vom BAG bzw. vom BIT ausgewertet (vgl. Ziffer 8). + Absatz 5 Buchstabe e EpG und Artikel 15 VWV. Das BAG kontrolliert die Einhaltung der Vorgaben. Bei der Ausführung des Auftrags anfallende Randdaten dürfen die beauftragten Dritten nicht für eigene Zwecke nutzen. Diese Daten werden nur vom BAG bzw. vom BIT ausgewertet (vgl. Ziffer 8).
Die Liste mit den privaten Schlüsseln der infizierten Benutzerinnen und Benutzer des VA-Backends wird zudem regelmässig für eine grenzüberschreitende Benachrichtigung an das Verbindungssystem übermittelt. Sodann laden die verbundenen ausländischen Systeme (zurzeit: die deutsche Corona-Warn-App) diese privaten Schlüssel herunter und stellen sie ihren Apps zum Abruf zur Verfügung (siehe Ziffer 2).
- Das BAG stellt dem Bundesamt für Statistik (BFS) periodisch den aktuellen Bestand der in beiden Backends vorhandenen Daten in anonymisierter Form für statistische Auswertungen zur Verfügung. Die Daten des Verbindungssystems können dem BFS und der zuständigen ausländischen Stelle zu Statistikzwecken in vollständig anonymisierter Form bekanntgegeben werden. Das BIT führt im Auftrag des BAG den Betrieb der gesamten Software durch und stellt den notwendigen technischen Support-Service bereit. Das BIT hat lediglich Zugriff auf Daten, soweit dies für die beschriebenen Zwecke und die Tätigkeit der betreffenden Mitarbeiter erforderlich ist. Diese sind im Umgang mit den Daten zu Vertraulichkeit verpflichtet. + Das BAG stellt dem Bundesamt für Statistik (BFS) periodisch den aktuellen Bestand der in den drei Backends vorhandenen Daten in anonymisierter Form für statistische Auswertungen zur Verfügung. Die Daten des Verbindungssystems können dem BFS und der zuständigen ausländischen Stelle zu Statistikzwecken in vollständig anonymisierter Form bekanntgegeben werden. Das BIT führt im Auftrag des BAG den Betrieb der gesamten Software durch und stellt den notwendigen technischen Support-Service bereit. Das BIT hat lediglich Zugriff auf Daten, soweit dies für die beschriebenen Zwecke und die Tätigkeit der betreffenden Mitarbeiter erforderlich ist. Diese sind im Umgang mit den Daten zu Vertraulichkeit verpflichtet.
- Die App verwendet eine Schnittstelle zum Betriebssystem des Mobiltelefons der Benutzerin oder des Benutzers, welche die Bearbeitung von Daten durch Apple oder Google bedingt. Die über die Schnittstelle genutzten Funktionen der Betriebssysteme müssen die Vorgaben von Artikel 60a EpG und der VPTS erfüllen. Davon ausgenommen ist die Regelung betreffend den Quellcode nach Artikel 60 + Die App verwendet für das Proximity-Tracing-System eine Schnittstelle zum Betriebssystem des Mobiltelefons der Benutzerin oder des Benutzers, welche die Bearbeitung von Daten durch Apple oder Google bedingt. Die über die Schnittstelle genutzten Funktionen der Betriebssysteme müssen die Vorgaben von Artikel 60a EpG und der VPTS erfüllen. Davon ausgenommen ist die Regelung betreffend den Quellcode nach Artikel 60 a @@ -173,6 +195,9 @@
- Es werden Protokolle über Zugriffe auf das VA-Backend und das Codeverwaltungssystem zu den in den Artikeln 57 + Es werden Protokolle über Zugriffe auf das VA-Backend, das Veranstaltungs-Backend und das Codeverwaltungssystem zu den in den Artikeln 57 l diff --git a/app/src/main/assets/disclaimer/de/terms_of_use.html b/app/src/main/assets/disclaimer/de/terms_of_use.html index 2151227e3..5b7da35b3 100644 --- a/app/src/main/assets/disclaimer/de/terms_of_use.html +++ b/app/src/main/assets/disclaimer/de/terms_of_use.html @@ -7,7 +7,6 @@ ~ ~ SPDX-License-Identifier: MPL-2.0 --> - 1. Geltungsbereich und Zweck @@ -18,7 +17,7 @@
1.2 - Die App des Bundesamtes für Gesundheit (BAG) stützt sich auf das Epidemiengesetz vom 28. September 2012 (EpG; SR 818.101) und die Verordnung vom 24. Juni 2020 über das Proximity-Tracing-System für das Coronavirus SARS-CoV-2 (VPTS; SR 818.101.25). + Die App des Bundesamtes für Gesundheit (BAG) stützt sich auf das Epidemiengesetz vom 28. September 2012 (EpG; SR 818.101), die Verordnung vom 24. Juni 2020 über das Proximity-Tracing-System für das Coronavirus SARS-CoV-2 (VPTS; SR 818.101.25), dem Bundesgesetz über die gesetzlichen Grundlagen für Verordnungen des Bundesrates zur Bewältigung der Covid-19-Epidemie vom 25. September 2020 (Covid-19-Gesetz; SR 818.102) sowie der Verordnung über ein Warnsystem zu Covid-19 für Veranstaltungen vom 1. Juli 2021.
1.3 @@ -34,7 +33,7 @@
2.2 - Die Nutzung der App ist nicht auf ein geografisches Gebiet beschränkt. Allerdings können Warnungen nur erfolgen, wenn die ausländische App mit der SwissCovid-App interoperabel ist. Zum gegenwärtigen Zeitpunkt ist lediglich die in Deutschland genutzte Corona-Warn-App interoperabel. + Die Nutzung der App ist nicht auf ein geografisches Gebiet beschränkt. Allerdings können Warnungen nur erfolgen, wenn die ausländische App mit der SwissCovid-App interoperabel ist. Zum gegenwärtigen Zeitpunkt ist lediglich die in Deutschland genutzte Corona-Warn-App mit dem Proximity-Tracing-System der SwissCovid-App interoperabel.
2.3 @@ -46,18 +45,18 @@
3.1 - Mittels der App werden Benutzerinnen und Benutzer informiert, wenn sie mit mindestens einer nachweislich infizierten Benutzerin oder einem nachweislich infizierten Benutzer der SwissCovid-App oder anderen interoperablen Apps in relevantem Kontakt waren. + Mittels der App werden Benutzerinnen und Benutzer informiert, wenn sie mit mindestens einer nachweislich infizierten Benutzerin oder einem nachweislich infizierten Benutzer der SwissCovid-App oder anderen interoperablen Apps in relevantem Kontakt waren. Dieser relevante Kontakt kann aufgrund des Proximity-Tracings oder aufgrund der Teilnahme an einer Veranstaltung eruiert werden.
3.2 - Voraussetzung für das Funktionieren der App ist die Aktivierung von Bluetooth. + Voraussetzung für das Proximity-Tracing-System der App ist die Aktivierung von Bluetooth. Für das Warnsystem braucht es hingegen kein Bluetooth.
3.3 - Die App erfüllt unter Verwendung einer Schnittstelle zum Betriebssystem des Mobiltelefons der Benutzerin oder des Benutzers folgende Funktionen: + Die App erfüllt – beim Proximity-Tracing-System unter Verwendung einer Schnittstelle zum Betriebssystem des Mobiltelefons der Benutzerin oder des Benutzers – folgende Funktionen:
- Das Betriebssystem generiert jeden Tag einen neuen privaten Schlüssel, der keine Rückschlüsse auf die App, das Mobiltelefon und die Benutzerinnen und Benutzer ermöglicht. Innerhalb der Reichweite von Bluetooth tauscht das Betriebssystem mit allen kompatiblen und aktiven Apps einen mindestens halbstündlich wechselnden Identifizierungscode (sog. «random ID») aus, der aus einem aktuellen privaten Schlüssel abgeleitet wird, aber nicht auf diesen Schlüssel zurückgeführt werden kann und ebenfalls keine Rückschlüsse auf die App, das Mobiltelefon und deren Benutzerinnen und Benutzer ermöglicht. + Proximity-Tracing-System: Das Betriebssystem generiert jeden Tag einen neuen privaten Schlüssel, der keine Rückschlüsse auf die App, das Mobiltelefon und die Benutzerinnen und Benutzer ermöglicht. Innerhalb der Reichweite von Bluetooth tauscht das Betriebssystem mit allen kompatiblen und aktiven Apps einen mindestens halbstündlich wechselnden Identifizierungscode (sog. «random ID») aus, der aus einem aktuellen privaten Schlüssel abgeleitet wird, aber nicht auf diesen Schlüssel zurückgeführt werden kann und ebenfalls keine Rückschlüsse auf die App, das Mobiltelefon und deren Benutzerinnen und Benutzer ermöglicht.
Das Betriebssystem speichert auf dem Mobiltelefon die empfangenen Identifizierungscodes, die Signalstärke, das Datum und die geschätzte Dauer der Annäherung. @@ -65,21 +64,24 @@
Die App ruft periodisch eine Liste der privaten Schlüssel der infizierten Benutzerinnen und Benutzer der SwissCovid-App und anderen interoperablen Apps ab und lässt vom Betriebssystem überprüfen, ob mindestens ein lokal gespeicherter Identifizierungscode mit einem privaten Schlüssel der Liste generiert wurde. Ist dies der Fall und bestand zu mindestens einem Mobiltelefon einer infizierten Benutzerin oder einem infizierten Benutzer der SwissCovid-App oder anderen interoperablen Apps eine Annährung von 1,5 Metern oder weniger und erreicht die Summe der Dauer aller solchen Annäherungen innerhalb eines Tages 15 Minuten, so gibt die App die Benachrichtigung aus. Der Abstand wird anhand der Stärke der empfangenen Signale geschätzt.
++ Warnsystem für Veranstaltungen: Die Organisatorin oder der Organisator einer Veranstaltung generiert in seiner App einen QR-Code. Besucherinnen und Besucher der Veranstaltung können mit ihrer App den gezeigten QR-Code scannen und sind so an der Veranstaltung eingecheckt. +
3.4 - Ist eine Infektion bei einer Benutzerin oder einem Benutzer nachgewiesen, generieren zugriffsberechtigte Fachpersonen (z.B. behandelnde Ärztinnen und Ärzte oder Apothekerinnen und Apotheker) einen einmaligen und zeitlich begrenzt gültigen Freischaltcode («Covidcode») und geben diesen der infizierten Benutzerin oder dem infizierten Benutzer bekannt. Diese oder dieser kann den Freischaltcode in ihre oder seine App freiwillig eingeben. Die Benachrichtigung bzw. die Eingabe des Freischaltcodes erfolgt nur mit der ausdrücklichen Einwilligung der infizierten Benutzerin oder des infizierten Benutzers. + Die App speichert auf dem Mobiltelefon die Veranstaltungs-Identifizierungscodes mit dem jeweiligen Datum, die Dauer des Aufenthaltes und die Bezeichnung der Veranstaltung. Sie ruft periodisch vom Veranstaltungs-Backend im Abrufverfahren die Liste der Veranstaltungs-Identifizierungscodes der infizierten teilnehmenden Personen ab. Sie gleicht die Veranstaltungs-Identifizierungscodes mit den von ihr lokal gespeicherten Veranstaltungs-Identifizierungscodes ab. Ergibt der Abgleich eine Übereinstimmung, so gibt die App die Benachrichtigung aus.Ist eine Infektion bei einer Benutzerin oder einem Benutzer nachgewiesen, generieren zugriffsberechtigte Fachpersonen (z.B. behandelnde Ärztinnen und Ärzte oder Apothekerinnen und Apotheker) einen einmaligen und zeitlich begrenzt gültigen Freischaltcode («Covidcode») und geben diesen der infizierten Benutzerin oder dem infizierten Benutzer bekannt. Diese oder dieser kann den Freischaltcode in ihre oder seine App freiwillig eingeben. Die Benachrichtigung bzw. die Eingabe des Freischaltcodes erfolgt nur mit der ausdrücklichen Einwilligung der infizierten Benutzerin oder des infizierten Benutzers. Die infizierte Benutzerin oder der infizierte Benutzer kann ausserdem wählen, ob sie oder er sowohl die engen Kontakte aufgrund des Proximity-Tracing-Systems als auch die Kontakte aufgrund der Teilnahme an einer Veranstaltung warnen will. Darüber hinaus kann sie oder er auch entscheiden, ob er für jede Veranstaltung, an welcher er im relevanten Zeitraum teilgenommen hat, eine Benachrichtigung auslösen will oder nur für einzelne.
Die anderen Benutzerinnen und Benutzer der SwissCovid-App
- oder anderen interoperablen Apps, welche in der infektiösen Zeitspanne eine Annährung gemäss Ziffer 3.3 zu der infizierten Benutzerin oder dem infizierten Benutzer hatten, werden durch die eigenen Apps benachrichtigt.
+ oder anderer interoperabler Apps, welche in der infektiösen Zeitspanne eine Annährung gemäss Ziffer 3.3 zu der infizierten Benutzerin oder dem infizierten Benutzer hatten oder gleichzeitig an derselben Veranstaltung teilgenommen haben, werden durch die eigenen Apps benachrichtigt.
- Die benachrichtigten Benutzerinnen und Benutzer erfahren, dass eine Annährung stattgefunden hat bzw. dass sie potenziell dem Coronavirus ausgesetzt waren und an welchen Tagen dies der Fall war. Sie erfahren nicht, welcher Benutzer oder welche Benutzerin infiziert ist und die Benachrichtigung ausgelöst hat. Die Benachrichtigung der SwissCovid-App umfasst weiter Verhaltensempfehlungen des BAG sowie den Hinweis, dass das BAG einen Leitfaden (Web-Formular) und eine Infoline zur kostenlosen Beratung betreibt. Verlässt man die App, um den Leitfaden auszufüllen, werden die in der App genannten Tage, an welchen eine Möglichkeit der Ansteckung bestand, automatisch an den Leitfaden übermittelt. + Die benachrichtigten Benutzerinnen und Benutzer erfahren, dass eine Annährung stattgefunden hat bzw. dass sie potenziell dem Coronavirus ausgesetzt waren und an welchen Tagen dies der Fall war. Sie erfahren nicht, welcher Benutzer oder welche Benutzerin infiziert ist und die Benachrichtigung ausgelöst hat. Die Benachrichtigung der SwissCovid-App aufgrund eines engen Kontaktes mit einer positiv getesteten Nutzerin / einem positiv getesteten Nutzer umfasst weiter Verhaltensempfehlungen des BAG sowie den Hinweis, dass das BAG einen Leitfaden (Web-Formular) und eine Infoline zur kostenlosen Beratung betreibt. Verlässt man die App, um den Leitfaden auszufüllen, werden die in der App genannten Tage, an welchen eine Möglichkeit der Ansteckung bestand, automatisch an den Leitfaden übermittelt. Die Benachrichtigung aufgrund des Warnsystems umfasst die obengenannten Punkte, jedoch wird hier kein Leitfaden und keine Infoline angeboten, die primäre Empfehlung ist es, sich testen zu lassen.
3.5 - Bei Eingabe des Freischaltcodes werden die Benutzerinnen und Benutzer darauf aufmerksam gemacht, mit welchen Ländern (vgl. Ziffer 2.2) die App interoperabel ist. Es wird darauf hingewiesen, dass – wenn das Feld «Einverstanden» gedrückt und der Freischaltcode in die App eingegeben wird – die privaten Schlüssel nicht nur innerhalb der SwissCovid-App geteilt werden, sondern auch mit allen anderen interoperablen Apps (zurzeit die deutsche Corona-Warn-App). Die privaten Schlüssel können nur mit allen interoperablen Apps oder gar nicht geteilt werden, was dem sogenannten «One-World-Prinzip» entspricht. + Bei Eingabe des Freischaltcodes werden die Benutzerinnen und Benutzer darauf aufmerksam gemacht, mit welchen Ländern (vgl. Ziffer 2.2) die App interoperabel ist. Es wird darauf hingewiesen, dass – wenn das Feld «Einverstanden» gedrückt und der Freischaltcode in die App eingegeben wird – die privaten Schlüssel des Proximity-Tracing-Systems nicht nur innerhalb der SwissCovid-App geteilt werden, sondern auch mit allen anderen interoperablen Apps (zurzeit die deutsche Corona-Warn-App). Die privaten Schlüssel können nur mit allen interoperablen Apps oder gar nicht geteilt werden, was dem sogenannten «One-World-Prinzip» entspricht.
3.6 @@ -186,7 +188,7 @@
7.3 - Spätestens beim Ausserkrafttreten der in Ziffer 1.2. aufgeführten Verordnung deaktiviert das BAG die App und fordert die Benutzerinnen und Benutzer auf, diese auf dem Mobiltelefon zu deinstallieren. + Spätestens beim Ausserkrafttreten der in Ziffer 1.2. aufgeführten Verordnungen deaktiviert das BAG die App und fordert die Benutzerinnen und Benutzer auf, diese auf dem Mobiltelefon zu deinstallieren.
8. diff --git a/app/src/main/assets/disclaimer/en/data_protection_statement.html b/app/src/main/assets/disclaimer/en/data_protection_statement.html index d786e9cda..57c7db91e 100644 --- a/app/src/main/assets/disclaimer/en/data_protection_statement.html +++ b/app/src/main/assets/disclaimer/en/data_protection_statement.html @@ -7,18 +7,18 @@ ~ ~ SPDX-License-Identifier: MPL-2.0 --> -Data Protection Statement of the Federal Office of Public Health FOPH in connection with the use of the “SwissCovid app”
- Version: 9 April 2021 + Version: 1 July 2021
In this Data Protection Statement, the Federal Office of Public Health (FOPH) explains to what extent it will process personal data in connection with the use of the application “SwissCovid app” (hereafter app) in Switzerland. This account is not exhaustive; specific matters may be governed by other data protection statements, similar documents, terms and conditions of use, or applications.
- The processing of personal data is governed by data protection legislation. The federal legislation on data protection is applicable to the data processing. In addition, the Data Protection Statement is in line with the Epidemics Act of 28 September 2012 (EpG; SR 818.101) and the Ordinance of 24 June 2020 on the Proximity Tracing System for the Coronavirus SARS-CoV-2 (VPTS; SR 818.101.25). + The processing of personal data is governed by data protection legislation. The federal legislation on data protection is applicable to the processing of personal data. In addition, the Data Protection Statement is in line with the Epidemics Act of 28 September 2012 (EpG; CC 818.101), the Ordinance of 24 June 2020 on the Proximity Tracing System for the Coronavirus SARS-CoV-2 (VPTS; CC 818.101.25), + the Federal Act on the Statutory Principles for Federal Council Ordinances on Combating the COVID-19 Epidemic of 25 September 2020 (COVID-19 Act; CC 818.102) and the Ordinance on a COVID-19 Warning System for Events of 1 July 2021.
“Personal data” means all information relating to an identified or identifiable person. “Processing” means any operation with personal data, irrespective of the means applied and the procedure, and in particular the collection, storage, use, revision, disclosure, archiving or destruction of data. @@ -44,20 +44,23 @@
- The entire app system is designed to ensure that the app user is not identifiable. The processing of personal data is kept to a minimum. Data cannot be traced back by technical means to persons, locations or devices. What is collected is not location data, but merely encrypted data concerning proximity (contact) events. This is protected by technical means against misuse. The FOPH cannot draw any conclusions concerning app users. The app protects users’ data in such a way that it cannot, at a distance, be connected to specific persons. Connection to a specific person cannot, however, be ruled out altogether. There is a certain likelihood that, when someone is notified of a possible exposure, their recollection of social contacts over recent days may allow them to deduce the identity of the infected individual. As a result of using the app, persons may thus potentially be identified. The notification also contains the behavioural recommendations of the FOPH, the information that the user may potentially have been exposed to the coronavirus, the dates on which this was the case and it draws attention to a guide (web form) as well as the Infoline offering free advice operated by the FOPH. If the user leaves the app in order to complete the guide, the dates named in the app on which an infection may have taken place are automatically transferred to the guide. + The entire app system is designed to ensure that the app user is not identifiable. The processing of personal data is kept to a minimum. Data cannot be traced back by technical means to persons, locations or devices. What is collected via proximity tracing in the event of contacts is not location data, but merely encrypted data concerning proximity (contact) events. For the warning system only encrypted data about events and threats of infection at these events are collected. This data is protected by technical means against misuse. The FOPH cannot draw any conclusions concerning app users or decrypt the data. The app protects users’ data in such a way that it cannot, at a distance, be connected to specific persons. Connection to a specific person cannot, however, be ruled out altogether. In particular with the proximity tracing system, there is a certain likelihood that, when someone is notified of a possible exposure, their recollection of social contacts over recent days may allow them to deduce the identity of the infected individual. As a result of using the app, persons may thus potentially be identified. The notification on the basis of a close contact with a user who has tested negative also contains the behavioural recommendations of the FOPH, the information that the user may potentially have been exposed to the coronavirus, the dates on which this was the case and it draws attention to a guide (web form) as well as the Infoline offering free advice operated by the FOPH. If the user leaves the app in order to complete the guide, the dates named in the app on which an infection may have taken place are automatically transferred to the guide. Notifications on the basis of the check-in function cover the above-mentioned points, although here no guide or infoline is offered; the primary content of the notification is the recommendation to have a test.
@@ -71,7 +74,10 @@
@@ -100,7 +106,21 @@
- The app system can also be connected to corresponding foreign systems if adequate protection of privacy is assured in the country in question (by means of corresponding legislation or sufficient guarantees, in particular in the form of an agreement). Foreign systems are considered to be “corresponding” if they are designed according to the following principles of the app system: + The event back end contains a list with the following data: +
++ The proximity tracing system can also be connected to corresponding foreign systems if adequate protection of privacy is assured in the country in question (by means of corresponding legislation or sufficient guarantees, in particular in the form of an agreement). Foreign systems are considered to be “corresponding” if they are designed according to the following principles of the app system:
- The app system operated by the FOPH and the connection system are based on the EpG and the VPTS. The exclusive purposes of the app and the associated data processing are, in a privacy-preserving manner, to notify users potentially exposed to the coronavirus and to produce coronavirus-related statistics using data from the two back end systems. + The app system operated by the FOPH and the connection system are based on the EpG, the VPTS, the COVID-19 Act and the VWV. The exclusive purposes of the app and the associated data processing are, in a privacy-preserving manner, to notify users potentially exposed to the coronavirus and to produce coronavirus-related statistics using data from the three back end systems.
The connection system serves to ensure that such a notification is also possible between connected national apps. This means that users of the app can also be notified if they have been in proximity to an infected user of a foreign app (e.g. cross-border commuters and tourists in Switzerland or contacts abroad). Conversely, users of a connected foreign app can also be notified if they have been in proximity to infected users of the app. @@ -136,15 +156,15 @@
- The PM back end data list is made available to the app (or front end) in the retrieval process. Insofar as the FOPH engages third parties in Switzerland or abroad to provide this service, they undertake contractually to comply with the requirements of Article 60 + The list of data in the PM and event back end systems is made available to the app (or front end) in the retrieval process. Insofar as the FOPH engages third parties in Switzerland or abroad to provide this service, they undertake contractually to comply with the requirements of Article 60 a - EpG and the VPTS, with the exception of the provisions concerning the source code specified in Article 60 + EpG, the VPTS, Article 3 paragraph 7 letter a COVID-19 Act and the VWV, with the exception of the provisions concerning the source code specified in Article 60 a - paragraph 5 letter e EpG. The FOPH monitors compliance with the legal requirements. The third parties engaged are not permitted to use non-core data arising in the execution of this task for their own purposes. This data will only be analysed by the FOPH or the FOITT (cf. Section 8). + paragraph 5 letter e EpG and Article 15 VWV. The FOPH monitors compliance with the legal requirements. The third parties engaged are not permitted to use non-core data arising in the execution of this task for their own purposes. This data will only be analysed by the FOPH or the FOITT (cf. Section 8).
The list with the private keys of the infected users of the PM back end is also regularly transmitted to the connection system for a cross-border notification. The connected foreign systems (currently: the German Corona-Warn-App) then download these private keys and make them available to their apps for retrieval (see @@ -154,10 +174,10 @@
- The FOPH will periodically make available to the Federal Statistical Office (FSO), in an anonymised form, the data currently held in the two back end systems, for purposes of statistical analysis. The data of the connection system can be disclosed to the FSO and the responsible foreign body for statistical purposes in a completely anonymised form. The FOITT operates the entire software on behalf of the FOPH and provides the necessary technical support service. The FOITT has access to data only insofar as this is necessary for the purposes described and the activities of the employees concerned. They are bound by confidentiality in the management of the data. + The FOPH will periodically make available to the Federal Statistical Office (FSO), in an anonymised form, the data currently held in the three back end systems, for purposes of statistical analysis. The data of the connection system can be disclosed to the FSO and the responsible foreign body for statistical purposes in a completely anonymised form. The FOITT operates the entire software on behalf of the FOPH and provides the necessary technical support service. The FOITT has access to data only insofar as this is necessary for the purposes described and the activities of the employees concerned. They are bound by confidentiality in the management of the data.
- The app uses an interface to the operating system of the user’s mobile phone, which entails the processing of data by Apple or Google. The operating system functions used via the interface must comply with the requirements of Article 60 + For the proximity tracing system the app uses an interface to the operating system of the user’s mobile phone, which entails the processing of data by Apple or Google. The operating system functions used via the interface must comply with the requirements of Article 60 a @@ -177,6 +197,9 @@
- PM back end and code management system access events are logged for the purposes specified in Articles 57 + PM back end, event back end and code management system access events are logged for the purposes specified in Articles 57 l diff --git a/app/src/main/assets/disclaimer/en/terms_of_use.html b/app/src/main/assets/disclaimer/en/terms_of_use.html index 92aa2d2cf..f5bc6e64b 100644 --- a/app/src/main/assets/disclaimer/en/terms_of_use.html +++ b/app/src/main/assets/disclaimer/en/terms_of_use.html @@ -7,7 +7,6 @@ ~ ~ SPDX-License-Identifier: MPL-2.0 --> - 1. Scope and purpose @@ -18,7 +17,7 @@
1.2 - The Federal Office of Public Health (FOPH) app is based on the Epidemics Act of 28 September 2012 (EpG; SR 818.101) and the Ordinance of 24 June 2020 on the Proximity Tracing System for the Coronavirus SARS-CoV-2 (VPTS; SR 818.101.25). + The Federal Office of Public Health (FOPH) app is based on the Epidemics Act of 28 September 2012 (EpG; SR 818.101) and the Ordinance of 24 June 2020 on the Proximity Tracing System for the Coronavirus SARS-CoV-2 (VPTS; SR 818.101.25), the Federal Act on the Statutory Principles for Federal Council Ordinances on Combating the COVID-19 Epidemic (COVID-19 Act; CC 818.102) and the Ordinance on a COVID-19 Warning System for Events of 24 June 2021.
1.3 @@ -34,7 +33,7 @@
2.2 - The use of the app is not restricted to a geographic region. However, warnings can only be issued if the foreign app is interoperable with the SwissCovid app. At present, only the Corona-Warn-App used in Germany is interoperable. + The use of the app is not restricted to a geographic region. However, warnings can only be issued if the foreign app is interoperable with the SwissCovid app. At present, only the Corona-Warn-App used in Germany is interoperable with the SwissCovid app’s proximity tracing system.
2.3 @@ -46,18 +45,18 @@
3.1 - Via the app, users are informed if they have been in relevant contact with at least one user of the SwissCovid app or other interoperable apps who has confirmed to have been infected. + Via the app, users are informed if they have been in relevant contact with at least one user of the SwissCovid app or other interoperable apps who has confirmed to have been infected. This relevant contact can be identified on the basis of proximity tracing or participation at an event.
3.2 - The activation of Bluetooth is required for the operation of the app. + The activation of Bluetooth is required for the operation of the app’s proximity tracing system. Bluetooth is not required, however, for the warning system.
3.3 - Using an interface to the operating system of the user’s mobile phone, the app fulfils the following functions: + The app – in the case of the proximity tracing system using an interface to the operating system of the user’s mobile phone – fulfils the following functions:
- Each day, the operating system generates a new private key, which cannot be connected to the app, the mobile phone or users. Within the range of Bluetooth, the operating system exchanges with all compatible, running apps an identification code (random ID), changing at least every 30 minutes, which is derived from a current private key but cannot be traced back to this key and likewise cannot be connected to the app, the mobile phone or users. + Proximity tracing system: Each day, the operating system generates a new private key, which cannot be connected to the app, the mobile phone or users. Within the range of Bluetooth, the operating system exchanges with all compatible, running apps an identification code (random ID), changing at least every 30 minutes, which is derived from a current private key but cannot be traced back to this key and likewise cannot be connected to the app, the mobile phone or users.
On the mobile phone, the operating system stores the identification codes received, the signal strength, the date and the estimated duration of proximity. @@ -65,19 +64,25 @@
The app periodically retrieves a list of the private keys of users of the SwissCovid app and other interoperable apps known to be infected and allows the operating system to check whether at least one locally stored identification code was generated by a private key included in the list. If this is the case, and if proximity of 1.5 metres or less to the mobile phone of at least one infected user of the SwissCovid app or another interoperable app was registered, and if the duration of all such proximity events within one day amounts to at least 15 minutes, then the app issues a notification. Proximity is estimated on the basis of the strength of the signals received.
++ Warning system for events: The organiser of an event generates a QR code in their app. People attending the event can use their app to scan the displayed QR code and are thus checked in to the event. +
++ The app saves on the mobile phone the event identification codes with the relevant date, duration of attendance and designation of the event. It periodically retrieves from the event back end the list of event identification codes of the infected participants. It compares these event participation codes with the event participation codes stored locally by the app. If there is a match, the app issues the notification. +
3.4 - If an infection is confirmed in a user, experts with access rights (e.g. attending physicians or pharmacists) generate a unique activation code (Covid code), valid for a limited period, which they disclose to the infected user. This user can voluntarily enter the activation code in the app. Notification, or entry of the activation code, occurs only with the explicit consent of the infected user. + If an infection is confirmed in a user, experts with access rights (e.g. attending physicians or pharmacists) generate a unique activation code (Covid code), valid for a limited period, which they disclose to the infected user. This user can voluntarily enter the activation code in the app. Notification, or entry of the activation code, occurs only with the explicit consent of the infected user. The infected user can also choose whether they want to warn close contacts on the basis of the proximity tracing system and contacts on the basis of participation in an event. In addition, they can decide whether they want to trigger a notification for every event they attended during the relevant period or only for individual events.
- Other users of the SwissCovid app or other interoperable apps who came into proximity, as defined in Section 3.3, with the infected user during the infectious period are notified by their own apps. + Other users of the SwissCovid app or other interoperable apps who came into proximity, as defined in Section 3.3, with the infected user during the infectious period or participated in the same event at the same time are notified by their own apps.
- The users thus notified learn that a proximity event has occurred, i.e. that they have potentially been exposed to the coronavirus, and on what dates this was the case. They are not told which user has been infected and has triggered the notification. The notification of the SwissCovid app also contains the behavioural recommendations of the FOPH and draws attention to a guide (web form) as well as the Infoline offering free advice operated by the FOPH. If the user leaves the app in order to complete the guide, the dates named in the app on which an infection may have taken place are automatically transferred to the guide. + The users thus notified learn that a proximity event has occurred, i.e. that they have potentially been exposed to the coronavirus, and on what dates this was the case. They are not told which user has been infected and has triggered the notification. The notification of the SwissCovid app on the basis of close contact with a user who has tested positive also contains the behavioural recommendations of the FOPH and draws attention to a guide (web form) as well as the Infoline offering free advice operated by the FOPH. If the user leaves the app in order to complete the guide, the dates named in the app on which an infection may have taken place are automatically transferred to the guide. Notifications on the basis of the check-in function cover the above-mentioned points, although here no guide or infoline is offered; the primary content of the notification is [the recommendation to have a test.
3.5 - Upon entering the activation code, users are made aware of with which countries (see Section 2.2) the app is interoperable. Reference is made to the fact that – if the “Accept” field is tapped and the activation code is entered in the app – the private keys will not only be shared within the SwissCovid app, but rather also with other interoperable apps (currently: the German Corona-Warn-App). The private keys can only be shared with all interoperable apps or not at all, in keeping with the “one world principle”. + Upon entering the activation code, users are made aware of with which countries (see Section 2.2) the app is interoperable. Reference is made to the fact that – if the “Accept” field is tapped and the activation code is entered in the app – the proximity tracing system’s private keys will not only be shared within the SwissCovid app, but rather also with other interoperable apps (currently: the German Corona-Warn-App). The private keys can only be shared with all interoperable apps or not at all, in keeping with the “one world principle”.
3.6 @@ -184,7 +189,7 @@
7.3 - At the latest when the Ordinance mentioned in Section 1.2 is no longer in force, the FOPH will deactivate the app and request users to uninstall it from their mobile phone. + At the latest when the ordinances mentioned in Section 1.2 is no longer in force, the FOPH will deactivate the app and request users to uninstall it from their mobile phone.
8. diff --git a/app/src/main/assets/disclaimer/fr/data_protection_statement.html b/app/src/main/assets/disclaimer/fr/data_protection_statement.html index bb47bf275..f6beb8f70 100644 --- a/app/src/main/assets/disclaimer/fr/data_protection_statement.html +++ b/app/src/main/assets/disclaimer/fr/data_protection_statement.html @@ -7,26 +7,29 @@ ~ ~ SPDX-License-Identifier: MPL-2.0 --> -Utilisation de l’application SwissCovid: déclaration de confidentialité de l’Office fédéral de la santé publique
- Version : 9 avril 2021 + Version : 1 juillet 2021
Dans la présente déclaration de confidentialité, l’Office fédéral de la santé publique (OFSP) explique dans quelle mesure il traite les données personnelles en lien avec l’utilisation de l’application SwissCovid (ci-après « l’application ») en suisse. Il ne s’agit pas d’un descriptif exhaustif ; certains éléments spécifiques peuvent être réglés dans des déclarations de confidentialité supplémentaires, des documents similaires, des conditions d’utilisation ou des programmes d’application.
- La législation sur la protection des données règle le traitement de données personnelles. La législation fédérale sur la protection des données s’applique au traitement des données. La déclaration de confidentialité est en outre conforme à la loi du 28 septembre 2012 sur les épidémies (LEp ; RS + La législation sur la protection des données règle le traitement de données personnelles. Dans ce domaine, la législation fédérale sur la protection des données s’applique. La déclaration de confidentialité est en outre conforme à la loi du 28 septembre 2012 sur les épidémies (LEp ; RS 818.101 - ) et l’ordonnance du 24 juin 2020 sur le système de traçage de proximité pour le coronavirus SARS-CoV-2 (OSTP ; RS + ), à l’ordonnance du 24 juin 2020 sur le système de traçage de proximité pour le coronavirus SARS-CoV-2 (OSTP ; RS 818.101.25 - ). + ), à la loi fédérale du 25 septembre 2020 sur les bases légales des ordonnances du Conseil fédéral visant à surmonter l’épidémie de COVID-19 (loi COVID-19 ; RS + + 808.102 + + ) et à l’ordonnance du 24 juin 2021 sur un système d’alerte COVID-19 pour les manifestations.
On entend par données personnelles toutes les informations qui se rapportent à une personne identifiée ou identifiable. Par traitement, on entend toute opération relative à des données personnelles – quels que soient les moyens et procédés utilisés – notamment la collecte, la conservation, l’exploitation, la modification, la communication, l’archivage ou la destruction de données. @@ -56,11 +59,15 @@
- Tout le système de l’application est conçu de manière à ce que ses utilisateurs ne soient pas identifiables. Le traitement de données personnelles est réduit au minimum. Ainsi, aucune indication technique sur les personnes, les lieux ou les appareils n’est possible. Les géolocalisations ne sont pas enregistrées ; seules des données cryptées relatives aux contacts ayant eu lieu sont saisies. Ces données sont techniquement protégées de toute utilisation abusive. L’OFSP ne peut tirer aucune conclusion concernant les utilisateurs de l’application. Cette dernière protège les données des utilisateurs de telle sorte qu’aucun lien ne peut être établi avec une personne précise sur de longues distances. Un rattachement à un individu ne peut toutefois pas être totalement exclu. Il existe en effet une certaine probabilité qu’une personne alertée d’un possible risque d’infection puisse éventuellement tirer des conclusions sur l’identité de la personne infectée, en se remémorant les contacts sociaux qu’elle a eus au cours des derniers jours. Les personnes qui utilisent l’application sont donc potentiellement identifiables. La notification inclut les règles de conduite recommandées par l’OFSP, l’information selon laquelle la personne a pu être exposée au coronavirus, la mention des jours où cela s’est produit ainsi que l’indication que l’OFSP propose un guide (formulaire en ligne) et une infoline de conseil gratuit. Lorsque l’utilisateur quitte l’application pour remplir le guide, les jours d’infection potentielle indiqués dans l’application sont automatiquement transmis au guide. + Tout le système de l’application est conçu de manière à ce que ses utilisateurs ne soient pas identifiables. Le traitement de données personnelles est réduit au minimum. Ainsi, aucune indication technique sur les personnes, les lieux ou les appareils n’est possible. Les géolocalisations ne sont pas enregistrées lors d’un contact via traçage de proximité ; seules des données cryptées relatives aux contacts ayant eu lieu sont saisies. Le système d’alerte n’enregistre que des données cryptées concernant les manifestations et les risques d’infections qu’elles présentent. Ces données sont techniquement protégées de toute utilisation abusive. L’OFSP ne peut tirer aucune conclusion concernant les utilisateurs de l’application ni décrypter les données. Cette dernière protège les données des utilisateurs de telle sorte qu’aucun lien ne peut être établi avec une personne précise sur de longues distances. Un rattachement à un individu ne peut toutefois pas être totalement exclu, en particulier pour le système de traçage de proximité. Il existe en effet une certaine probabilité qu’une personne alertée d’un possible risque d’infection puisse éventuellement tirer des conclusions sur l’identité de la personne infectée, en se remémorant les contacts sociaux qu’elle a eus au cours des derniers jours. Les personnes qui utilisent l’application sont donc potentiellement identifiables. La notification déclenchée par un contact étroit avec un utilisateur testé positif inclut les règles de conduite recommandées par l’OFSP, l’information selon laquelle la personne a pu être exposée au coronavirus, la mention des jours où cela s’est produit ainsi que l’indication que l’OFSP propose un guide (formulaire en ligne) et une infoline de conseil gratuit. Lorsque l’utilisateur quitte l’application pour remplir le guide, les jours d’infection potentielle indiqués dans l’application sont automatiquement transmis au guide. La notification due à la fonction + + Check-in + + comprend les points ci-dessus, à l’exception du renvoi au guide et à l’infoline ; cette notification vise principalement à inciter la personne contactée à se faire tester.
@@ -140,7 +161,25 @@
- En outre, le système de l’application peut être relié à d’autres systèmes étrangers correspondants si un niveau adéquat de protection de la personnalité est assuré dans l’État concerné (par la législation ou par des garanties suffisantes, notamment contractuelles). Les systèmes étrangers sont ainsi réputés « correspondants » s’ils sont configurés suivant les principes ci-après du système de l’application : + Le + + backend + + manifestations comprend une liste des données suivantes : +
++ En outre, le système de traçage de proximité peut être relié à d’autres systèmes étrangers correspondants si un niveau adéquat de protection de la personnalité est assuré dans l’État concerné (par la législation ou par des garanties suffisantes, notamment contractuelles). Les systèmes étrangers sont ainsi réputés « correspondants » s’ils sont configurés suivant les principes ci-après du système de l’application :
- Le système d’application exploité par l’OFSP ainsi que le système de liaison se fondent sur la LEp et l’OSTP. L’application et le traitement des données entrantes par ce moyen servent exclusivement à informer les utilisateurs potentiellement exposés au coronavirus, tout en respectant la protection des données, et à établir des statistiques en lien avec le coronavirus à l’aide de données issues des deux + Le système d’application exploité par l’OFSP ainsi que le système de liaison se fondent sur la LEp, l’OSTP, la loi COVID-19 et l’OSAM. L’application et le traitement des données entrantes par ce moyen servent exclusivement à informer les utilisateurs potentiellement exposés au coronavirus, tout en respectant la protection des données, et à établir des statistiques en lien avec le coronavirus à l’aide de données issues des trois backends @@ -190,7 +229,11 @@
La liste contenant les clés privées des utilisateurs infectés du @@ -212,14 +255,14 @@
- L’OFSP met régulièrement à la disposition de l’Office fédéral de la statistique (OFS) le stock actuel de données existantes dans les deux + L’OFSP met régulièrement à la disposition de l’Office fédéral de la statistique (OFS) le stock actuel de données existantes dans les trois backends sous forme anonymisée. Les données du système de liaison peuvent être communiquées sous forme anonymisée à l’OFS et au service étranger compétent à des fins de statistiques. L’OFIT gère le logiciel dans son ensemble sur mandat de l’OFSP et fournit le service de soutien technique requis. L’OFIT a uniquement accès à des données lorsque cela s’avère nécessaire pour les buts et les activités spécifiques des collaborateurs concernés. Ces derniers sont tenus à la confidentialité lorsqu’ils traitent les données.
- L’application utilise une interface reliée au système d’exploitation du téléphone portable de l’utilisateur, qui nécessite le traitement des données par Apple ou Google. Les fonctionnalités des systèmes d’exploitation utilisées par l’interface doivent remplir les prescriptions de l’art. 60 + Pour le système de traçage de proximité, l’application utilise une interface reliée au système d’exploitation du téléphone portable de l’utilisateur, qui nécessite le traitement des données par Apple ou Google. Les fonctionnalités des systèmes d’exploitation utilisées par l’interface doivent remplir les prescriptions de l’art. 60 a @@ -245,6 +288,13 @@
1.3 L’application vise à informer les utilisateurs qui pourraient avoir été exposés au virus et à établir des statistiques en rapport avec le coronavirus. @@ -40,7 +43,7 @@
2.2 - L’utilisation de l’application n’est pas limitée à une zone géographique. Toutefois, des alertes sont possibles uniquement si l’application étrangère est interopérable avec l’application SwissCovid. Actuellement, seule l’application Corona-Warn utilisée en Allemagne remplit cette condition. + L’utilisation de l’application n’est pas limitée à une zone géographique. Toutefois, des alertes sont possibles uniquement si l’application étrangère est interopérable avec l’application SwissCovid. Actuellement, seule l’application Corona-Warn utilisée en Allemagne est compatible avec le système de traçage de proximité de l’application SwissCovid.
2.3 @@ -52,18 +55,18 @@
3.1 - L’application informe les utilisateurs lorsqu’ils ont été en contact avec au moins un utilisateur de l’application SwissCovid ou d’une autre application interopérable dont l’infection a été confirmée. + L’application informe les utilisateurs lorsqu’ils ont été en contact avec au moins un utilisateur de l’application SwissCovid ou d’une autre application interopérable dont l’infection a été confirmée. Ce contact peut être déterminé sur la base du traçage de proximité ou de la participation à une manifestation.
3.2 - Le Bluetooth doit être activé pour que l’application fonctionne. + Le Bluetooth doit être activé pour que le système de traçage de proximité fonctionne. En revanche, le système d’alerte n’a pas besoin du Bluetooth.
3.3 - L’application remplit les fonctions suivantes en utilisant une interface liée au système d’exploitation du téléphone portable de l’utilisateur : + L’application remplit les fonctions suivantes en utilisant, pour le système de traçage de proximité, une interface liée au système d’exploitation du téléphone portable de l’utilisateur :
- Le système d’exploitation génère chaque jour une nouvelle clé privée qui ne permet pas de remonter jusqu’à l’application, le téléphone portable ou à l’utilisateur. Dans le rayon de portée du Bluetooth, le système d’exploitation échange avec toutes les applications compatibles et actives un code d’identification (ID aléatoire) qui change au moins toutes les demi-heures, qui est généré à partir de la clé privée actuelle mais qui ne permet ni d’identifier la clé, ni de remonter jusqu’à l’application, au téléphone portable ou à l’utilisateur. + Système de traçage de proximité : le système d’exploitation génère chaque jour une nouvelle clé privée qui ne permet pas de remonter jusqu’à l’application, le téléphone portable ou à l’utilisateur. Dans le rayon de portée du Bluetooth, le système d’exploitation échange avec toutes les applications compatibles et actives un code d’identification (ID aléatoire) qui change au moins toutes les demi-heures, qui est généré à partir de la clé privée actuelle mais qui ne permet ni d’identifier la clé, ni de remonter jusqu’à l’application, au téléphone portable ou à l’utilisateur.
Le système d’exploitation enregistre les codes d’identification reçus, la puissance du signal, la date et la durée approximative du rapprochement. @@ -71,17 +74,27 @@
À intervalles réguliers, l’application extrait la liste des clés privées des utilisateurs infectés de l’application SwissCovid ou d’autres applications interopérables, et le système d’exploitation contrôle si au moins un code d’identification enregistré localement a été généré avec une clé privée. Si tel est le cas et qu’un rapprochement d’un mètre et demi ou moins a été établi avec au moins un téléphone mobile d’au moins un utilisateur infecté de l’application SwissCovid ou d’autres applications interopérables et que la durée totale de ces rapprochements atteint ou dépasse les quinze minutes au cours de la même journée, l’application envoie une information. La distance est évaluée en fonction de l’intensité du signal reçu.
++ Système d’alerte pour les manifestations : l’organisateur d’une manifestation génère un code QR dans son application. Les visiteurs de la manifestation peuvent scanner le code QR présenté avec leur application et indiquent ainsi avoir participé à la manifestation. +
++ L’application enregistre sur le téléphone portable le code d’identification de la manifestation avec sa date, sa durée et sa description. Depuis le + + backend + + manifestations, elle consulte régulièrement les codes d’identification de la manifestation chez les participants infectés. Elle compare ces codes avec ceux qu’elle a stocké localement. Si deux codes sont les mêmes, elle envoie alors une notification. +
3.4 - Si une infection est attestée chez un utilisateur, les professionnels disposant des droits d’accès (p. ex. les médecins traitants ou les pharmaciens) génèrent un code d’autorisation unique et temporaire (code COVID) et le communiquent à l’utilisateur infecté. Ce dernier peut saisir de manière volontaire le code d’autorisation dans son application. La notification et la saisie du code d’autorisation ne se font qu’avec le consentement explicite de la personne infectée. + Si une infection est attestée chez un utilisateur, les professionnels disposant des droits d’accès (p. ex. les médecins traitants ou les pharmaciens) génèrent un code d’autorisation unique et temporaire (code COVID) et le communiquent à l’utilisateur infecté. Ce dernier peut saisir de manière volontaire le code d’autorisation dans son application. La notification et la saisie du code d’autorisation ne se font qu’avec le consentement explicite de la personne infectée. Cette dernière peut par ailleurs choisir si elle souhaite alerter non seulement les contacts étroits détectés par le système de traçage de proximité mais également ceux détectés en raison de leur présence à une manifestation. Elle peut aussi décider de déclencher une notification pour toutes les manifestations auxquelles elle a participé pendant la période concernée ou seulement pour certaines d’entre elles.
- L’application informe les autres utilisateurs de l’application SwissCovid ou d'autres applications interopérables qui se sont trouvés en rapprochement selon le ch. 3.3 avec l’utilisateur infecté durant la période potentiellement infectieuse. + L’application informe les autres utilisateurs de l’application SwissCovid ou d'autres applications interopérables qui se sont trouvés en rapprochement selon le ch. 3.3 avec l’utilisateur infecté durant la période potentiellement infectieuse ou qui ont participé à une manifestation au même moment.
- Les utilisateurs informés apprennent qu’un rapprochement a eu lieu ou qu’ils ont potentiellement été exposés au coronavirus ainsi que les jours où cela s’est produit. Ils n’apprennent pas quel utilisateur est infecté et a déclenché la notification. Celle-ci comprend les règles de conduite recommandées par l’OFSP, l'indication que l'OFSP propose un guide (formulaire en ligne) ainsi qu'une infoline de conseil gratuit. Lorsqu'on quitte l’application pour remplir le guide, les jours d’infection potentielle indiqués dans l’application sont automatiquement transmis au guide. + Les utilisateurs informés apprennent qu’un rapprochement a eu lieu ou qu’ils ont potentiellement été exposés au coronavirus ainsi que les jours où cela s’est produit. Ils n’apprennent pas quel utilisateur est infecté et a déclenché la notification. La notification due à un contact étroit avec un utilisateur testé positif comprend les règles de conduite recommandées par l’OFSP, l'indication que l'OFSP propose un guide (formulaire en ligne) ainsi qu'une infoline de conseil gratuit. Lorsqu'on quitte l’application pour remplir le guide, les jours d’infection potentielle indiqués dans l’application sont automatiquement transmis au guide. La notification due au système d’alerte comprend les points ci-dessus, à l’exception du renvoi au guide et à l’infoline ; cette notification vise principalement à recommander à la personne contactée à se faire tester.
-Lors de la saisie des codes d’autorisation, les utilisateurs sont informés des pays avec lesquels l’application est interopérable (cf. ch. 2.2). Il leur est précisé que s’ils appuient sur le champ « D’accord » et qu’ils saisissent le code d’autorisation dans l’application, les clés privées ne sont pas seulement partagées dans l’application SwissCovid mais également avec toutes les autres applications interopérables (actuellement l’application allemande Corona-Warn). Suivant le principe +Lors de la saisie des codes d’autorisation, les utilisateurs sont informés des pays avec lesquels l’application est interopérable (cf. ch. 2.2). Il leur est précisé que s’ils appuient sur le champ « D’accord » et qu’ils saisissent le code d’autorisation dans l’application, les clés privées du système de traçage ce proximité ne sont pas seulement partagées dans l’application SwissCovid mais également avec toutes les autres applications interopérables (actuellement l’application allemande Corona-Warn). Suivant le principe One World @@ -192,7 +205,7 @@7.3 - Au plus tard au moment du retrait de l’ordonnance mentionnée au ch. 1.2, l’OFSP désactive l’application et prie les utilisateurs de la désinstaller de leur téléphone portable. + Au plus tard au moment du retrait des ordonnances mentionnées au ch. 1.2, l’OFSP désactive l’application et prie les utilisateurs de la désinstaller de leur téléphone portable.
8. diff --git a/app/src/main/assets/disclaimer/it/data_protection_statement.html b/app/src/main/assets/disclaimer/it/data_protection_statement.html index 5273b02c4..eac51f22b 100644 --- a/app/src/main/assets/disclaimer/it/data_protection_statement.html +++ b/app/src/main/assets/disclaimer/it/data_protection_statement.html @@ -7,18 +7,17 @@ ~ ~ SPDX-License-Identifier: MPL-2.0 --> -Informativa sulla protezione dei dati dell’Ufficio federale della sanità pubblica UFSP in relazione all’utilizzo dell’«app SwissCovid»
- Versione: 9 aprile 2021 + Versione: 1° luglio 2021
Nella presente informativa sulla protezione dei dati l’Ufficio federale della sanità pubblica (UFSP) spiega in che misura tratterà dati personali nel quadro dell’utilizzo dell’applicazione «app SwissCovid» (di seguito app) in Svizzera. Non si tratta di una descrizione esaustiva; alcuni aspetti specifici possono essere regolamentati da altre informative sulla protezione dei dati, documenti analoghi, condizioni di utilizzo o programmi di applicazione.
- Il trattamento dei dati personali è disciplinato dal diritto sulla protezione dei dati; al trattamento dei dati si applica la legislazione federale in materia. La presente informativa è inoltre conforme alla legge del 28 settembre 2012 sulle epidemie (LEp; RS 818.101) e all’ordinanza del 24 giugno 2020 sul sistema di tracciamento della prossimità per il coronavirus SARS-CoV-2 (OSTP; RS 818.101.25). + Il trattamento dei dati personali è disciplinato dal diritto sulla protezione dei dati; al trattamento dei dati personali si applica la legislazione federale in materia. La presente informativa è inoltre conforme alla legge del 28 settembre 2012 sulle epidemie (LEp; RS 818.101), all’ordinanza del 24 giugno 2020 sul sistema di tracciamento della prossimità per il coronavirus SARS-CoV-2 (OSTP; RS 818.101.25), alla legge federale del 25 settembre 2020 sulle basi legali delle ordinanze del Consiglio federale volte a far fronte all’epidemia di COVID-19 (legge COVID-19; RS 818.102) nonché all’ordinanza del 24 giugno 2021 su un sistema di allerta COVID-19 per le manifestazioni.
Per dati personali s’intendono tutte le informazioni relative a una persona identificata o identificabile. Il trattamento indica qualsiasi operazione relativa a dati personali, indipendentemente dai mezzi e dalle procedure impiegati, segnatamente la raccolta, la conservazione, l’utilizzazione, la modificazione, la comunicazione, l’archiviazione o la distruzione di dati. @@ -48,20 +47,23 @@
- L’intero sistema dell’app è concepito in modo tale che l’utente non sia identificabile. Il trattamento dei dati personali è ridotto al minimo, per cui non è in alcun modo tecnicamente possibile risalire a persone, luoghi o dispositivi. Non vengono rilevati dati sulla posizione, ma soltanto informazioni crittografate riguardanti i contatti avvenuti, protette tecnicamente da usi impropri. L’UFSP non può risalire agli utenti dell’app, che ne protegge i dati impedendo di stabilire un collegamento con una data persona sulle lunghe distanze. Un collegamento a una data persona non può tuttavia essere completamente escluso. Esiste infatti una certa probabilità che una persona informata di essere potenzialmente a rischio possa risalire all’identità della persona contagiata ricostruendo i contatti sociali avuti nei giorni precedenti. L’utilizzo dell’app potrebbe quindi permettere l’identificazione di persone. La notifica include le raccomandazioni di comportamento dell’UFSP, l’informazione che l’utente è stato potenzialmente esposto al coronavirus, l’indicazione dei giorni in cui lo è stato, la segnalazione che l’UFSP gestisce una guida (modulo web) e una linea di consulenza telefonica gratuita. Se l’utente esce dall’app per compilare il modulo web, i giorni menzionati nell’app nei quali c’è stata la possibilità di contagio vengono trasmessi automaticamente al modulo. + L’intero sistema dell’app è concepito in modo tale che l’utente non sia identificabile. Il trattamento dei dati personali è ridotto al minimo, per cui non è in alcun modo tecnicamente possibile risalire a persone, luoghi o dispositivi. Non vengono registrati dati sulla posizione degli incontri rilevati tramite tracciamento di prossimità, ma soltanto informazioni criptate riguardanti i contatti avvenuti. Il sistema di allerta registra solo dati criptati sulle manifestazioni e sui rischi di contagio in occasione di tali manifestazioni. Questi dati sono protetti tecnicamente da usi impropri. L’UFSP non può risalire agli utenti dell’app né decrittare i dati, che l’app protegge impedendo di stabilire un collegamento con una data persona sulle lunghe distanze. Un collegamento a una data persona non può tuttavia essere completamente escluso. Esiste infatti una certa probabilità, in particolare con il sistema di tracciamento della prossimità, che una persona informata di essere potenzialmente a rischio possa risalire all’identità della persona contagiata ricostruendo i contatti sociali avuti nei giorni precedenti. L’utilizzo dell’app potrebbe quindi permettere l’identificazione di persone. La notifica in base a un contatto stretto con un utente risultato positivo al test include le raccomandazioni di comportamento dell’UFSP, l’informazione che l’utente è stato potenzialmente esposto al coronavirus, l’indicazione dei giorni in cui lo è stato, la segnalazione che l’UFSP gestisce una guida (modulo web) e una linea di consulenza telefonica gratuita. Se l’utente esce dall’app per compilare il modulo web, i giorni menzionati nell’app nei quali c’è stata la possibilità di contagio vengono trasmessi automaticamente al modulo. La notifica in base alla funzione di check-in include i punti precedentemente menzionati, ma non l’offerta di una guida, né di una linea di consulenza telefonica, e verte principalmente sulla raccomandazione di sottoporsi al test.
@@ -69,13 +71,16 @@
@@ -104,7 +109,21 @@
- Inoltre, il sistema dell’app può essere collegato a sistemi esteri corrispondenti se nello Stato in questione è garantita un’adeguata protezione della personalità (grazie alla legislazione o a sufficienti garanzie, in particolare contrattuali). I sistemi esteri sono considerati «corrispondenti» se sono concepiti in base ai seguenti principi del sistema dell’app: + Il back end manifestazioni è costituito da un elenco con i seguenti dati: +
++ Inoltre, il sistema di tracciamento della prossimità può essere collegato a sistemi esteri corrispondenti se nello Stato in questione è garantita un’adeguata protezione della personalità (grazie alla legislazione o a sufficienti garanzie, in particolare contrattuali). I sistemi esteri sono considerati «corrispondenti» se sono concepiti in base ai seguenti principi del sistema dell’app:
- Il sistema dell’app gestito dall’UFSP e il sistema di collegamento si fondano sulla LEp e sull’OSTP. L’app e i relativi dati trattati servono unicamente a informare, nel rispetto della protezione dei dati, gli utenti che sono stati potenzialmente esposti al coronavirus e a elaborare statistiche in relazione al coronavirus a partire dai dati dei due back end. + Il sistema dell’app gestito dall’UFSP e il sistema di collegamento si fondano sulla LEp, sull’OSTP, sulla legge COVID-19 e sull’OSAM. L’app e i relativi dati trattati servono unicamente a informare, nel rispetto della protezione dei dati, gli utenti che sono stati potenzialmente esposti al coronavirus e a elaborare statistiche in relazione al coronavirus a partire dai dati dei tre back end.
Il sistema di collegamento fa sì che una simile informazione sia possibile anche tra app nazionali collegate. In tal modo, gli utenti dell’app possono essere informati anche se si sono trovati in prossimità di utenti infetti di un’app estera (p. es. frontalieri e turisti in Svizzera o contatti all’estero). Viceversa, anche gli utenti di un’app estera collegata possono essere informati se si sono trovati in prossimità di utenti infetti dell’app. @@ -140,24 +159,24 @@
- L’elenco con i dati del back end GP viene messo a disposizione dell’app mediante procedura di richiamo. Laddove l’UFSP commissioni tali servizi a terzi situati in Svizzera o all’estero, questi ultimi s’impegnano contrattualmente a rispettare le prescrizioni dell’articolo 60 + L’elenco con i dati del back end GP e del back end manifestazioni viene messo a disposizione dell’app mediante procedura di richiamo. Laddove l’UFSP commissioni tali servizi a terzi situati in Svizzera o all’estero, questi ultimi s’impegnano contrattualmente a rispettare le prescrizioni dell’articolo 60 a - LEp e dell’OSTP; è fatta salva la disposizione sul codice sorgente di cui all’articolo 60 + LEp, dell’OSTP, dell’articolo 3 capoverso 7 lettera a legge COVID-19 nonché dell’OSAM; è fatta salva la disposizione sul codice sorgente di cui all’articolo 60 a - capoverso 5 lettera e LEp. L’UFSP controlla che questi terzi rispettino le prescrizioni e non utilizzino per scopi propri i metadati generati durante l’esecuzione del mandato. Questi dati sono analizzati soltanto dall’UFSP o dall’UFIT (cfr. n. 8). + capoverso 5 lettera e LEp e all’articolo 15 OSAM. L’UFSP controlla che questi terzi rispettino le prescrizioni e non utilizzino per scopi propri i metadati generati durante l’esecuzione del mandato. Questi dati sono analizzati soltanto dall’UFSP o dall’UFIT (cfr. n. 8).
L’elenco delle chiavi private degli utenti infetti del back end GP è inoltre trasmesso regolarmente al sistema di collegamento ai fini dell’informazione transfrontaliera. I sistemi esteri collegati (attualmente: la Corona-Warn-App tedesca) scaricano quindi queste chiavi private e le mettono a disposizione delle proprie app affinché possano richiamarle (cfr. n. 2).
- L’UFSP mette periodicamente a disposizione dell’Ufficio federale di statistica (UST) per valutazioni statistiche l’attuale raccolta di dati disponibili nei due back end in forma anonimizzata. I dati del sistema di collegamento possono essere resi noti in forma completamente anonimizzata all’UST e al competente servizio estero a fini statistici. L’UFIT gestisce su incarico dell’UFSP tutti i software e fornisce il servizio di assistenza tecnica necessario. L’UFIT ha accesso solo ai dati necessari agli scopi descritti e all’attività dei collaboratori interessati, che sono tenuti a utilizzare i dati con riservatezza. + L’UFSP mette periodicamente a disposizione dell’Ufficio federale di statistica (UST) per valutazioni statistiche l’attuale raccolta di dati disponibili nei tre back end in forma anonimizzata. I dati del sistema di collegamento possono essere resi noti in forma completamente anonimizzata all’UST e al competente servizio estero a fini statistici. L’UFIT gestisce su incarico dell’UFSP tutti i software e fornisce il servizio di assistenza tecnica necessario. L’UFIT ha accesso solo ai dati necessari agli scopi descritti e all’attività dei collaboratori interessati, che sono tenuti a utilizzare i dati con riservatezza.
- L’app utilizza un’interfaccia verso il sistema operativo del telefono cellulare dell’utente che elabora dati attraverso Apple o Google. Le funzioni dei sistemi operativi utilizzate tramite l’interfaccia devono adempiere le prescrizioni di cui all’articolo 60 + Per il sistema di tracciamento della prossimità, l’app utilizza un’interfaccia verso il sistema operativo del telefono cellulare dell’utente che elabora dati attraverso Apple o Google. Le funzioni dei sistemi operativi utilizzate tramite l’interfaccia devono adempiere le prescrizioni di cui all’articolo 60 a @@ -177,6 +196,9 @@
- Vengono memorizzati i registri degli accessi al back end GP e al sistema di gestione dei codici per gli scopi previsti agli articoli 57 + Vengono memorizzati i registri degli accessi al back end GP, al back end manifestazioni e al sistema di gestione dei codici per gli scopi previsti agli articoli 57 l diff --git a/app/src/main/assets/disclaimer/it/terms_of_use.html b/app/src/main/assets/disclaimer/it/terms_of_use.html index 8223a8e96..9cd394a22 100644 --- a/app/src/main/assets/disclaimer/it/terms_of_use.html +++ b/app/src/main/assets/disclaimer/it/terms_of_use.html @@ -7,7 +7,6 @@ ~ ~ SPDX-License-Identifier: MPL-2.0 --> - 1. Campo di applicazione e scopo @@ -18,7 +17,7 @@
1.2 - L’app dell’Ufficio federale della sanità pubblica (UFSP) si basa sulla legge del 28 settembre 2012 (LEp; RS 818.101) e sull’ordinanza del 24 giugno 2020 sul sistema di tracciamento della prossimità per il coronavirus SARS-CoV-2 (OSTP; RS 818.101.25). + L’app dell’Ufficio federale della sanità pubblica (UFSP) si basa sulla legge del 28 settembre 2012 (LEp; RS 818.101), sull’ordinanza del 24 giugno 2020 sul sistema di tracciamento della prossimità per il coronavirus SARS-CoV-2 (OSTP; RS 818.101.25), sulla legge federale del 25 settembre 2020 sulle basi legali delle ordinanze del Consiglio federale volte a far fronte all’epidemia di COVID-19 (legge COVID-19; RS 818.102) nonché sull’ordinanza del 24 giugno 2021 su un sistema di allerta COVID-19 per le manifestazioni.
1.3 @@ -34,7 +33,7 @@
2.2 - L’utilizzo dell’app non è limitato a una regione geografica. Tuttavia, le segnalazioni possono aver luogo soltanto se l’app estera è interoperabile con l’app SwissCovid. Al momento attuale lo è soltanto la Corona-Warn-App impiegata in Germania. + L’utilizzo dell’app non è limitato a una regione geografica. Tuttavia, le segnalazioni possono aver luogo soltanto se l’app estera è interoperabile con l’app SwissCovid. Al momento attuale soltanto la Corona-Warn-App impiegata in Germania è interoperabile con il sistema di tracciamento della prossimità dell’app SwissCovid.
2.3 @@ -46,38 +45,44 @@
3.1 - L’app informa gli utenti che sono entrati in stretto contatto con almeno un utente dell’app SwissCovid o delle altre app interoperabili risultato contagiato. + L’app informa gli utenti che sono entrati in stretto contatto con almeno un utente dell’app SwissCovid o delle altre app interoperabili risultato infetto. Questo contatto rilevante può essere ricostruito in base al tracciamento della prossimità o alla partecipazione a una manifestazione.
3.2 - Affinché l’app funzioni è necessario che il Bluetooth sia attivo. + Il sistema di tracciamento della prossimità dell’app presuppone l’attivazione del Bluetooth; per il sistema di allerta ciò non è invece necessario.
3.3 - Mediante l’utilizzazione di un’interfaccia verso il sistema operativo del telefono cellulare dell’utente, l’app adempie le seguenti funzioni. + Con il sistema di tracciamento della prossimità e mediante l’utilizzazione di un’interfaccia verso il sistema operativo del telefono cellulare dell’utente, l’app adempie le seguenti funzioni.
- Il sistema operativo genera ogni giorno una nuova chiave privata che non consente di risalire in alcun modo all’app, al telefono cellulare o agli utenti. Scambia un codice d’identificazione (cosiddetto “random ID”) che cambia almeno una volta ogni mezz’ora con tutte le app compatibili e attive che si trovano entro la portata di Bluetooth. Tale codice deriva da una chiave privata aggiornata, ma non è riconducibile alla stessa e di conseguenza nemmeno all’app, al telefono cellulare e al suo utente. + Sistema di tracciamento della prossimità: il sistema operativo genera ogni giorno una nuova chiave privata che non consente di risalire in alcun modo all’app, al telefono cellulare o agli utenti. Scambia un codice d’identificazione (cosiddetto “random ID”) che cambia almeno una volta ogni mezz’ora con tutte le app compatibili e attive che si trovano entro la portata di Bluetooth. Tale codice deriva da una chiave privata aggiornata, ma non è riconducibile alla stessa e di conseguenza nemmeno all’app, al telefono cellulare e al suo utente.
Il sistema operativo memorizza sul telefono cellulare i codici d’identificazione ricevuti, la potenza del segnale, la data e la durata stimata della prossimità.
- L’app richiama periodicamente un elenco delle chiavi private degli utenti contagiati dell’app SwissCovid e delle altre app interoperabili e controlla con il suo sistema operativo se almeno un codice d’identificazione memorizzato localmente è stato generato con una chiave privata dell’elenco. Se ciò si verifica nonché la prossimità da almeno un telefono cellulare di un utente dell’app SwissCovid o delle altre app interoperabili contagiato è pari o inferiore a 1,5 metri e la somma della durata di tutte queste prossimità in un giorno raggiunge i quindici minuti, l’app ne informa l’utente. La distanza è stimata in base alla potenza del segnale ricevuto. + L’app richiama periodicamente un elenco delle chiavi private degli utenti infetti dell’app SwissCovid e delle altre app interoperabili e controlla con il suo sistema operativo se almeno un codice d’identificazione memorizzato localmente è stato generato con una chiave privata dell’elenco. Se ciò si verifica nonché la prossimità da almeno un telefono cellulare di un utente dell’app SwissCovid o delle altre app interoperabili infetto è pari o inferiore a 1,5 metri e la somma della durata di tutte queste prossimità in un giorno raggiunge i quindici minuti, l’app ne informa l’utente. La distanza è stimata in base alla potenza del segnale ricevuto. +
++ Sistema di allerta per le manifestazioni: l’organizzatore di una manifestazione genera nella propria app un codice QR che i visitatori della manifestazione possono scansionare per effettuare il check-in alla manifestazione. +
++ L’app memorizza sul telefono cellulare il codice di identificazione della manifestazione con la rispettiva data, la durata della permanenza e la designazione della manifestazione. Richiama periodicamente dal back end delle manifestazioni l’elenco dei codici di identificazione delle manifestazioni dei partecipanti infetti. Confronta tali codici con i codici di identificazione delle manifestazioni che ha memorizzato localmente. Se da tale confronto emerge una corrispondenza, genera una notifica.
3.4 - In caso di contagio accertato di un utente, il personale specialistico avente diritto di accesso (p. es. medici curanti o farmacisti) genera un codice di attivazione (codice Covid) univoco e la cui validità è limitata nel tempo e lo comunica all’utente contagiato, che può immetterlo nell’app su base volontaria. La notifica ovvero l’inserimento del codice di attivazione richiedono il consenso esplicito dell'utente contagiato. + In caso di infezione accertata di un utente, il personale specialistico avente diritto di accesso (p. es. medici curanti o farmacisti) genera un codice di attivazione (codice Covid) univoco e la cui validità è limitata nel tempo e lo comunica all’utente infetto, che può immetterlo nell’app su base volontaria. La notifica ovvero l’inserimento del codice di attivazione richiedono il consenso esplicito dell’utente infetto. L’utente infetto può scegliere se allertare sia i contatti stretti in base al sistema di tracciamento della prossimità sia i contatti in base alla partecipazione a una manifestazione. Può inoltre decidere se generare una notifica per tutte le manifestazioni alle quali ha partecipato nel periodo rilevante o solo per alcune.
- Gli altri utenti dell’app SwissCovid o delle altre app interoperabili che sono stati in prossimità secondo il numero 3.3 con l’utente contagiato durante il periodo di contagiosità vengono informati dalla loro app. + Gli altri utenti dell’app SwissCovid o delle altre app interoperabili che sono stati in prossimità secondo il numero 3.3 con l’utente infetto durante il periodo di infettività o che hanno partecipato nello stesso momento alla medesima manifestazione vengono informati dalla loro app.
- Viene loro comunicato che vi è stata una prossimità ovvero che sono stati potenzialmente esposti al coronavirus e le date in cui tale episodio si è verificato. Non viene comunicato loro quale utente è risultato contagiato e ha attivato la notifica dell’app SwissCovid. Quest’ultima comprende anche le raccomandazioni di comportamento dell’UFSP nonché l’informazione che l’UFSP gestisce una guida (modulo web) e una linea di consulenza telefonica gratuita. Se l’utente esce dall’app per compilare il modulo web, i giorni menzionati nell’app nei quali c’è stata la possibilità di contagio vengono trasmessi automaticamente al modulo. + Viene loro comunicato che vi è stata una prossimità ovvero che sono stati potenzialmente esposti al coronavirus e le date in cui tale episodio si è verificato. Non viene comunicato loro quale utente è risultato infetto e ha attivato la notifica dell’app SwissCovid. La notifica in base a un contratto stretto con un utente risultato positivo al test comprende anche le raccomandazioni di comportamento dell’UFSP nonché l’informazione che l’UFSP gestisce una guida (modulo web) e una linea di consulenza telefonica gratuita. Se l’utente esce dall’app per compilare il modulo web, i giorni menzionati nell’app nei quali c’è stata la possibilità di contagio vengono trasmessi automaticamente al modulo. La notifica in base al sistema di allerta include i punti precedentemente menzionati, ma non l’offerta di una guida, né di una linea di consulenza telefonica, e verte principalmente sulla raccomandazione di sottoporsi al test.
3.5 - Al momento dell’immissione del codice di attivazione, agli utenti viene comunicato con quali Paesi è interoperabile l’app (cfr. n. 2.2). Viene inoltre segnalato che, premendo il pulsante «Accetta» e immettendo il codice di attivazione nell’app, le chiavi private vengono condivise non soltanto all’interno dell’app SwissCovid, ma anche con tutte le app interoperabili (attualmente la Corona-Warn-App tedesca). Le chiavi private possono solo essere condivise con tutte le app interoperabili o non essere condivise affatto, secondo il «principio one world». + Al momento dell’immissione del codice di attivazione, agli utenti viene comunicato con quali Paesi è interoperabile l’app (cfr. n. 2.2). Viene inoltre segnalato che, premendo il pulsante «Accetta» e immettendo il codice di attivazione nell’app, le chiavi private del sistema di tracciamento della prossimità vengono condivise non soltanto all’interno dell’app SwissCovid, ma anche con tutte le app interoperabili (attualmente la Corona-Warn-App tedesca). Le chiavi private possono solo essere condivise con tutte le app interoperabili o non essere condivise affatto, secondo il «principio one world».
3.6 @@ -184,7 +189,7 @@
7.3 - Al più tardi quando l’ordinanza indicata al numero 1.2 sarà abrogata, l’UFSP disattiverà l’app e inviterà gli utenti a disinstallarla dal proprio telefono cellulare. + Al più tardi quando le ordinanze indicate al numero 1.2 saranno abrogate, l’UFSP disattiverà l’app e inviterà gli utenti a disinstallarla dal proprio telefono cellulare.
8. diff --git a/app/src/main/assets/impressum/bs/impressum.html b/app/src/main/assets/impressum/bs/impressum.html index 25d8899cc..877ba8633 100644 --- a/app/src/main/assets/impressum/bs/impressum.html +++ b/app/src/main/assets/impressum/bs/impressum.html @@ -105,33 +105,6 @@Upozorenje: Ova aplikacija vas ne štiti od infekcije virusom COVID-19.
Ova aplikacija je namenjena za praćenje kontakata i za upozoravanje korisnika o mogućem kontaktu sa osobama koje su inficirane virusom COVID-19. Ona nije dijagnostička alatka. Pažljivo pročitajte uputstva na svakom ekranu aplikacije.
-Bundesamt für Gesundheit BAG
-Schwarzenburgstrasse 157
-3097 Liebefeld, Switzerland
-SwissCovid App Version {APPVERSION}
-Release Date: {RELEASEDATE}
-