@actuarial-ts/core 0.5.0 → 0.6.0

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.
Files changed (87) hide show
  1. package/README.md +65 -226
  2. package/dist/casualtyDiagnostics.d.ts +19 -49
  3. package/dist/casualtyDiagnostics.d.ts.map +1 -1
  4. package/dist/casualtyDiagnostics.js +84 -116
  5. package/dist/casualtyDiagnostics.js.map +1 -1
  6. package/dist/diagnosticAggregation.d.ts +29 -0
  7. package/dist/diagnosticAggregation.d.ts.map +1 -0
  8. package/dist/diagnosticAggregation.js +50 -0
  9. package/dist/diagnosticAggregation.js.map +1 -0
  10. package/dist/diagnosticDefinitions.d.ts +286 -0
  11. package/dist/diagnosticDefinitions.d.ts.map +1 -0
  12. package/dist/diagnosticDefinitions.js +1026 -0
  13. package/dist/diagnosticDefinitions.js.map +1 -0
  14. package/dist/diagnosticDerivations.d.ts +12 -0
  15. package/dist/diagnosticDerivations.d.ts.map +1 -0
  16. package/dist/diagnosticDerivations.js +80 -0
  17. package/dist/diagnosticDerivations.js.map +1 -0
  18. package/dist/diagnosticExposure.d.ts +51 -0
  19. package/dist/diagnosticExposure.d.ts.map +1 -0
  20. package/dist/diagnosticExposure.js +65 -0
  21. package/dist/diagnosticExposure.js.map +1 -0
  22. package/dist/diagnosticExpressions.d.ts +56 -0
  23. package/dist/diagnosticExpressions.d.ts.map +1 -0
  24. package/dist/diagnosticExpressions.js +104 -0
  25. package/dist/diagnosticExpressions.js.map +1 -0
  26. package/dist/diagnosticFormulas.d.ts +195 -0
  27. package/dist/diagnosticFormulas.d.ts.map +1 -0
  28. package/dist/diagnosticFormulas.js +85 -0
  29. package/dist/diagnosticFormulas.js.map +1 -0
  30. package/dist/diagnosticIdentity.d.ts +237 -0
  31. package/dist/diagnosticIdentity.d.ts.map +1 -0
  32. package/dist/diagnosticIdentity.js +454 -0
  33. package/dist/diagnosticIdentity.js.map +1 -0
  34. package/dist/diagnosticPeriods.d.ts +16 -0
  35. package/dist/diagnosticPeriods.d.ts.map +1 -0
  36. package/dist/diagnosticPeriods.js +98 -0
  37. package/dist/diagnosticPeriods.js.map +1 -0
  38. package/dist/diagnosticPreparation.d.ts +98 -0
  39. package/dist/diagnosticPreparation.d.ts.map +1 -0
  40. package/dist/diagnosticPreparation.js +169 -0
  41. package/dist/diagnosticPreparation.js.map +1 -0
  42. package/dist/diagnosticReview.d.ts +44 -0
  43. package/dist/diagnosticReview.d.ts.map +1 -0
  44. package/dist/diagnosticReview.js +84 -0
  45. package/dist/diagnosticReview.js.map +1 -0
  46. package/dist/diagnosticRules.d.ts +32 -0
  47. package/dist/diagnosticRules.d.ts.map +1 -0
  48. package/dist/diagnosticRules.js +32 -0
  49. package/dist/diagnosticRules.js.map +1 -0
  50. package/dist/diagnosticRunner.d.ts +85 -0
  51. package/dist/diagnosticRunner.d.ts.map +1 -0
  52. package/dist/diagnosticRunner.js +117 -0
  53. package/dist/diagnosticRunner.js.map +1 -0
  54. package/dist/index.d.ts +24 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +12 -1
  57. package/dist/index.js.map +1 -1
  58. package/dist/types.d.ts +17 -0
  59. package/dist/types.d.ts.map +1 -1
  60. package/dist/types.js +114 -0
  61. package/dist/types.js.map +1 -1
  62. package/dist/version.d.ts +3 -0
  63. package/dist/version.d.ts.map +1 -0
  64. package/dist/version.js +3 -0
  65. package/dist/version.js.map +1 -0
  66. package/package.json +2 -2
  67. package/src/casualtyDiagnostics.ts +79 -189
  68. package/src/diagnosticAggregation.ts +79 -0
  69. package/src/diagnosticDefinitions.ts +1375 -0
  70. package/src/diagnosticDerivations.ts +89 -0
  71. package/src/diagnosticExposure.ts +91 -0
  72. package/src/diagnosticExpressions.ts +173 -0
  73. package/src/diagnosticFormulas.ts +150 -0
  74. package/src/diagnosticIdentity.ts +767 -0
  75. package/src/diagnosticPeriods.ts +117 -0
  76. package/src/diagnosticPreparation.ts +233 -0
  77. package/src/diagnosticReview.ts +91 -0
  78. package/src/diagnosticRules.ts +69 -0
  79. package/src/diagnosticRunner.ts +110 -0
  80. package/src/index.ts +156 -1
  81. package/src/types.ts +161 -0
  82. package/src/version.ts +2 -0
  83. package/dist/metricDiagnostics.d.ts +0 -212
  84. package/dist/metricDiagnostics.d.ts.map +0 -1
  85. package/dist/metricDiagnostics.js +0 -627
  86. package/dist/metricDiagnostics.js.map +0 -1
  87. package/src/metricDiagnostics.ts +0 -876
@@ -0,0 +1,454 @@
1
+ import { canonicalJson, fnv1a64 } from "./canonical.js";
2
+ function compareCodeUnits(left, right) {
3
+ return left === right ? 0 : left < right ? -1 : 1;
4
+ }
5
+ function sortedUnique(values) {
6
+ return [...new Set(values)].sort(compareCodeUnits);
7
+ }
8
+ function sortedRecord(entries) {
9
+ const result = Object.create(null);
10
+ for (const [key, value] of [...entries].sort(([left], [right]) => compareCodeUnits(left, right))) {
11
+ result[key] = value;
12
+ }
13
+ return result;
14
+ }
15
+ function normalizeJsonValue(value) {
16
+ if (typeof value === "number" && Object.is(value, -0))
17
+ return 0;
18
+ if (Array.isArray(value))
19
+ return value.map((item) => normalizeJsonValue(item));
20
+ if (value !== null && typeof value === "object") {
21
+ return sortedRecord(Object.entries(value).map(([key, item]) => [key, normalizeJsonValue(item)]));
22
+ }
23
+ return value;
24
+ }
25
+ function deepFreeze(value, seen = new WeakSet()) {
26
+ if (value === null || typeof value !== "object")
27
+ return value;
28
+ if (seen.has(value))
29
+ return value;
30
+ seen.add(value);
31
+ for (const child of Object.values(value))
32
+ deepFreeze(child, seen);
33
+ return Object.freeze(value);
34
+ }
35
+ function attributes(value) {
36
+ return sortedRecord(Object.entries(value ?? {}).map(([key, item]) => [key, normalizeJsonValue(item)]));
37
+ }
38
+ function normalizeLimitation(limitation) {
39
+ if (limitation.kind === "unlimited")
40
+ return { kind: "unlimited" };
41
+ if (limitation.kind === "unknown") {
42
+ return { kind: "unknown", description: limitation.description ?? null };
43
+ }
44
+ return {
45
+ kind: limitation.kind,
46
+ attachment: Object.is(limitation.attachment, -0) ? 0 : limitation.attachment,
47
+ limit: limitation.limit !== null && Object.is(limitation.limit, -0) ? 0 : limitation.limit,
48
+ application: limitation.application,
49
+ derivation: limitation.derivation.kind === "sdk"
50
+ ? { kind: "sdk" }
51
+ : {
52
+ kind: "external",
53
+ actor: limitation.derivation.actor,
54
+ transformationRef: limitation.derivation.transformationRef,
55
+ },
56
+ };
57
+ }
58
+ function normalizeMeasureExpression(expression) {
59
+ if (expression.op === "measure")
60
+ return { op: "measure", measureId: expression.measureId };
61
+ if (expression.op === "claim-layer") {
62
+ return {
63
+ op: "claim-layer",
64
+ measureId: expression.measureId,
65
+ attachment: Object.is(expression.attachment, -0) ? 0 : expression.attachment,
66
+ limit: expression.limit !== null && Object.is(expression.limit, -0) ? 0 : expression.limit,
67
+ };
68
+ }
69
+ if (expression.op === "subtract") {
70
+ return {
71
+ op: "subtract",
72
+ left: normalizeMeasureExpression(expression.left),
73
+ right: normalizeMeasureExpression(expression.right),
74
+ };
75
+ }
76
+ return {
77
+ op: "add",
78
+ terms: expression.terms.map((term) => normalizeMeasureExpression(term)),
79
+ };
80
+ }
81
+ function normalizeRoleExpression(expression) {
82
+ if (expression.op === "role")
83
+ return { op: "role", role: expression.role };
84
+ if (expression.op === "subtract") {
85
+ return {
86
+ op: "subtract",
87
+ left: normalizeRoleExpression(expression.left),
88
+ right: normalizeRoleExpression(expression.right),
89
+ };
90
+ }
91
+ return { op: "add", terms: expression.terms.map(normalizeRoleExpression) };
92
+ }
93
+ function normalizeTolerance(tolerance) {
94
+ return {
95
+ absolute: Object.is(tolerance?.absolute ?? 0, -0) ? 0 : (tolerance?.absolute ?? 0),
96
+ relative: Object.is(tolerance?.relative ?? 0, -0) ? 0 : (tolerance?.relative ?? 0),
97
+ };
98
+ }
99
+ function normalizeRuleOperand(operand) {
100
+ if (operand.source === "measure") {
101
+ return { source: "measure", expression: normalizeMeasureExpression(operand.expression) };
102
+ }
103
+ if (operand.source === "calculation")
104
+ return { source: "calculation", field: operand.field };
105
+ return { source: "constant", value: Object.is(operand.value, -0) ? 0 : operand.value };
106
+ }
107
+ function normalizeReviewOperand(operand) {
108
+ if (operand.op === "constant")
109
+ return { op: "constant", value: Object.is(operand.value, -0) ? 0 : operand.value };
110
+ return normalizeMeasureExpression(operand);
111
+ }
112
+ function normalizeReviewFilter(filter) {
113
+ return {
114
+ sourceGroups: filter.sourceGroups === undefined ? null : sortedUnique(filter.sourceGroups),
115
+ origins: filter.origins === undefined ? null : sortedUnique(filter.origins),
116
+ originFrom: filter.originFrom ?? null,
117
+ originThrough: filter.originThrough ?? null,
118
+ valuations: filter.valuations === undefined ? null : sortedUnique(filter.valuations),
119
+ valuationFrom: filter.valuationFrom ?? null,
120
+ valuationThrough: filter.valuationThrough ?? null,
121
+ minDevelopmentAge: filter.minDevelopmentAge === undefined
122
+ ? null
123
+ : Object.is(filter.minDevelopmentAge, -0) ? 0 : filter.minDevelopmentAge,
124
+ maxDevelopmentAge: filter.maxDevelopmentAge === undefined
125
+ ? null
126
+ : Object.is(filter.maxDevelopmentAge, -0) ? 0 : filter.maxDevelopmentAge,
127
+ };
128
+ }
129
+ function normalizePeriodAxis(axis) {
130
+ if (axis.kind === "calendar") {
131
+ return {
132
+ kind: "calendar",
133
+ originCadence: axis.originCadence,
134
+ valuationCadence: axis.valuationCadence,
135
+ originAnchor: axis.originAnchor,
136
+ valuationAnchor: axis.valuationAnchor,
137
+ ageUnit: "month",
138
+ ageOffset: Object.is(axis.ageOffset, -0) ? 0 : axis.ageOffset,
139
+ };
140
+ }
141
+ const coordinates = (values) => values.map((coordinate) => ({
142
+ label: coordinate.label,
143
+ aliases: sortedUnique(coordinate.aliases ?? []),
144
+ coordinate: Object.is(coordinate.coordinate, -0) ? 0 : coordinate.coordinate,
145
+ })).sort((left, right) => left.coordinate - right.coordinate || compareCodeUnits(left.label, right.label));
146
+ return {
147
+ kind: "ordered",
148
+ id: axis.id,
149
+ version: axis.version,
150
+ ageUnit: axis.ageUnit,
151
+ ageOffset: Object.is(axis.ageOffset, -0) ? 0 : axis.ageOffset,
152
+ origins: coordinates(axis.origins),
153
+ valuations: coordinates(axis.valuations),
154
+ };
155
+ }
156
+ function topologicalDerivations(derivations) {
157
+ const byOutput = new Map(derivations.map((derivation) => [derivation.outputMeasureId, derivation]));
158
+ const remaining = new Map(derivations.map((derivation) => [derivation.id, derivation]));
159
+ const emittedOutputs = new Set();
160
+ const ordered = [];
161
+ while (remaining.size > 0) {
162
+ const ready = [...remaining.values()].filter((derivation) => expressionDependencies(derivation.expression)
163
+ .filter((id) => byOutput.has(id))
164
+ .every((id) => emittedOutputs.has(id))).sort((left, right) => compareCodeUnits(left.id, right.id));
165
+ if (ready.length === 0)
166
+ return [...derivations].sort((left, right) => compareCodeUnits(left.id, right.id));
167
+ for (const derivation of ready) {
168
+ ordered.push(derivation);
169
+ emittedOutputs.add(derivation.outputMeasureId);
170
+ remaining.delete(derivation.id);
171
+ }
172
+ }
173
+ return ordered;
174
+ }
175
+ function normalizeReviewRule(rule) {
176
+ const base = {
177
+ id: rule.id,
178
+ code: rule.code,
179
+ description: rule.description,
180
+ severity: rule.severity,
181
+ missingInput: rule.missingInput,
182
+ tolerance: normalizeTolerance(rule.tolerance),
183
+ };
184
+ if (rule.kind === "compare") {
185
+ return {
186
+ ...base,
187
+ kind: "compare",
188
+ when: {
189
+ left: normalizeReviewOperand(rule.when.left),
190
+ operator: rule.when.operator,
191
+ right: normalizeReviewOperand(rule.when.right),
192
+ },
193
+ };
194
+ }
195
+ if (rule.kind === "reconcile") {
196
+ return {
197
+ ...base,
198
+ kind: "reconcile",
199
+ actual: normalizeMeasureExpression(rule.actual),
200
+ expected: normalizeReviewOperand(rule.expected),
201
+ };
202
+ }
203
+ if (rule.kind === "monotonic") {
204
+ return {
205
+ ...base,
206
+ kind: "monotonic",
207
+ expression: normalizeMeasureExpression(rule.expression),
208
+ direction: rule.direction,
209
+ };
210
+ }
211
+ if (rule.kind === "layer-order") {
212
+ return {
213
+ ...base,
214
+ kind: "layer-order",
215
+ narrower: normalizeMeasureExpression(rule.narrower),
216
+ broader: normalizeMeasureExpression(rule.broader),
217
+ comparability: normalizeJsonValue(rule.comparability),
218
+ };
219
+ }
220
+ return {
221
+ ...base,
222
+ kind: "control-total",
223
+ expression: normalizeMeasureExpression(rule.expression),
224
+ expected: Object.is(rule.expected, -0) ? 0 : rule.expected,
225
+ filter: rule.filter === undefined ? null : normalizeReviewFilter(rule.filter),
226
+ projection: normalizeJsonValue(rule.projection),
227
+ };
228
+ }
229
+ export function normalizeDiagnosticDefinition(definition) {
230
+ const normalized = {
231
+ diagnosticDefinitionVersion: "1.0.0",
232
+ id: definition.id,
233
+ version: definition.version,
234
+ lossRowGrain: definition.lossRowGrain,
235
+ measures: definition.measures.map((measure) => ({
236
+ id: measure.id,
237
+ displayName: measure.displayName,
238
+ description: measure.description,
239
+ source: measure.source,
240
+ kind: measure.kind,
241
+ unit: measure.unit,
242
+ developmentSemantics: measure.developmentSemantics,
243
+ aggregation: "sum",
244
+ missing: measure.missing,
245
+ basisId: measure.basisId ?? null,
246
+ countPopulationId: measure.countPopulationId ?? null,
247
+ exposureBasisId: measure.exposureBasisId ?? null,
248
+ exposureTiming: measure.exposureTiming ?? null,
249
+ })).sort((left, right) => compareCodeUnits(left.id, right.id)),
250
+ countPopulations: definition.countPopulations.map((population) => ({
251
+ id: population.id,
252
+ displayName: population.displayName,
253
+ subject: population.subject,
254
+ unit: population.unit,
255
+ description: population.description,
256
+ attributes: attributes(population.attributes),
257
+ })).sort((left, right) => compareCodeUnits(left.id, right.id)),
258
+ exposureBases: definition.exposureBases.map((basis) => ({
259
+ id: basis.id,
260
+ displayName: basis.displayName,
261
+ basis: basis.basis,
262
+ unit: basis.unit,
263
+ description: basis.description,
264
+ sourceDescription: basis.sourceDescription ?? null,
265
+ attributes: attributes(basis.attributes),
266
+ })).sort((left, right) => compareCodeUnits(left.id, right.id)),
267
+ amountBases: definition.amountBases.map((basis) => ({
268
+ id: basis.id,
269
+ displayName: basis.displayName,
270
+ currency: basis.currency,
271
+ perspective: basis.perspective,
272
+ components: basis.components.map((component) => ({
273
+ id: component.id,
274
+ treatment: component.treatment,
275
+ limitation: normalizeLimitation(component.limitation),
276
+ })).sort((left, right) => compareCodeUnits(left.id, right.id)),
277
+ sourceDescription: basis.sourceDescription ?? null,
278
+ attributes: attributes(basis.attributes),
279
+ })).sort((left, right) => compareCodeUnits(left.id, right.id)),
280
+ derivedMeasures: topologicalDerivations(definition.derivedMeasures).map((derivation) => ({
281
+ id: derivation.id,
282
+ outputMeasureId: derivation.outputMeasureId,
283
+ expression: normalizeMeasureExpression(derivation.expression),
284
+ })),
285
+ formulas: definition.formulas.map((formula) => ({
286
+ id: formula.id,
287
+ version: formula.version,
288
+ roles: sortedRecord(Object.entries(formula.roles).map(([name, role]) => [name, {
289
+ kind: role.kind,
290
+ compatibilityGroup: role.compatibilityGroup ?? null,
291
+ developmentSemantics: role.developmentSemantics ?? null,
292
+ }])),
293
+ numerator: normalizeRoleExpression(formula.numerator),
294
+ denominator: normalizeRoleExpression(formula.denominator),
295
+ denominatorPolicy: "positive-or-null",
296
+ })).sort((left, right) => compareCodeUnits(left.id, right.id)),
297
+ instances: definition.instances.map((instance) => ({
298
+ id: instance.id,
299
+ version: instance.version,
300
+ formulaId: instance.formulaId,
301
+ bindings: sortedRecord(Object.entries(instance.bindings).map(([role, expression]) => [role, normalizeMeasureExpression(expression)])),
302
+ presentation: {
303
+ displayName: instance.presentation.displayName,
304
+ description: instance.presentation.description,
305
+ displayUnit: instance.presentation.displayUnit,
306
+ scale: Object.is(instance.presentation.scale, -0) ? 0 : instance.presentation.scale,
307
+ numeratorLabel: instance.presentation.numeratorLabel,
308
+ denominatorLabel: instance.presentation.denominatorLabel,
309
+ },
310
+ rules: instance.rules.map((rule) => ({
311
+ id: rule.id,
312
+ code: rule.code,
313
+ message: rule.message,
314
+ severity: rule.severity,
315
+ when: {
316
+ left: normalizeRuleOperand(rule.when.left),
317
+ operator: rule.when.operator,
318
+ right: normalizeRuleOperand(rule.when.right),
319
+ tolerance: normalizeTolerance(rule.when.tolerance),
320
+ },
321
+ })),
322
+ })),
323
+ reviewRules: definition.reviewRules.map(normalizeReviewRule),
324
+ periodAxis: normalizePeriodAxis(definition.periodAxis),
325
+ };
326
+ return deepFreeze(normalized);
327
+ }
328
+ export function normalizeDiagnosticSourceLocation(source) {
329
+ return deepFreeze({
330
+ artifactId: source.artifactId,
331
+ sourceFile: source.sourceFile ?? null,
332
+ sourceSheet: source.sourceSheet ?? null,
333
+ sourceRow: source.sourceRow === undefined ? null : Object.is(source.sourceRow, -0) ? 0 : source.sourceRow,
334
+ sourceCell: source.sourceCell ?? null,
335
+ });
336
+ }
337
+ function expressionDependencies(expression) {
338
+ if (expression.op === "measure" || expression.op === "claim-layer")
339
+ return [expression.measureId];
340
+ if (expression.op === "subtract")
341
+ return sortedUnique([
342
+ ...expressionDependencies(expression.left),
343
+ ...expressionDependencies(expression.right),
344
+ ]);
345
+ return sortedUnique(expression.terms.flatMap(expressionDependencies));
346
+ }
347
+ function ruleMeasureDependencies(operand) {
348
+ return operand.source === "measure" ? expressionDependencies(operand.expression) : [];
349
+ }
350
+ function tag(kind, property, value) {
351
+ return `fnv1a64-jcs-v1:${fnv1a64(canonicalJson({
352
+ identityVersion: 1,
353
+ kind,
354
+ [property]: value,
355
+ }))}`;
356
+ }
357
+ export function buildDiagnosticIdentities(definition) {
358
+ const formulas = new Map(definition.formulas.map((formula) => [formula.id, formula]));
359
+ const measures = new Map(definition.measures.map((measure) => [measure.id, measure]));
360
+ const derivations = new Map(definition.derivedMeasures.map((derivation) => [derivation.outputMeasureId, derivation]));
361
+ const populations = new Map(definition.countPopulations.map((population) => [population.id, population]));
362
+ const exposureBases = new Map(definition.exposureBases.map((basis) => [basis.id, basis]));
363
+ const amountBases = new Map(definition.amountBases.map((basis) => [basis.id, basis]));
364
+ const formulaFingerprints = sortedRecord(definition.formulas.map((formula) => [formula.id, tag("diagnostic-formula", "formula", formula)]));
365
+ const calculationFingerprints = Object.create(null);
366
+ const calculationScopesByInstanceId = new Map();
367
+ const calculationDependenciesByInstanceId = new Map();
368
+ const evaluationDependenciesByInstanceId = new Map();
369
+ const transitiveDependencies = (roots) => {
370
+ const found = new Set();
371
+ const stack = [...roots];
372
+ while (stack.length > 0) {
373
+ const id = stack.pop();
374
+ if (found.has(id))
375
+ continue;
376
+ found.add(id);
377
+ const derivation = derivations.get(id);
378
+ if (derivation)
379
+ stack.push(...expressionDependencies(derivation.expression));
380
+ }
381
+ return [...found].sort(compareCodeUnits);
382
+ };
383
+ for (const instance of definition.instances) {
384
+ const calculationDependencies = transitiveDependencies(Object.values(instance.bindings).flatMap(expressionDependencies));
385
+ const evaluationDependencies = transitiveDependencies([
386
+ ...calculationDependencies,
387
+ ...instance.rules.flatMap((rule) => [
388
+ ...ruleMeasureDependencies(rule.when.left),
389
+ ...ruleMeasureDependencies(rule.when.right),
390
+ ]),
391
+ ]);
392
+ calculationDependenciesByInstanceId.set(instance.id, calculationDependencies);
393
+ evaluationDependenciesByInstanceId.set(instance.id, evaluationDependencies);
394
+ const selectedMeasures = calculationDependencies.map((id) => measures.get(id)).filter(Boolean);
395
+ const selectedDerivations = definition.derivedMeasures.filter((derivation) => calculationDependencies.includes(derivation.outputMeasureId));
396
+ const countPopulationIds = sortedUnique(selectedMeasures.flatMap((measure) => measure.countPopulationId === null ? [] : [measure.countPopulationId]));
397
+ const exposureBasisIds = sortedUnique(selectedMeasures.flatMap((measure) => measure.exposureBasisId === null ? [] : [measure.exposureBasisId]));
398
+ const amountBasisIds = sortedUnique(selectedMeasures.flatMap((measure) => measure.basisId === null ? [] : [measure.basisId]));
399
+ const scope = {
400
+ formulaFingerprint: formulaFingerprints[instance.formulaId],
401
+ instance: {
402
+ id: instance.id,
403
+ version: instance.version,
404
+ formulaId: instance.formulaId,
405
+ bindings: instance.bindings,
406
+ },
407
+ lossRowGrain: definition.lossRowGrain,
408
+ measures: selectedMeasures.map((measure) => ({
409
+ id: measure.id,
410
+ source: measure.source,
411
+ kind: measure.kind,
412
+ unit: measure.unit,
413
+ developmentSemantics: measure.developmentSemantics,
414
+ aggregation: "sum",
415
+ missing: measure.missing,
416
+ basisId: measure.basisId,
417
+ countPopulationId: measure.countPopulationId,
418
+ exposureBasisId: measure.exposureBasisId,
419
+ exposureTiming: measure.exposureTiming,
420
+ })),
421
+ countPopulations: countPopulationIds.map((id) => {
422
+ const population = populations.get(id);
423
+ return { id, subject: population.subject, unit: population.unit, attributes: population.attributes };
424
+ }),
425
+ exposureBases: exposureBasisIds.map((id) => {
426
+ const basis = exposureBases.get(id);
427
+ return { id, basis: basis.basis, unit: basis.unit, attributes: basis.attributes };
428
+ }),
429
+ amountBases: amountBasisIds.map((id) => {
430
+ const basis = amountBases.get(id);
431
+ return {
432
+ id,
433
+ currency: basis.currency,
434
+ perspective: basis.perspective,
435
+ components: basis.components,
436
+ attributes: basis.attributes,
437
+ };
438
+ }),
439
+ derivedMeasures: selectedDerivations,
440
+ };
441
+ const frozenScope = deepFreeze(scope);
442
+ calculationScopesByInstanceId.set(instance.id, frozenScope);
443
+ calculationFingerprints[instance.id] = tag("diagnostic-calculation", "calculation", frozenScope);
444
+ }
445
+ return {
446
+ formulaFingerprints: deepFreeze(formulaFingerprints),
447
+ calculationFingerprints: deepFreeze(sortedRecord(Object.entries(calculationFingerprints))),
448
+ definitionIntegrity: tag("diagnostic-definition", "definition", definition),
449
+ calculationScopesByInstanceId,
450
+ calculationDependenciesByInstanceId,
451
+ evaluationDependenciesByInstanceId,
452
+ };
453
+ }
454
+ //# sourceMappingURL=diagnosticIdentity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnosticIdentity.js","sourceRoot":"","sources":["../src/diagnosticIdentity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { CompiledDiagnosticDefinition } from "./diagnosticDefinitions.js";
2
+ export interface DiagnosticNormalizedPeriod {
3
+ readonly label: string;
4
+ readonly coordinate: number;
5
+ }
6
+ type PeriodSide = "origin" | "valuation";
7
+ export declare function normalizeDiagnosticPeriod(definition: CompiledDiagnosticDefinition, side: PeriodSide, label: string): DiagnosticNormalizedPeriod;
8
+ export declare function diagnosticDevelopmentAge(definition: CompiledDiagnosticDefinition, origin: string, valuation: string): {
9
+ readonly origin: DiagnosticNormalizedPeriod;
10
+ readonly valuation: DiagnosticNormalizedPeriod;
11
+ readonly developmentAge: number;
12
+ readonly ageUnit: string;
13
+ };
14
+ export declare function compareDiagnosticPeriods(left: DiagnosticNormalizedPeriod, right: DiagnosticNormalizedPeriod): number;
15
+ export {};
16
+ //# sourceMappingURL=diagnosticPeriods.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnosticPeriods.d.ts","sourceRoot":"","sources":["../src/diagnosticPeriods.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAwB,MAAM,4BAA4B,CAAC;AAIrG,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,KAAK,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAyEzC,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,4BAA4B,EACxC,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,GACZ,0BAA0B,CAG5B;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,4BAA4B,EACxC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB;IAAE,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,0BAA0B,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAiB5J;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,0BAA0B,GAAG,MAAM,CAEpH"}
@@ -0,0 +1,98 @@
1
+ import { assertCompiledDiagnosticDefinition } from "./diagnosticDefinitions.js";
2
+ import { DiagnosticValidationError } from "./types.js";
3
+ function calendarCoordinate(label, cadence, anchor) {
4
+ let year;
5
+ let start;
6
+ let width;
7
+ if (cadence === "year") {
8
+ const match = /^(\d{4})$/.exec(label);
9
+ if (!match)
10
+ return null;
11
+ year = Number(match[1]);
12
+ start = year * 12;
13
+ width = 12;
14
+ }
15
+ else if (cadence === "month") {
16
+ const match = /^(\d{4})-(0[1-9]|1[0-2])$/.exec(label);
17
+ if (!match)
18
+ return null;
19
+ year = Number(match[1]);
20
+ start = year * 12 + Number(match[2]) - 1;
21
+ width = 1;
22
+ }
23
+ else {
24
+ const compact = /^(\d{4})Q([1-4])$/.exec(label);
25
+ const hyphenated = /^(\d{4})-Q([1-4])$/.exec(label);
26
+ const first = /^Q([1-4]) (\d{4})$/.exec(label);
27
+ const match = compact ?? hyphenated ?? first;
28
+ if (!match)
29
+ return null;
30
+ const quarterFirst = match === first;
31
+ year = Number(match[quarterFirst ? 2 : 1]);
32
+ const quarter = Number(match[quarterFirst ? 1 : 2]);
33
+ start = year * 12 + (quarter - 1) * 3;
34
+ width = 3;
35
+ }
36
+ if (year < 1 || year > 9999)
37
+ return null;
38
+ return start + (anchor === "end" ? width : 0);
39
+ }
40
+ function normalizeWithAxis(axis, side, label) {
41
+ if (axis.kind === "calendar") {
42
+ const cadence = side === "origin" ? axis.originCadence : axis.valuationCadence;
43
+ const anchor = side === "origin" ? axis.originAnchor : axis.valuationAnchor;
44
+ const coordinate = calendarCoordinate(label, cadence, anchor);
45
+ if (coordinate === null)
46
+ throw new DiagnosticValidationError([{
47
+ domain: "input",
48
+ code: "invalid-period",
49
+ path: `$.${side}`,
50
+ message: `Invalid ${cadence} ${side} label ${JSON.stringify(label)}`,
51
+ }]);
52
+ const canonicalLabel = cadence === "quarter"
53
+ ? (() => {
54
+ const startCoordinate = calendarCoordinate(label, cadence, "start");
55
+ const year = Math.floor(startCoordinate / 12);
56
+ return `${String(year).padStart(4, "0")}Q${Math.floor((startCoordinate % 12) / 3) + 1}`;
57
+ })()
58
+ : label;
59
+ return Object.freeze({ label: canonicalLabel, coordinate });
60
+ }
61
+ const catalog = side === "origin" ? axis.origins : axis.valuations;
62
+ const item = catalog.find((coordinate) => coordinate.label === label || coordinate.aliases?.includes(label));
63
+ if (!item)
64
+ throw new DiagnosticValidationError([{
65
+ domain: "input",
66
+ code: "invalid-period",
67
+ path: `$.${side}`,
68
+ message: `Unknown ordered-axis ${side} label ${JSON.stringify(label)}`,
69
+ }]);
70
+ return Object.freeze({ label: item.label, coordinate: item.coordinate });
71
+ }
72
+ export function normalizeDiagnosticPeriod(definition, side, label) {
73
+ assertCompiledDiagnosticDefinition(definition);
74
+ return normalizeWithAxis(definition.definition.periodAxis, side, label);
75
+ }
76
+ export function diagnosticDevelopmentAge(definition, origin, valuation) {
77
+ const normalizedOrigin = normalizeDiagnosticPeriod(definition, "origin", origin);
78
+ const normalizedValuation = normalizeDiagnosticPeriod(definition, "valuation", valuation);
79
+ const axis = definition.definition.periodAxis;
80
+ const developmentAge = normalizedValuation.coordinate - normalizedOrigin.coordinate + axis.ageOffset;
81
+ if (!Number.isSafeInteger(developmentAge) || developmentAge < 0)
82
+ throw new DiagnosticValidationError([{
83
+ domain: "input",
84
+ code: "invalid-period",
85
+ path: "$.valuation",
86
+ message: "Valuation period precedes origin period or development age is unsafe",
87
+ }]);
88
+ return Object.freeze({
89
+ origin: normalizedOrigin,
90
+ valuation: normalizedValuation,
91
+ developmentAge,
92
+ ageUnit: axis.ageUnit,
93
+ });
94
+ }
95
+ export function compareDiagnosticPeriods(left, right) {
96
+ return left.coordinate - right.coordinate || (left.label < right.label ? -1 : left.label > right.label ? 1 : 0);
97
+ }
98
+ //# sourceMappingURL=diagnosticPeriods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnosticPeriods.js","sourceRoot":"","sources":["../src/diagnosticPeriods.ts"],"names":[],"mappings":"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"}