eyeling 1.24.27 → 1.24.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -410,7 +410,7 @@
410
410
  {
411
411
  :AgreementEHDS1 dct:title ?alabel .
412
412
  :PatientProfileExample dct:title ?plabel .
413
- ( "# odrl-dpv-ehds-risk-ranked\n\n## Source files\n\n- [N3 rules](../odrl-dpv-ehds-risk-ranked.n3)\n\n## Ranked DPV Risk Report (EHDS-aligned)\nAgreement: %s\nProfile: %s\n\n"
413
+ ( "# odrl-dpv-ehds-risk-ranked\n\n## Source files\n\n- [N3 rules](../odrl-dpv-ehds-risk-ranked.n3)\n\n## Ranked DPV Risk Report (EHDS-aligned)\n\n**Agreement:** %s\n**Profile:** %s\n\n"
414
414
  ?alabel ?plabel ) string:format ?hdr .
415
415
  }
416
416
  log:query
@@ -428,8 +428,8 @@ log:query
428
428
  dct:description ?why .
429
429
  ?clause :clauseId ?cid .
430
430
  ( 1000 ?score ) math:difference ?inv .
431
- ( "score=%s (%s, %s) clause %s\n %s\n\n"
432
- ?score ?lvl ?sev ?cid ?why ) string:format ?line .
431
+ ( "### Clause %s — score %s\n\n**Risk level:** `%s`\n**Severity:** `%s`\n\n%s\n\n"
432
+ ?cid ?score ?lvl ?sev ?why ) string:format ?line .
433
433
  }
434
434
  log:query
435
435
  {
@@ -445,7 +445,7 @@ log:query
445
445
  ?clause :clauseId ?cid .
446
446
  ?m dct:description ?md .
447
447
  ( 1000 ?score ) math:difference ?inv .
448
- ( " - mitigation for clause %s: %s\n" ?cid ?md ) string:format ?mline .
448
+ ( "- **Mitigation for clause %s:** %s\n\n" ?cid ?md ) string:format ?mline .
449
449
  }
450
450
  log:query
451
451
  {
@@ -527,7 +527,7 @@
527
527
  {
528
528
  :AgreementHC1 dct:title ?alabel .
529
529
  :PatientExample dct:title ?plabel .
530
- ( "# odrl-dpv-healthcare-risk-ranked\n\n## Source files\n\n- [N3 rules](../odrl-dpv-healthcare-risk-ranked.n3)\n\n## Ranked DPV Risk Report (Healthcare & Life Sciences)\nAgreement: %s\nProfile: %s\n\n"
530
+ ( "# odrl-dpv-healthcare-risk-ranked\n\n## Source files\n\n- [N3 rules](../odrl-dpv-healthcare-risk-ranked.n3)\n\n## Ranked DPV Risk Report (Healthcare & Life Sciences)\n\n**Agreement:** %s\n**Profile:** %s\n\n"
531
531
  ?alabel ?plabel ) string:format ?hdr .
532
532
  }
533
533
  =>
@@ -547,8 +547,8 @@
547
547
 
548
548
  ( 1000 ?score ) math:difference ?inv .
549
549
 
550
- ( "score=%s (%s, %s) clause %s\n %s\n\n"
551
- ?score ?lvl ?sev ?cid ?why ) string:format ?line .
550
+ ( "### Clause %s — score %s\n\n**Risk level:** `%s`\n**Severity:** `%s`\n\n%s\n\n"
551
+ ?cid ?score ?lvl ?sev ?why ) string:format ?line .
552
552
  }
553
553
  =>
554
554
  {
@@ -566,7 +566,7 @@
566
566
 
567
567
  ( 1000 ?score ) math:difference ?inv .
568
568
 
569
- ( " - mitigation for clause %s: %s\n"
569
+ ( "- **Mitigation for clause %s:** %s\n\n"
570
570
  ?cid ?md ) string:format ?mline .
571
571
  }
572
572
  =>
@@ -412,7 +412,7 @@
412
412
  {
413
413
  :Agreement1 dct:title ?alabel .
414
414
  :ConsumerExample dct:title ?plabel .
415
- ( "# odrl-dpv-risk-ranked\n\n## Source files\n\n- [N3 rules](../odrl-dpv-risk-ranked.n3)\n\n## Ranked DPV Risk Report\nAgreement: %s\nProfile: %s\n\n"
415
+ ( "# odrl-dpv-risk-ranked\n\n## Source files\n\n- [N3 rules](../odrl-dpv-risk-ranked.n3)\n\n## Ranked DPV Risk Report\n\n**Agreement:** %s\n**Profile:** %s\n\n"
416
416
  ?alabel ?plabel ) string:format ?hdr .
417
417
  }
418
418
  log:query
@@ -432,8 +432,8 @@ log:query
432
432
 
433
433
  ( 1000 ?score ) math:difference ?inv .
434
434
 
435
- ( "score=%s (%s, %s) clause %s\n %s\n\n"
436
- ?score ?lvl ?sev ?cid ?why ) string:format ?line .
435
+ ( "### Clause %s — score %s\n\n**Risk level:** `%s`\n**Severity:** `%s`\n\n%s\n\n"
436
+ ?cid ?score ?lvl ?sev ?why ) string:format ?line .
437
437
  }
438
438
  log:query
439
439
  {
@@ -451,7 +451,7 @@ log:query
451
451
 
452
452
  ( 1000 ?score ) math:difference ?inv .
453
453
 
454
- ( " - mitigation for clause %s: %s\n"
454
+ ( "- **Mitigation for clause %s:** %s\n\n"
455
455
  ?cid ?md ) string:format ?mline .
456
456
  }
457
457
  log:query
@@ -773,7 +773,7 @@
773
773
  {
774
774
  ?agreement a :Agreement; :label ?alabel.
775
775
  ?profile a :ConsumerProfile; :label ?plabel.
776
- ( "# odrl-risk-mitigation\n\n## Source files\n\n- [N3 rules](../odrl-risk-mitigation.n3)\n\n## Risk report for %s (profile: %s)\n" ?alabel ?plabel ) string:format ?hdr.
776
+ ( "# odrl-risk-mitigation\n\n## Source files\n\n- [N3 rules](../odrl-risk-mitigation.n3)\n\n## Risk report\n\n**Agreement:** %s\n**Profile:** %s\n\n" ?alabel ?plabel ) string:format ?hdr.
777
777
  }
778
778
  =>
779
779
  {
@@ -807,8 +807,8 @@
807
807
  :title ?title;
808
808
  :explanation ?why.
809
809
 
810
- ( "%s) score=%s (%s), clause %s %s. %s\n"
811
- ?rank ?score ?sev ?cid ?title ?why
810
+ ( "### %s. Clause %s %s\n\n**Score:** `%s`\n**Severity:** `%s`\n\n%s\n\n"
811
+ ?rank ?cid ?title ?score ?sev ?why
812
812
  ) string:format ?line.
813
813
  }
814
814
  =>
@@ -820,7 +820,7 @@
820
820
  {
821
821
  ?agreement a :Agreement.
822
822
  ?profile a :ConsumerProfile.
823
- "\n--- Suggested mitigations (highest risk first) ---\n" log:equalTo ?hdr2.
823
+ "\n## Suggested mitigations (highest risk first)\n\n" log:equalTo ?hdr2.
824
824
  }
825
825
  =>
826
826
  {
@@ -859,7 +859,7 @@
859
859
  ?risk :clauseId ?cid;
860
860
  :title ?title.
861
861
 
862
- ( "%s) clause %s — %s (score=%s). %s\n"
862
+ ( "- **%s. Clause %s — %s** (score `%s`): %s\n"
863
863
  ?rank ?cid ?title ?score ?fixText
864
864
  ) string:format ?line.
865
865
  }
@@ -391,7 +391,7 @@
391
391
  ?agreement a :Agreement; :label ?alabel.
392
392
  ?profile a :ConsumerProfile; :label ?plabel.
393
393
 
394
- ( "# odrl-risk\n\n## Source files\n\n- [N3 rules](../odrl-risk.n3)\n\n## Risk report for %s (profile: %s)\n" ?alabel ?plabel ) string:format ?hdr.
394
+ ( "# odrl-risk\n\n## Source files\n\n- [N3 rules](../odrl-risk.n3)\n\n## Risk report\n\n**Agreement:** %s\n**Profile:** %s\n\n" ?alabel ?plabel ) string:format ?hdr.
395
395
  }
396
396
  =>
397
397
  {
@@ -428,8 +428,8 @@
428
428
  :title ?title;
429
429
  :explanation ?why.
430
430
 
431
- ( "%s) score=%s (%s), clause %s %s. %s\n"
432
- ?rank ?score ?sev ?cid ?title ?why
431
+ ( "### %s. Clause %s %s\n\n**Score:** `%s`\n**Severity:** `%s`\n\n%s\n\n"
432
+ ?rank ?cid ?title ?score ?sev ?why
433
433
  ) string:format ?line.
434
434
  }
435
435
  =>
@@ -5,22 +5,43 @@
5
5
  - [N3 rules](../odrl-dpv-ehds-risk-ranked.n3)
6
6
 
7
7
  ## Ranked DPV Risk Report (EHDS-aligned)
8
- Agreement: EHDS Secondary Use Agreement (example)
9
- Profile: Example patient profile (EHDS rights expectations)
10
8
 
11
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H1
12
- Risk: secondary use is permitted without an EHDS Data Permit safeguard. Clause H1: Hospital may provide electronic health data for secondary use based on a bilateral data use agreement with the applicant.
9
+ **Agreement:** EHDS Secondary Use Agreement (example)
10
+ **Profile:** Example patient profile (EHDS rights expectations)
13
11
 
14
- - mitigation for clause H1: Require an EHDS Data Permit (eu-ehds:DataPermit) issued by a Health Data Access Body prior to secondary use.
15
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H2
16
- Risk: secondary use may include patients who opted out (EHDS A71). Clause H2: Secondary use may include all patient records for training and evaluating health-related algorithms.
12
+ ### Clause H1 score 100
17
13
 
18
- - mitigation for clause H2: Add an explicit safeguard to exclude records of persons who exercised the EHDS opt-out from secondary use (A71).
19
- score=88 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H3
20
- Risk: the agreement permits local downloads rather than processing within a secure processing environment. Clause H3: The applicant may download a complete local copy of the dataset to its own infrastructure for analysis.
14
+ **Risk level:** `https://w3id.org/dpv/risk#HighRisk`
15
+ **Severity:** `https://w3id.org/dpv/risk#HighSeverity`
21
16
 
22
- - mitigation for clause H3: Require processing only within a secure processing environment (e.g., eu-dga:SecureProcessingEnvironment), and prohibit local downloads of raw datasets.
23
- score=80 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H4
24
- Risk: secondary-use dataset is only described as pseudonymised, without a safeguard requiring statistically anonymised data for secondary use. Clause H4: The dataset will be provided in pseudonymised form by removing direct identifiers.
17
+ Risk: secondary use is permitted without an EHDS Data Permit safeguard. Clause H1: Hospital may provide electronic health data for secondary use based on a bilateral data use agreement with the applicant.
18
+
19
+ - **Mitigation for clause H1:** Require an EHDS Data Permit (eu-ehds:DataPermit) issued by a Health Data Access Body prior to secondary use.
20
+
21
+ ### Clause H2 — score 100
22
+
23
+ **Risk level:** `https://w3id.org/dpv/risk#HighRisk`
24
+ **Severity:** `https://w3id.org/dpv/risk#HighSeverity`
25
+
26
+ Risk: secondary use may include patients who opted out (EHDS A71). Clause H2: Secondary use may include all patient records for training and evaluating health-related algorithms.
27
+
28
+ - **Mitigation for clause H2:** Add an explicit safeguard to exclude records of persons who exercised the EHDS opt-out from secondary use (A71).
29
+
30
+ ### Clause H3 — score 88
31
+
32
+ **Risk level:** `https://w3id.org/dpv/risk#HighRisk`
33
+ **Severity:** `https://w3id.org/dpv/risk#HighSeverity`
34
+
35
+ Risk: the agreement permits local downloads rather than processing within a secure processing environment. Clause H3: The applicant may download a complete local copy of the dataset to its own infrastructure for analysis.
36
+
37
+ - **Mitigation for clause H3:** Require processing only within a secure processing environment (e.g., eu-dga:SecureProcessingEnvironment), and prohibit local downloads of raw datasets.
38
+
39
+ ### Clause H4 — score 80
40
+
41
+ **Risk level:** `https://w3id.org/dpv/risk#HighRisk`
42
+ **Severity:** `https://w3id.org/dpv/risk#HighSeverity`
43
+
44
+ Risk: secondary-use dataset is only described as pseudonymised, without a safeguard requiring statistically anonymised data for secondary use. Clause H4: The dataset will be provided in pseudonymised form by removing direct identifiers.
45
+
46
+ - **Mitigation for clause H4:** Require an EHDS Health Data Request for statistically anonymised data (eu-ehds:HealthDataRequest), and add a constraint that secondary-use data must be statistically anonymised.
25
47
 
26
- - mitigation for clause H4: Require an EHDS Health Data Request for statistically anonymised data (eu-ehds:HealthDataRequest), and add a constraint that secondary-use data must be statistically anonymised.
@@ -5,18 +5,34 @@
5
5
  - [N3 rules](../odrl-dpv-healthcare-risk-ranked.n3)
6
6
 
7
7
  ## Ranked DPV Risk Report (Healthcare & Life Sciences)
8
- Agreement: Example Healthcare & Life-Sciences Data Use Agreement
9
- Profile: Example patient profile
10
8
 
11
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H1
12
- Risk: health/genomic data may be used for research without explicit opt-in consent. Clause H1: Hospital may use EHR and genomic data for internal clinical research and publication.
9
+ **Agreement:** Example Healthcare & Life-Sciences Data Use Agreement
10
+ **Profile:** Example patient profile
13
11
 
14
- - mitigation for clause H1: Add an explicit consent constraint for secondary research use.
15
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H2
16
- Risk: genomic data may be shared with external pharma partners without a de-identification/pseudonymisation requirement. Clause H2: Hospital may share genomic data with pharmaceutical partners for drug discovery and R&D.
12
+ ### Clause H1 score 100
17
13
 
18
- - mitigation for clause H2: Require de-identification/pseudonymisation before external sharing of genomic data.
19
- score=70 (https://w3id.org/dpv/risk#ModerateRisk, https://w3id.org/dpv/risk#ModerateSeverity) clause H4
20
- Risk: retention (3650 days) exceeds patient preference (1095 days). Clause H4: Hospital retains patient health records for 10 years.
14
+ **Risk level:** `https://w3id.org/dpv/risk#HighRisk`
15
+ **Severity:** `https://w3id.org/dpv/risk#HighSeverity`
16
+
17
+ Risk: health/genomic data may be used for research without explicit opt-in consent. Clause H1: Hospital may use EHR and genomic data for internal clinical research and publication.
18
+
19
+ - **Mitigation for clause H1:** Add an explicit consent constraint for secondary research use.
20
+
21
+ ### Clause H2 — score 100
22
+
23
+ **Risk level:** `https://w3id.org/dpv/risk#HighRisk`
24
+ **Severity:** `https://w3id.org/dpv/risk#HighSeverity`
25
+
26
+ Risk: genomic data may be shared with external pharma partners without a de-identification/pseudonymisation requirement. Clause H2: Hospital may share genomic data with pharmaceutical partners for drug discovery and R&D.
27
+
28
+ - **Mitigation for clause H2:** Require de-identification/pseudonymisation before external sharing of genomic data.
29
+
30
+ ### Clause H4 — score 70
31
+
32
+ **Risk level:** `https://w3id.org/dpv/risk#ModerateRisk`
33
+ **Severity:** `https://w3id.org/dpv/risk#ModerateSeverity`
34
+
35
+ Risk: retention (3650 days) exceeds patient preference (1095 days). Clause H4: Hospital retains patient health records for 10 years.
36
+
37
+ - **Mitigation for clause H4:** Limit retention to 3 years (or document the legal obligation requiring longer retention).
21
38
 
22
- - mitigation for clause H4: Limit retention to 3 years (or document the legal obligation requiring longer retention).
@@ -5,23 +5,45 @@
5
5
  - [N3 rules](../odrl-dpv-risk-ranked.n3)
6
6
 
7
7
  ## Ranked DPV Risk Report
8
- Agreement: Example Agreement
9
- Profile: Example consumer profile
10
8
 
11
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C1
12
- Risk: account/data removal is permitted without notice safeguards (no notice constraint and no duty to inform). Clause C1: Provider may remove the user account (and associated data) at its discretion.
9
+ **Agreement:** Example Agreement
10
+ **Profile:** Example consumer profile
13
11
 
14
- - mitigation for clause C1: Add a notice constraint (minimum noticeDays) before account removal.
15
- - mitigation for clause C1: Add a duty to inform the consumer prior to account removal.
16
- score=97 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C3
17
- Risk: user data sharing is permitted without an explicit consent constraint. Clause C3: Provider may share user data with partners for business purposes.
12
+ ### Clause C1 score 100
18
13
 
19
- - mitigation for clause C3: Add an explicit consent constraint before data sharing.
20
- score=85 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C2
21
- Risk: terms may change with notice (3 days) below consumer requirement (14 days). Clause C2: Provider may change terms by informing users at least 3 days in advance.
14
+ **Risk level:** `https://w3id.org/dpv/risk#HighRisk`
15
+ **Severity:** `https://w3id.org/dpv/risk#HighSeverity`
22
16
 
23
- - mitigation for clause C2: Increase minimum noticeDays in the inform duty to meet the consumer requirement.
24
- score=70 (https://w3id.org/dpv/risk#ModerateRisk, https://w3id.org/dpv/risk#ModerateSeverity) clause C4
25
- Risk: portability is restricted because exporting user data is prohibited. Clause C4: Users are not permitted to export their data.
17
+ Risk: account/data removal is permitted without notice safeguards (no notice constraint and no duty to inform). Clause C1: Provider may remove the user account (and associated data) at its discretion.
18
+
19
+ - **Mitigation for clause C1:** Add a notice constraint (minimum noticeDays) before account removal.
20
+
21
+ - **Mitigation for clause C1:** Add a duty to inform the consumer prior to account removal.
22
+
23
+ ### Clause C3 — score 97
24
+
25
+ **Risk level:** `https://w3id.org/dpv/risk#HighRisk`
26
+ **Severity:** `https://w3id.org/dpv/risk#HighSeverity`
27
+
28
+ Risk: user data sharing is permitted without an explicit consent constraint. Clause C3: Provider may share user data with partners for business purposes.
29
+
30
+ - **Mitigation for clause C3:** Add an explicit consent constraint before data sharing.
31
+
32
+ ### Clause C2 — score 85
33
+
34
+ **Risk level:** `https://w3id.org/dpv/risk#HighRisk`
35
+ **Severity:** `https://w3id.org/dpv/risk#HighSeverity`
36
+
37
+ Risk: terms may change with notice (3 days) below consumer requirement (14 days). Clause C2: Provider may change terms by informing users at least 3 days in advance.
38
+
39
+ - **Mitigation for clause C2:** Increase minimum noticeDays in the inform duty to meet the consumer requirement.
40
+
41
+ ### Clause C4 — score 70
42
+
43
+ **Risk level:** `https://w3id.org/dpv/risk#ModerateRisk`
44
+ **Severity:** `https://w3id.org/dpv/risk#ModerateSeverity`
45
+
46
+ Risk: portability is restricted because exporting user data is prohibited. Clause C4: Users are not permitted to export their data.
47
+
48
+ - **Mitigation for clause C4:** Add a permission allowing data export (or remove the prohibition) to support portability.
26
49
 
27
- - mitigation for clause C4: Add a permission allowing data export (or remove the prohibition) to support portability.
@@ -4,20 +4,67 @@
4
4
 
5
5
  - [N3 rules](../odrl-risk-mitigation.n3)
6
6
 
7
- ## Risk report for Example Platform Agreement (with fixes) (profile: Carol (example consumer))
8
- 1) score=100 (https://example.org/odrl-mitigation-demo#High), clause D6 — Provider can delete user data. This clause is risky because it allows the provider to delete the consumer’s data. Clause D6: We may delete your data at our discretion.
9
- 2) score=93 (https://example.org/odrl-mitigation-demo#High), clause D5 — No data export / portability. This clause is risky because it prohibits exporting data, undermining portability. Clause D5: You may not export or download your data from the service.
10
- 3) score=89 (https://example.org/odrl-mitigation-demo#High), clause D4 — Tracking without opt-in. This clause is risky because it permits tracking without explicit opt-in consent. Clause D4: We may track your activity to improve services.
11
- 4) score=85 (https://example.org/odrl-mitigation-demo#High), clause D2 — Auto-renewal without reminder. This clause is risky because it allows auto-renewal without a reminder. Consumer needs at least 7 days reminder. Clause D2: Your subscription renews automatically unless you cancel.
12
- 5) score=85 (https://example.org/odrl-mitigation-demo#High), clause D1Notice period too short. This clause is risky because the notice period (3 days) is below the consumer requirement (14 days). Clause D1: We may change these terms with notice. Notice may be as short as 3 days.
13
- 6) score=79 (https://example.org/odrl-mitigation-demo#Medium), clause D3 — Non-refundable fees. This clause is risky because it declares fees non-refundable, conflicting with a refund/cooling-off expectation (>= 14 days). Clause D3: All fees are non-refundable.
14
- 7) score=73 (https://example.org/odrl-mitigation-demo#Medium), clause D2 — Liability cap too low. This clause is risky because the liability cap (20 EUR) is below the consumer minimum (200 EUR). Clause D2: Your subscription renews automatically unless you cancel.
15
-
16
- --- Suggested mitigations (highest risk first) ---
17
- 1) clause D6 Provider can delete user data (score=100). Suggested fix: remove provider discretion to delete data; allow deletion only on consumer request or legal obligation.
18
- 2) clause D5 — No data export / portability (score=93). Suggested fix: add a permission to export/download user data (data portability).
19
- 3) clause D4 — Tracking without opt-in (score=89). Suggested fix: require opt-in consent for tracking (optInConsent=true).
20
- 4) clause D2 — Auto-renewal without reminder (score=85). Suggested fix: add a reminder duty for auto-renewal with reminderDays >= 7.
21
- 5) clause D1 — Notice period too short (score=85). Suggested fix: ensure prior-notice duty specifies noticeDays >= 14.
22
- 6) clause D3 — Non-refundable fees (score=79). Suggested fix: allow refunds (e.g., refundAllowed=true) or define a cooling-off period >= 14 days.
23
- 7) clause D2 — Liability cap too low (score=73). Suggested fix: raise liabilityCapEuro so it is >= 200 EUR (or remove the cap where inappropriate).
7
+ ## Risk report
8
+
9
+ **Agreement:** Example Platform Agreement (with fixes)
10
+ **Profile:** Carol (example consumer)
11
+
12
+ ### 1. Clause D6Provider can delete user data
13
+
14
+ **Score:** `100`
15
+ **Severity:** `https://example.org/odrl-mitigation-demo#High`
16
+
17
+ This clause is risky because it allows the provider to delete the consumer’s data. Clause D6: We may delete your data at our discretion.
18
+
19
+ ### 2. Clause D5 No data export / portability
20
+
21
+ **Score:** `93`
22
+ **Severity:** `https://example.org/odrl-mitigation-demo#High`
23
+
24
+ This clause is risky because it prohibits exporting data, undermining portability. Clause D5: You may not export or download your data from the service.
25
+
26
+ ### 3. Clause D4 — Tracking without opt-in
27
+
28
+ **Score:** `89`
29
+ **Severity:** `https://example.org/odrl-mitigation-demo#High`
30
+
31
+ This clause is risky because it permits tracking without explicit opt-in consent. Clause D4: We may track your activity to improve services.
32
+
33
+ ### 4. Clause D2 — Auto-renewal without reminder
34
+
35
+ **Score:** `85`
36
+ **Severity:** `https://example.org/odrl-mitigation-demo#High`
37
+
38
+ This clause is risky because it allows auto-renewal without a reminder. Consumer needs at least 7 days reminder. Clause D2: Your subscription renews automatically unless you cancel.
39
+
40
+ ### 5. Clause D1 — Notice period too short
41
+
42
+ **Score:** `85`
43
+ **Severity:** `https://example.org/odrl-mitigation-demo#High`
44
+
45
+ This clause is risky because the notice period (3 days) is below the consumer requirement (14 days). Clause D1: We may change these terms with notice. Notice may be as short as 3 days.
46
+
47
+ ### 6. Clause D3 — Non-refundable fees
48
+
49
+ **Score:** `79`
50
+ **Severity:** `https://example.org/odrl-mitigation-demo#Medium`
51
+
52
+ This clause is risky because it declares fees non-refundable, conflicting with a refund/cooling-off expectation (>= 14 days). Clause D3: All fees are non-refundable.
53
+
54
+ ### 7. Clause D2 — Liability cap too low
55
+
56
+ **Score:** `73`
57
+ **Severity:** `https://example.org/odrl-mitigation-demo#Medium`
58
+
59
+ This clause is risky because the liability cap (20 EUR) is below the consumer minimum (200 EUR). Clause D2: Your subscription renews automatically unless you cancel.
60
+
61
+
62
+ ## Suggested mitigations (highest risk first)
63
+
64
+ - **1. Clause D6 — Provider can delete user data** (score `100`): Suggested fix: remove provider discretion to delete data; allow deletion only on consumer request or legal obligation.
65
+ - **2. Clause D5 — No data export / portability** (score `93`): Suggested fix: add a permission to export/download user data (data portability).
66
+ - **3. Clause D4 — Tracking without opt-in** (score `89`): Suggested fix: require opt-in consent for tracking (optInConsent=true).
67
+ - **4. Clause D2 — Auto-renewal without reminder** (score `85`): Suggested fix: add a reminder duty for auto-renewal with reminderDays >= 7.
68
+ - **5. Clause D1 — Notice period too short** (score `85`): Suggested fix: ensure prior-notice duty specifies noticeDays >= 14.
69
+ - **6. Clause D3 — Non-refundable fees** (score `79`): Suggested fix: allow refunds (e.g., refundAllowed=true) or define a cooling-off period >= 14 days.
70
+ - **7. Clause D2 — Liability cap too low** (score `73`): Suggested fix: raise liabilityCapEuro so it is >= 200 EUR (or remove the cap where inappropriate).
@@ -4,8 +4,36 @@
4
4
 
5
5
  - [N3 rules](../odrl-risk.n3)
6
6
 
7
- ## Risk report for Example SaaS Agreement (profile: Alice (example consumer))
8
- 1) score=100 (https://example.org/agreement#High), clause C2 — Provider can delete user data. This clause is risky because it allows the provider to remove (delete) the consumer’s data. Clause C2: We may delete your data at our discretion, with or without notice.
9
- 2) score=95 (https://example.org/agreement#High), clause C3 — Data sharing without consent. This clause is risky because it permits data sharing without an explicit consent requirement. Clause C3: We may share your data with partners for any purpose.
10
- 3) score=95 (https://example.org/agreement#High), clause C1 — Unilateral change without notice. This clause is risky because it allows unilateral changes without any prior notice. Clause C1: We may change these terms at any time. Continued use means acceptance.
11
- 4) score=60 (https://example.org/agreement#Medium), clause C4 — Court access waiver / mandatory arbitration. This clause is risky because it restricts access to court (mandatory arbitration / waiver). Clause C4: You waive your right to go to court; disputes must be arbitrated.
7
+ ## Risk report
8
+
9
+ **Agreement:** Example SaaS Agreement
10
+ **Profile:** Alice (example consumer)
11
+
12
+ ### 1. Clause C2 — Provider can delete user data
13
+
14
+ **Score:** `100`
15
+ **Severity:** `https://example.org/agreement#High`
16
+
17
+ This clause is risky because it allows the provider to remove (delete) the consumer’s data. Clause C2: We may delete your data at our discretion, with or without notice.
18
+
19
+ ### 2. Clause C3 — Data sharing without consent
20
+
21
+ **Score:** `95`
22
+ **Severity:** `https://example.org/agreement#High`
23
+
24
+ This clause is risky because it permits data sharing without an explicit consent requirement. Clause C3: We may share your data with partners for any purpose.
25
+
26
+ ### 3. Clause C1 — Unilateral change without notice
27
+
28
+ **Score:** `95`
29
+ **Severity:** `https://example.org/agreement#High`
30
+
31
+ This clause is risky because it allows unilateral changes without any prior notice. Clause C1: We may change these terms at any time. Continued use means acceptance.
32
+
33
+ ### 4. Clause C4 — Court access waiver / mandatory arbitration
34
+
35
+ **Score:** `60`
36
+ **Severity:** `https://example.org/agreement#Medium`
37
+
38
+ This clause is risky because it restricts access to court (mandatory arbitration / waiver). Clause C4: You waive your right to go to court; disputes must be arbitrated.
39
+