eyeling 1.22.2 → 1.22.4
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/arcling/README.md +38 -167
- package/package.json +2 -3
- package/test/examples.test.js +20 -2
- package/examples/arcling/calidor/calidor.data.json +0 -79
- package/examples/arcling/calidor/calidor.expected.json +0 -94
- package/examples/arcling/calidor/calidor.model.go +0 -612
- package/examples/arcling/calidor/calidor.spec.md +0 -166
- package/examples/arcling/delfour/delfour.data.json +0 -67
- package/examples/arcling/delfour/delfour.expected.json +0 -88
- package/examples/arcling/delfour/delfour.model.go +0 -564
- package/examples/arcling/delfour/delfour.spec.md +0 -117
- package/examples/arcling/flandor/flandor.data.json +0 -106
- package/examples/arcling/flandor/flandor.expected.json +0 -98
- package/examples/arcling/flandor/flandor.model.go +0 -655
- package/examples/arcling/flandor/flandor.spec.md +0 -155
- package/examples/arcling/medior/medior.data.json +0 -96
- package/examples/arcling/medior/medior.expected.json +0 -100
- package/examples/arcling/medior/medior.model.go +0 -652
- package/examples/arcling/medior/medior.spec.md +0 -157
- package/test/arcling.test.js +0 -191
- /package/examples/output/{auroracare.n3 → auroracare.txt} +0 -0
- /package/examples/output/{bmi.n3 → bmi.txt} +0 -0
- /package/examples/output/{calidor.n3 → calidor.txt} +0 -0
- /package/examples/output/{control-system.n3 → control-system.txt} +0 -0
- /package/examples/output/{deep-taxonomy-10.n3 → deep-taxonomy-10.txt} +0 -0
- /package/examples/output/{deep-taxonomy-100.n3 → deep-taxonomy-100.txt} +0 -0
- /package/examples/output/{deep-taxonomy-1000.n3 → deep-taxonomy-1000.txt} +0 -0
- /package/examples/output/{deep-taxonomy-10000.n3 → deep-taxonomy-10000.txt} +0 -0
- /package/examples/output/{deep-taxonomy-100000.n3 → deep-taxonomy-100000.txt} +0 -0
- /package/examples/output/{delfour.n3 → delfour.txt} +0 -0
- /package/examples/output/{digital-product-passport.n3 → digital-product-passport.txt} +0 -0
- /package/examples/output/{easter.n3 → easter.txt} +0 -0
- /package/examples/output/{flandor.n3 → flandor.txt} +0 -0
- /package/examples/output/{french-cities.n3 → french-cities.txt} +0 -0
- /package/examples/output/{genetic-algorithm-knapsack.n3 → genetic-algorithm-knapsack.txt} +0 -0
- /package/examples/output/{genetic-algorithm.n3 → genetic-algorithm.txt} +0 -0
- /package/examples/output/{gps.n3 → gps.txt} +0 -0
- /package/examples/output/{interop-demo.n3 → interop-demo.txt} +0 -0
- /package/examples/output/{matrix-mechanics.n3 → matrix-mechanics.txt} +0 -0
- /package/examples/output/{medior.n3 → medior.txt} +0 -0
- /package/examples/output/{n3-speaks-for-itself.n3 → n3-speaks-for-itself.txt} +0 -0
- /package/examples/output/{odrl-dpv-ehds-risk-ranked.n3 → odrl-dpv-ehds-risk-ranked.txt} +0 -0
- /package/examples/output/{odrl-dpv-healthcare-risk-ranked.n3 → odrl-dpv-healthcare-risk-ranked.txt} +0 -0
- /package/examples/output/{odrl-dpv-risk-ranked.n3 → odrl-dpv-risk-ranked.txt} +0 -0
- /package/examples/output/{odrl-risk-mitigation.n3 → odrl-risk-mitigation.txt} +0 -0
- /package/examples/output/{odrl-risk.n3 → odrl-risk.txt} +0 -0
- /package/examples/output/{parcellocker.n3 → parcellocker.txt} +0 -0
- /package/examples/output/{pn-junction-tunneling.n3 → pn-junction-tunneling.txt} +0 -0
- /package/examples/output/{resto.n3 → resto.txt} +0 -0
- /package/examples/output/{sqrt2-cauchy.n3 → sqrt2-cauchy.txt} +0 -0
- /package/examples/output/{sqrt2-dedekind.n3 → sqrt2-dedekind.txt} +0 -0
- /package/examples/output/{sudoku.n3 → sudoku.txt} +0 -0
- /package/examples/output/{transcendental-numbers-stretched.n3 → transcendental-numbers-stretched.txt} +0 -0
- /package/examples/output/{transistor-switch.n3 → transistor-switch.txt} +0 -0
- /package/examples/output/{wind-turbine.n3 → wind-turbine.txt} +0 -0
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
# Medior — ARC Specification
|
|
2
|
-
|
|
3
|
-
## Status
|
|
4
|
-
|
|
5
|
-
This document is the **normative specification** for the Medior case. The file `medior.model.go` is the **reference Go implementation** of these clauses. The file `medior.data.json` is the **instance** evaluated in this bundle. The file `medior.expected.json` is the **conformance vector** for that instance.
|
|
6
|
-
|
|
7
|
-
## Insight Economy context
|
|
8
|
-
|
|
9
|
-
This case is a care-coordination reading of Ruben Verborgh’s [Inside the Insight Economy](https://ruben.verborgh.org/blog/2025/08/12/inside-the-insight-economy/). Its core move is that no party has to disclose the full patient record in order to coordinate after discharge. The laboratory, medication list, and admission history remain where they are. What crosses the coordination boundary is a narrow, signed, expiring insight: this patient presently merits a continuity bundle in the early post-discharge window.
|
|
10
|
-
|
|
11
|
-
The product being shared is therefore not a raw record, but a permissioned, minimal conclusion for care coordination, with reuse for insurance pricing explicitly forbidden.
|
|
12
|
-
|
|
13
|
-
## Conventions
|
|
14
|
-
|
|
15
|
-
- “iff” means “if and only if”.
|
|
16
|
-
- A clause identifier such as `R1` or `M3` is normative.
|
|
17
|
-
- A conforming implementation may be written in any language, but it shall produce the same derived values and pass/fail outcomes for the supplied instance.
|
|
18
|
-
|
|
19
|
-
## Vocabulary
|
|
20
|
-
|
|
21
|
-
**V1. Care region** is the healthcare network in which the coordination insight is used.
|
|
22
|
-
|
|
23
|
-
**V2. Post-discharge signal** is a patient-specific indicator relevant to continuity risk.
|
|
24
|
-
|
|
25
|
-
**V3. Care package** is an intervention option with cost and coverage properties.
|
|
26
|
-
|
|
27
|
-
**V4. Insight envelope** is the ordered pair `(insight, policy)` together with integrity metadata.
|
|
28
|
-
|
|
29
|
-
## Input instance
|
|
30
|
-
|
|
31
|
-
**I1.** The care region is `Flanders`.
|
|
32
|
-
|
|
33
|
-
**I2.** The estimated glomerular filtration rate is `52`.
|
|
34
|
-
|
|
35
|
-
**I3.** The active medication count is `9`.
|
|
36
|
-
|
|
37
|
-
**I4.** Admissions in the last 180 days equal `2`.
|
|
38
|
-
|
|
39
|
-
**I5.** Hours since discharge equal `18`.
|
|
40
|
-
|
|
41
|
-
**I6.** The budget cap is `€5`.
|
|
42
|
-
|
|
43
|
-
**I7.** The candidate packages are the four packages listed in `medior.data.json`.
|
|
44
|
-
|
|
45
|
-
## Derivation clauses
|
|
46
|
-
|
|
47
|
-
**R1. RenalSafetyConcern.**
|
|
48
|
-
`RenalSafetyConcern` holds iff `eGFR < 60`.
|
|
49
|
-
|
|
50
|
-
**R2. PolypharmacyRisk.**
|
|
51
|
-
`PolypharmacyRisk` holds iff `activeMedicationCount ≥ 8`.
|
|
52
|
-
|
|
53
|
-
**R3. ReadmissionHistory.**
|
|
54
|
-
`ReadmissionHistory` holds iff `admissionsLast180Days ≥ 1`.
|
|
55
|
-
|
|
56
|
-
**R4. RecentDischargeWindow.**
|
|
57
|
-
`RecentDischargeWindow` holds iff `hoursSinceDischarge ≤ 48`.
|
|
58
|
-
|
|
59
|
-
**R5. ActiveNeedCount.**
|
|
60
|
-
`ActiveNeedCount` is the number of true predicates among `RenalSafetyConcern`, `PolypharmacyRisk`, `ReadmissionHistory`, and `RecentDischargeWindow`.
|
|
61
|
-
|
|
62
|
-
**R6. NeedsContinuityBundle.**
|
|
63
|
-
`NeedsContinuityBundle` holds iff `ActiveNeedCount ≥ 3`.
|
|
64
|
-
|
|
65
|
-
## Selection clauses
|
|
66
|
-
|
|
67
|
-
**S1. Eligible(p).**
|
|
68
|
-
A package `p` is eligible iff:
|
|
69
|
-
|
|
70
|
-
1. `p.costEUR ≤ budget.maxEUR`; and
|
|
71
|
-
2. for every active need, `p` covers that need.
|
|
72
|
-
|
|
73
|
-
**S2. RecommendedPackage.**
|
|
74
|
-
`RecommendedPackage` is the eligible package with minimum `costEUR`.
|
|
75
|
-
|
|
76
|
-
**S3. No-package fallback.**
|
|
77
|
-
If no eligible package exists, the recommendation is `None`.
|
|
78
|
-
|
|
79
|
-
## Governance clauses
|
|
80
|
-
|
|
81
|
-
**G1. AuthorizedUse.**
|
|
82
|
-
`AuthorizedUse` holds iff:
|
|
83
|
-
|
|
84
|
-
1. the requested action is `odrl:use`;
|
|
85
|
-
2. the requested purpose is `care_coordination`; and
|
|
86
|
-
3. the authorization time is not later than the expiry time.
|
|
87
|
-
|
|
88
|
-
**G2. InsurancePricingProhibited.**
|
|
89
|
-
`InsurancePricingProhibited` holds iff the policy prohibits distribution for purpose `insurance_pricing`.
|
|
90
|
-
|
|
91
|
-
**G3. DutyTimely.**
|
|
92
|
-
`DutyTimely` holds iff the duty-performance time is not later than the expiry time.
|
|
93
|
-
|
|
94
|
-
## Integrity and minimization clauses
|
|
95
|
-
|
|
96
|
-
**M1. CanonicalEnvelope.**
|
|
97
|
-
The canonical envelope string is the stable JSON serialization of the ordered pair `(insight, policy)`, with object keys sorted lexicographically at every level.
|
|
98
|
-
|
|
99
|
-
**M2. PayloadHashMatches.**
|
|
100
|
-
`PayloadHashMatches` holds iff `SHA-256(CanonicalEnvelope) = declaredPayloadHashSHA256`.
|
|
101
|
-
|
|
102
|
-
**M3. SignatureVerifies.**
|
|
103
|
-
`SignatureVerifies` holds iff the declared HMAC verifies under the agreed verification mode.
|
|
104
|
-
|
|
105
|
-
**M4. MinimizationRespected.**
|
|
106
|
-
`MinimizationRespected` holds iff the serialized insight contains none of the forbidden terms: `name`, `address`, `ssn`, `fullrecord`, `genome`.
|
|
107
|
-
|
|
108
|
-
**M5. ScopeComplete.**
|
|
109
|
-
`ScopeComplete` holds iff the insight contains `scopeDevice`, `scopeEvent`, and `expiresAt`.
|
|
110
|
-
|
|
111
|
-
## Output contract
|
|
112
|
-
|
|
113
|
-
**O1. Answer.**
|
|
114
|
-
A conforming renderer shall expose:
|
|
115
|
-
|
|
116
|
-
- case name
|
|
117
|
-
- region
|
|
118
|
-
- metric
|
|
119
|
-
- active need count
|
|
120
|
-
- threshold
|
|
121
|
-
- recommended package
|
|
122
|
-
- budget cap
|
|
123
|
-
- package cost
|
|
124
|
-
- payload hash
|
|
125
|
-
- envelope HMAC
|
|
126
|
-
|
|
127
|
-
**O2. Reason Why.**
|
|
128
|
-
A conforming renderer shall explain which predicates hold and why the package was selected.
|
|
129
|
-
|
|
130
|
-
**O3. Check.**
|
|
131
|
-
A conforming renderer shall expose a named PASS/FAIL outcome for each of:
|
|
132
|
-
|
|
133
|
-
- payloadHashMatches
|
|
134
|
-
- signatureVerifies
|
|
135
|
-
- thresholdReached
|
|
136
|
-
- scopeComplete
|
|
137
|
-
- minimizationRespected
|
|
138
|
-
- authorizationAllowed
|
|
139
|
-
- dutyTimely
|
|
140
|
-
- insurancePricingProhibited
|
|
141
|
-
- packageWithinBudget
|
|
142
|
-
- packageCoversAllActiveNeeds
|
|
143
|
-
- lowestCostEligiblePackageChosen
|
|
144
|
-
|
|
145
|
-
## Reference outcome for this instance
|
|
146
|
-
|
|
147
|
-
For the supplied instance:
|
|
148
|
-
|
|
149
|
-
- `RenalSafetyConcern = true`
|
|
150
|
-
- `PolypharmacyRisk = true`
|
|
151
|
-
- `ReadmissionHistory = true`
|
|
152
|
-
- `RecentDischargeWindow = true`
|
|
153
|
-
- `ActiveNeedCount = 4`
|
|
154
|
-
- `NeedsContinuityBundle = true`
|
|
155
|
-
- `RecommendedPackage = "Medior Continuity Pulse"`
|
|
156
|
-
|
|
157
|
-
The expected ARC report and integrity values are recorded in `medior.expected.json`.
|
package/test/arcling.test.js
DELETED
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const fs = require('node:fs');
|
|
4
|
-
const path = require('node:path');
|
|
5
|
-
const assert = require('node:assert/strict');
|
|
6
|
-
const { execFileSync } = require('node:child_process');
|
|
7
|
-
|
|
8
|
-
const TTY = process.stdout.isTTY;
|
|
9
|
-
const C = TTY
|
|
10
|
-
? { g: '\u001b[32m', r: '\u001b[31m', y: '\u001b[33m', dim: '\u001b[2m', n: '\u001b[0m' }
|
|
11
|
-
: { g: '', r: '', y: '', dim: '', n: '' };
|
|
12
|
-
|
|
13
|
-
const ROOT = path.resolve(__dirname, '..');
|
|
14
|
-
const ARCLING_DIR = path.join(ROOT, 'examples', 'arcling');
|
|
15
|
-
const BIN_DIR_NAME = '.arcling-bin';
|
|
16
|
-
|
|
17
|
-
function msTag(ms) {
|
|
18
|
-
return `${C.dim}(${ms} ms)${C.n}`;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function ok(msg) {
|
|
22
|
-
console.log(`${C.g}OK ${C.n} ${msg}`);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function info(msg) {
|
|
26
|
-
console.log(`${C.y}==${C.n} ${msg}`);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function fail(msg) {
|
|
30
|
-
console.error(`${C.r}FAIL${C.n} ${msg}`);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function isDirectory(p) {
|
|
34
|
-
try {
|
|
35
|
-
return fs.statSync(p).isDirectory();
|
|
36
|
-
} catch {
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function readJson(filePath) {
|
|
42
|
-
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function listCaseDirs(baseDir) {
|
|
46
|
-
if (!isDirectory(baseDir)) {
|
|
47
|
-
throw new Error(`Arcling directory not found: ${baseDir}`);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return fs
|
|
51
|
-
.readdirSync(baseDir)
|
|
52
|
-
.map((name) => path.join(baseDir, name))
|
|
53
|
-
.filter(isDirectory)
|
|
54
|
-
.sort();
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function findModelPath(caseDir, base) {
|
|
58
|
-
const candidates = [path.join(caseDir, `${base}.model.go`), path.join(caseDir, `${base}.model.mjs`)];
|
|
59
|
-
|
|
60
|
-
for (const candidate of candidates) {
|
|
61
|
-
if (fs.existsSync(candidate)) return candidate;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
throw new Error(`Missing required arcling model artifact for ${base}`);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function findCaseFiles(caseDir) {
|
|
68
|
-
const base = path.basename(caseDir);
|
|
69
|
-
const modelPath = findModelPath(caseDir, base);
|
|
70
|
-
const dataPath = path.join(caseDir, `${base}.data.json`);
|
|
71
|
-
const expectedPath = path.join(caseDir, `${base}.expected.json`);
|
|
72
|
-
|
|
73
|
-
for (const required of [modelPath, dataPath, expectedPath]) {
|
|
74
|
-
if (!fs.existsSync(required)) {
|
|
75
|
-
throw new Error(`Missing required arcling artifact: ${required}`);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return { base, modelPath, dataPath, expectedPath };
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function binaryExtension() {
|
|
83
|
-
return process.platform === 'win32' ? '.exe' : '';
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function binaryPathFor(caseDir, base) {
|
|
87
|
-
return path.join(caseDir, BIN_DIR_NAME, `${base}.model${binaryExtension()}`);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
function ensureGoBinary(modelPath, caseDir, base) {
|
|
91
|
-
const outDir = path.join(caseDir, BIN_DIR_NAME);
|
|
92
|
-
const outPath = binaryPathFor(caseDir, base);
|
|
93
|
-
|
|
94
|
-
fs.mkdirSync(outDir, { recursive: true });
|
|
95
|
-
|
|
96
|
-
const modelStat = fs.statSync(modelPath);
|
|
97
|
-
const needsBuild = !fs.existsSync(outPath) || fs.statSync(outPath).mtimeMs < modelStat.mtimeMs;
|
|
98
|
-
|
|
99
|
-
if (needsBuild) {
|
|
100
|
-
execFileSync('go', ['build', '-o', outPath, modelPath], {
|
|
101
|
-
cwd: caseDir,
|
|
102
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
103
|
-
encoding: 'utf8',
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return outPath;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
function runModelJson(modelPath, dataPath, caseDir, base) {
|
|
111
|
-
const ext = path.extname(modelPath);
|
|
112
|
-
|
|
113
|
-
if (ext === '.go') {
|
|
114
|
-
const binaryPath = ensureGoBinary(modelPath, caseDir, base);
|
|
115
|
-
const stdout = execFileSync(binaryPath, [dataPath, '--json'], {
|
|
116
|
-
cwd: caseDir,
|
|
117
|
-
encoding: 'utf8',
|
|
118
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
119
|
-
});
|
|
120
|
-
return JSON.parse(stdout);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
if (ext === '.mjs') {
|
|
124
|
-
const stdout = execFileSync(process.execPath, [modelPath, dataPath, '--json'], {
|
|
125
|
-
cwd: caseDir,
|
|
126
|
-
encoding: 'utf8',
|
|
127
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
128
|
-
});
|
|
129
|
-
return JSON.parse(stdout);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
throw new Error(`Unsupported arcling model extension: ${modelPath}`);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
function assertArcTextShape(arcText, label) {
|
|
136
|
-
assert.equal(typeof arcText, 'string', `${label}: arcText must be a string`);
|
|
137
|
-
assert.match(arcText, /=== Answer ===/, `${label}: missing Answer section`);
|
|
138
|
-
assert.match(arcText, /=== Reason Why ===/, `${label}: missing Reason Why section`);
|
|
139
|
-
assert.match(arcText, /=== Check ===/, `${label}: missing Check section`);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
async function runCase(caseDir) {
|
|
143
|
-
const { base, modelPath, dataPath, expectedPath } = findCaseFiles(caseDir);
|
|
144
|
-
const expected = readJson(expectedPath);
|
|
145
|
-
const actual = runModelJson(modelPath, dataPath, caseDir, base);
|
|
146
|
-
|
|
147
|
-
assert.equal(actual.allChecksPass, true, `${base}: expected allChecksPass === true`);
|
|
148
|
-
assertArcTextShape(actual.arcText, base);
|
|
149
|
-
assert.deepStrictEqual(actual, expected, `${base}: actual result does not match expected JSON`);
|
|
150
|
-
|
|
151
|
-
return { base, modelPath };
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
async function main() {
|
|
155
|
-
const suiteStart = Date.now();
|
|
156
|
-
const caseDirs = listCaseDirs(ARCLING_DIR);
|
|
157
|
-
|
|
158
|
-
if (caseDirs.length === 0) {
|
|
159
|
-
throw new Error(`No arcling cases found in ${ARCLING_DIR}`);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
info(`arcling tests: ${caseDirs.length} case(s)`);
|
|
163
|
-
|
|
164
|
-
let passed = 0;
|
|
165
|
-
|
|
166
|
-
for (let i = 0; i < caseDirs.length; i += 1) {
|
|
167
|
-
const start = Date.now();
|
|
168
|
-
const caseDir = caseDirs[i];
|
|
169
|
-
const label = path.basename(caseDir);
|
|
170
|
-
|
|
171
|
-
try {
|
|
172
|
-
await runCase(caseDir);
|
|
173
|
-
passed += 1;
|
|
174
|
-
ok(`${i + 1}. ${label} ${msTag(Date.now() - start)}`);
|
|
175
|
-
} catch (error) {
|
|
176
|
-
fail(`${i + 1}. ${label} ${msTag(Date.now() - start)}`);
|
|
177
|
-
fail(error.stack || String(error));
|
|
178
|
-
process.exit(2);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
console.log('');
|
|
183
|
-
const suiteMs = Date.now() - suiteStart;
|
|
184
|
-
info(`Total elapsed: ${suiteMs} ms (${(suiteMs / 1000).toFixed(2)} s)`);
|
|
185
|
-
info(`all ${passed} arcling test(s) passed`);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
main().catch((error) => {
|
|
189
|
-
fail(error.stack || String(error));
|
|
190
|
-
process.exit(2);
|
|
191
|
-
});
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/examples/output/{odrl-dpv-healthcare-risk-ranked.n3 → odrl-dpv-healthcare-risk-ranked.txt}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|