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.
- package/examples/odrl-dpv-ehds-risk-ranked.n3 +4 -4
- package/examples/odrl-dpv-healthcare-risk-ranked.n3 +4 -4
- package/examples/odrl-dpv-risk-ranked.n3 +4 -4
- package/examples/odrl-risk-mitigation.n3 +5 -5
- package/examples/odrl-risk.n3 +3 -3
- package/examples/output/odrl-dpv-ehds-risk-ranked.md +35 -14
- package/examples/output/odrl-dpv-healthcare-risk-ranked.md +27 -11
- package/examples/output/odrl-dpv-risk-ranked.md +37 -15
- package/examples/output/odrl-risk-mitigation.md +64 -17
- package/examples/output/odrl-risk.md +33 -5
- package/examples/output/transitive-closure.n3 +2699 -0
- package/examples/transitive-closure.n3 +144 -0
- package/package.json +1 -1
|
@@ -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)\
|
|
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
|
-
( "
|
|
432
|
-
?score ?lvl ?sev ?
|
|
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
|
-
( "
|
|
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)\
|
|
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
|
-
( "
|
|
551
|
-
?score ?lvl ?sev ?
|
|
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
|
-
( "
|
|
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\
|
|
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
|
-
( "
|
|
436
|
-
?score ?lvl ?sev ?
|
|
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
|
-
( "
|
|
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
|
|
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
|
|
811
|
-
?rank ?
|
|
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
|
|
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
|
-
( "
|
|
862
|
+
( "- **%s. Clause %s — %s** (score `%s`): %s\n"
|
|
863
863
|
?rank ?cid ?title ?score ?fixText
|
|
864
864
|
) string:format ?line.
|
|
865
865
|
}
|
package/examples/odrl-risk.n3
CHANGED
|
@@ -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
|
|
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
|
|
432
|
-
?rank ?
|
|
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
|
-
|
|
12
|
-
|
|
9
|
+
**Agreement:** EHDS Secondary Use Agreement (example)
|
|
10
|
+
**Profile:** Example patient profile (EHDS rights expectations)
|
|
13
11
|
|
|
14
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
12
|
-
|
|
9
|
+
**Agreement:** Example Healthcare & Life-Sciences Data Use Agreement
|
|
10
|
+
**Profile:** Example patient profile
|
|
13
11
|
|
|
14
|
-
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
12
|
-
|
|
9
|
+
**Agreement:** Example Agreement
|
|
10
|
+
**Profile:** Example consumer profile
|
|
13
11
|
|
|
14
|
-
|
|
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
|
-
|
|
20
|
-
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
7
|
+
## Risk report
|
|
8
|
+
|
|
9
|
+
**Agreement:** Example Platform Agreement (with fixes)
|
|
10
|
+
**Profile:** Carol (example consumer)
|
|
11
|
+
|
|
12
|
+
### 1. Clause D6 — Provider 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
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
+
|