@medicine-wheel/ontology-core 0.2.2
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/README.md +93 -0
- package/dist/constants.d.ts +28 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +152 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/queries.d.ts +88 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +218 -0
- package/dist/queries.js.map +1 -0
- package/dist/schemas.d.ts +697 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +193 -0
- package/dist/schemas.js.map +1 -0
- package/dist/types.d.ts +363 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -0
- package/dist/vocabulary.d.ts +143 -0
- package/dist/vocabulary.d.ts.map +1 -0
- package/dist/vocabulary.js +185 -0
- package/dist/vocabulary.js.map +1 -0
- package/package.json +78 -0
package/dist/queries.js
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @medicine-wheel/ontology-core — Semantic Query Helpers
|
|
4
|
+
*
|
|
5
|
+
* Functions for traversing relational webs, computing Wilson alignment
|
|
6
|
+
* metrics, and checking OCAP® compliance. These helpers operate on
|
|
7
|
+
* in-memory collections — the storage layer (Redis, etc.) is external.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.nodesByDirection = nodesByDirection;
|
|
11
|
+
exports.nodesByType = nodesByType;
|
|
12
|
+
exports.nodeById = nodeById;
|
|
13
|
+
exports.relationsForNode = relationsForNode;
|
|
14
|
+
exports.relationsByType = relationsByType;
|
|
15
|
+
exports.neighborIds = neighborIds;
|
|
16
|
+
exports.traverseRelationalWeb = traverseRelationalWeb;
|
|
17
|
+
exports.computeWilsonAlignment = computeWilsonAlignment;
|
|
18
|
+
exports.aggregateWilsonAlignment = aggregateWilsonAlignment;
|
|
19
|
+
exports.cycleWilsonAlignment = cycleWilsonAlignment;
|
|
20
|
+
exports.findAccountabilityGaps = findAccountabilityGaps;
|
|
21
|
+
exports.checkOcapCompliance = checkOcapCompliance;
|
|
22
|
+
exports.auditOcapCompliance = auditOcapCompliance;
|
|
23
|
+
exports.beatsByDirection = beatsByDirection;
|
|
24
|
+
exports.beatsByAct = beatsByAct;
|
|
25
|
+
exports.allDirectionsVisited = allDirectionsVisited;
|
|
26
|
+
exports.ceremoniesByDirection = ceremoniesByDirection;
|
|
27
|
+
exports.ceremonyCounts = ceremonyCounts;
|
|
28
|
+
exports.relationalCompleteness = relationalCompleteness;
|
|
29
|
+
// ── Node Queries ────────────────────────────────────────────────────────────
|
|
30
|
+
/** Find all nodes aligned with a given direction */
|
|
31
|
+
function nodesByDirection(nodes, direction) {
|
|
32
|
+
return nodes.filter(n => n.direction === direction);
|
|
33
|
+
}
|
|
34
|
+
/** Find all nodes of a given type */
|
|
35
|
+
function nodesByType(nodes, type) {
|
|
36
|
+
return nodes.filter(n => n.type === type);
|
|
37
|
+
}
|
|
38
|
+
/** Find a node by ID */
|
|
39
|
+
function nodeById(nodes, id) {
|
|
40
|
+
return nodes.find(n => n.id === id);
|
|
41
|
+
}
|
|
42
|
+
// ── Relational Traversal ────────────────────────────────────────────────────
|
|
43
|
+
/** Get all relations connected to a given node (as source or target) */
|
|
44
|
+
function relationsForNode(relations, nodeId) {
|
|
45
|
+
return relations.filter(r => r.from_id === nodeId || r.to_id === nodeId);
|
|
46
|
+
}
|
|
47
|
+
/** Get all relations of a given type */
|
|
48
|
+
function relationsByType(relations, type) {
|
|
49
|
+
return relations.filter(r => r.relationship_type === type);
|
|
50
|
+
}
|
|
51
|
+
/** Get neighbor node IDs for a given node through its relations */
|
|
52
|
+
function neighborIds(relations, nodeId) {
|
|
53
|
+
const ids = new Set();
|
|
54
|
+
for (const r of relations) {
|
|
55
|
+
if (r.from_id === nodeId)
|
|
56
|
+
ids.add(r.to_id);
|
|
57
|
+
if (r.to_id === nodeId)
|
|
58
|
+
ids.add(r.from_id);
|
|
59
|
+
}
|
|
60
|
+
return [...ids];
|
|
61
|
+
}
|
|
62
|
+
/** Traverse the relational web from a starting node up to a given depth */
|
|
63
|
+
function traverseRelationalWeb(nodes, relations, startNodeId, maxDepth = 3) {
|
|
64
|
+
const visited = new Set();
|
|
65
|
+
const paths = [];
|
|
66
|
+
const queue = [
|
|
67
|
+
{ nodeId: startNodeId, path: [startNodeId], depth: 0 },
|
|
68
|
+
];
|
|
69
|
+
while (queue.length > 0) {
|
|
70
|
+
const { nodeId, path, depth } = queue.shift();
|
|
71
|
+
if (visited.has(nodeId) || depth > maxDepth)
|
|
72
|
+
continue;
|
|
73
|
+
visited.add(nodeId);
|
|
74
|
+
if (path.length > 1)
|
|
75
|
+
paths.push(path);
|
|
76
|
+
for (const nId of neighborIds(relations, nodeId)) {
|
|
77
|
+
if (!visited.has(nId)) {
|
|
78
|
+
queue.push({ nodeId: nId, path: [...path, nId], depth: depth + 1 });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return { visited, paths };
|
|
83
|
+
}
|
|
84
|
+
// ── Wilson Alignment Metrics ────────────────────────────────────────────────
|
|
85
|
+
/**
|
|
86
|
+
* Compute Wilson alignment score for a single accountability tracking object.
|
|
87
|
+
* Wilson's three R's (Respect, Reciprocity, Responsibility) are averaged.
|
|
88
|
+
*/
|
|
89
|
+
function computeWilsonAlignment(accountability) {
|
|
90
|
+
const { respect, reciprocity, responsibility } = accountability;
|
|
91
|
+
return (respect + reciprocity + responsibility) / 3;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Compute aggregate Wilson alignment across a collection of relations.
|
|
95
|
+
* Returns 0 if no relations exist.
|
|
96
|
+
*/
|
|
97
|
+
function aggregateWilsonAlignment(relations) {
|
|
98
|
+
if (relations.length === 0)
|
|
99
|
+
return 0;
|
|
100
|
+
const total = relations.reduce((sum, r) => sum + computeWilsonAlignment(r.accountability), 0);
|
|
101
|
+
return total / relations.length;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Compute Wilson alignment for a Medicine Wheel cycle based on its
|
|
105
|
+
* ceremonies conducted and relations mapped.
|
|
106
|
+
*/
|
|
107
|
+
function cycleWilsonAlignment(cycle, relations) {
|
|
108
|
+
if (relations.length === 0)
|
|
109
|
+
return cycle.wilson_alignment;
|
|
110
|
+
return aggregateWilsonAlignment(relations);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Identify relations with low Wilson alignment (below threshold).
|
|
114
|
+
* These represent accountability gaps requiring ceremonial attention.
|
|
115
|
+
*/
|
|
116
|
+
function findAccountabilityGaps(relations, threshold = 0.5) {
|
|
117
|
+
return relations.filter(r => computeWilsonAlignment(r.accountability) < threshold);
|
|
118
|
+
}
|
|
119
|
+
// ── OCAP® Compliance ────────────────────────────────────────────────────────
|
|
120
|
+
/**
|
|
121
|
+
* Check whether OCAP® flags meet compliance requirements.
|
|
122
|
+
* Full compliance requires: ownership specified, control specified,
|
|
123
|
+
* access not 'public' (for Indigenous data), and compliant flag true.
|
|
124
|
+
*/
|
|
125
|
+
function checkOcapCompliance(ocap) {
|
|
126
|
+
const issues = [];
|
|
127
|
+
if (!ocap.ownership || ocap.ownership.trim() === '') {
|
|
128
|
+
issues.push('Ownership not specified');
|
|
129
|
+
}
|
|
130
|
+
if (!ocap.control || ocap.control.trim() === '') {
|
|
131
|
+
issues.push('Control not specified');
|
|
132
|
+
}
|
|
133
|
+
if (!ocap.compliant) {
|
|
134
|
+
issues.push('OCAP® compliance flag not set');
|
|
135
|
+
}
|
|
136
|
+
if (ocap.consent_given === false) {
|
|
137
|
+
issues.push('Consent not given for this use');
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
compliant: issues.length === 0,
|
|
141
|
+
issues,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Check OCAP® compliance across all relations.
|
|
146
|
+
* Returns summary with overall status and per-relation issues.
|
|
147
|
+
*/
|
|
148
|
+
function auditOcapCompliance(relations) {
|
|
149
|
+
const results = relations.map(r => ({
|
|
150
|
+
relation_id: r.id,
|
|
151
|
+
...checkOcapCompliance(r.ocap),
|
|
152
|
+
}));
|
|
153
|
+
const non_compliant = results.filter(r => !r.compliant);
|
|
154
|
+
return {
|
|
155
|
+
overall_compliant: non_compliant.length === 0,
|
|
156
|
+
compliant_count: results.length - non_compliant.length,
|
|
157
|
+
non_compliant_count: non_compliant.length,
|
|
158
|
+
issues: non_compliant.map(r => ({
|
|
159
|
+
relation_id: r.relation_id,
|
|
160
|
+
issues: r.issues,
|
|
161
|
+
})),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// ── Narrative Queries ───────────────────────────────────────────────────────
|
|
165
|
+
/** Get beats for a specific direction */
|
|
166
|
+
function beatsByDirection(beats, direction) {
|
|
167
|
+
return beats.filter(b => b.direction === direction);
|
|
168
|
+
}
|
|
169
|
+
/** Get beats for a specific act number */
|
|
170
|
+
function beatsByAct(beats, act) {
|
|
171
|
+
return beats.filter(b => b.act === act);
|
|
172
|
+
}
|
|
173
|
+
/** Check whether all four directions have been visited in a set of beats */
|
|
174
|
+
function allDirectionsVisited(beats) {
|
|
175
|
+
const visited = new Set(beats.map(b => b.direction));
|
|
176
|
+
return visited.has('east') && visited.has('south') &&
|
|
177
|
+
visited.has('west') && visited.has('north');
|
|
178
|
+
}
|
|
179
|
+
// ── Ceremony Queries ────────────────────────────────────────────────────────
|
|
180
|
+
/** Get ceremonies for a specific direction */
|
|
181
|
+
function ceremoniesByDirection(ceremonies, direction) {
|
|
182
|
+
return ceremonies.filter(c => c.direction === direction);
|
|
183
|
+
}
|
|
184
|
+
/** Count ceremonies across all directions */
|
|
185
|
+
function ceremonyCounts(ceremonies) {
|
|
186
|
+
return {
|
|
187
|
+
east: ceremonies.filter(c => c.direction === 'east').length,
|
|
188
|
+
south: ceremonies.filter(c => c.direction === 'south').length,
|
|
189
|
+
west: ceremonies.filter(c => c.direction === 'west').length,
|
|
190
|
+
north: ceremonies.filter(c => c.direction === 'north').length,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
// ── Relational Completeness ─────────────────────────────────────────────────
|
|
194
|
+
/**
|
|
195
|
+
* Assess relational completeness of a node — how well connected it is
|
|
196
|
+
* across all obligation categories (human, land, spirit, future).
|
|
197
|
+
*/
|
|
198
|
+
function relationalCompleteness(nodeId, relations) {
|
|
199
|
+
const nodeRelations = relationsForNode(relations, nodeId);
|
|
200
|
+
const categories = new Set();
|
|
201
|
+
for (const r of nodeRelations) {
|
|
202
|
+
for (const o of r.obligations) {
|
|
203
|
+
categories.add(o.category);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
const allCategories = ['human', 'land', 'spirit', 'future'];
|
|
207
|
+
const missing = allCategories.filter(c => !categories.has(c));
|
|
208
|
+
const ceremonied = nodeRelations.filter(r => r.ceremony_context?.ceremony_honored).length;
|
|
209
|
+
return {
|
|
210
|
+
total_relations: nodeRelations.length,
|
|
211
|
+
obligation_categories_covered: [...categories],
|
|
212
|
+
missing_categories: missing,
|
|
213
|
+
ceremony_coverage: nodeRelations.length > 0
|
|
214
|
+
? ceremonied / nodeRelations.length
|
|
215
|
+
: 0,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}
|