@actuarial-ts/core 0.7.0 → 0.8.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 (115) hide show
  1. package/README.md +46 -2
  2. package/dist/analysisRecipe.d.ts +55 -0
  3. package/dist/analysisRecipe.d.ts.map +1 -0
  4. package/dist/analysisRecipe.js +627 -0
  5. package/dist/analysisRecipe.js.map +1 -0
  6. package/dist/classifications.d.ts +30 -0
  7. package/dist/classifications.d.ts.map +1 -0
  8. package/dist/classifications.js +207 -0
  9. package/dist/classifications.js.map +1 -0
  10. package/dist/customizationContracts.d.ts +749 -0
  11. package/dist/customizationContracts.d.ts.map +1 -0
  12. package/dist/customizationContracts.js +19 -0
  13. package/dist/customizationContracts.js.map +1 -0
  14. package/dist/descriptiveStatistics.d.ts +8 -0
  15. package/dist/descriptiveStatistics.d.ts.map +1 -0
  16. package/dist/descriptiveStatistics.js +283 -0
  17. package/dist/descriptiveStatistics.js.map +1 -0
  18. package/dist/diagnosticAggregation.d.ts.map +1 -1
  19. package/dist/diagnosticAggregation.js +16 -0
  20. package/dist/diagnosticAggregation.js.map +1 -1
  21. package/dist/diagnosticFreeze.d.ts +4 -0
  22. package/dist/diagnosticFreeze.d.ts.map +1 -0
  23. package/dist/diagnosticFreeze.js +37 -0
  24. package/dist/diagnosticFreeze.js.map +1 -0
  25. package/dist/diagnosticIdentityStream.d.ts +4 -0
  26. package/dist/diagnosticIdentityStream.d.ts.map +1 -1
  27. package/dist/diagnosticIdentityStream.js +32 -2
  28. package/dist/diagnosticIdentityStream.js.map +1 -1
  29. package/dist/diagnosticPreparation.d.ts +21 -0
  30. package/dist/diagnosticPreparation.d.ts.map +1 -1
  31. package/dist/diagnosticPreparation.js +231 -19
  32. package/dist/diagnosticPreparation.js.map +1 -1
  33. package/dist/diagnosticReview.d.ts.map +1 -1
  34. package/dist/diagnosticReview.js +43 -25
  35. package/dist/diagnosticReview.js.map +1 -1
  36. package/dist/diagnosticReviewSources.d.ts.map +1 -1
  37. package/dist/diagnosticReviewSources.js +25 -4
  38. package/dist/diagnosticReviewSources.js.map +1 -1
  39. package/dist/diagnosticReviewStore.d.ts +2 -0
  40. package/dist/diagnosticReviewStore.d.ts.map +1 -1
  41. package/dist/diagnosticReviewStore.js +110 -36
  42. package/dist/diagnosticReviewStore.js.map +1 -1
  43. package/dist/diagnosticRunner.d.ts.map +1 -1
  44. package/dist/diagnosticRunner.js +1 -8
  45. package/dist/diagnosticRunner.js.map +1 -1
  46. package/dist/exposureEarning.d.ts +12 -0
  47. package/dist/exposureEarning.d.ts.map +1 -0
  48. package/dist/exposureEarning.js +276 -0
  49. package/dist/exposureEarning.js.map +1 -0
  50. package/dist/exposureMovements.d.ts +8 -0
  51. package/dist/exposureMovements.d.ts.map +1 -0
  52. package/dist/exposureMovements.js +70 -0
  53. package/dist/exposureMovements.js.map +1 -0
  54. package/dist/exposureRevisions.d.ts +13 -0
  55. package/dist/exposureRevisions.d.ts.map +1 -0
  56. package/dist/exposureRevisions.js +161 -0
  57. package/dist/exposureRevisions.js.map +1 -0
  58. package/dist/financialPipeline.d.ts +14 -0
  59. package/dist/financialPipeline.d.ts.map +1 -0
  60. package/dist/financialPipeline.js +75 -0
  61. package/dist/financialPipeline.js.map +1 -0
  62. package/dist/financialTerms.d.ts +20 -0
  63. package/dist/financialTerms.d.ts.map +1 -0
  64. package/dist/financialTerms.js +205 -0
  65. package/dist/financialTerms.js.map +1 -0
  66. package/dist/fnvAccumulator.d.ts.map +1 -1
  67. package/dist/fnvAccumulator.js +11 -5
  68. package/dist/fnvAccumulator.js.map +1 -1
  69. package/dist/historyPreparation.d.ts +8 -0
  70. package/dist/historyPreparation.d.ts.map +1 -0
  71. package/dist/historyPreparation.js +557 -0
  72. package/dist/historyPreparation.js.map +1 -0
  73. package/dist/index.d.ts +15 -2
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +15 -2
  76. package/dist/index.js.map +1 -1
  77. package/dist/policyPeriods.d.ts +29 -0
  78. package/dist/policyPeriods.d.ts.map +1 -0
  79. package/dist/policyPeriods.js +322 -0
  80. package/dist/policyPeriods.js.map +1 -0
  81. package/dist/populations.d.ts +11 -0
  82. package/dist/populations.d.ts.map +1 -0
  83. package/dist/populations.js +264 -0
  84. package/dist/populations.js.map +1 -0
  85. package/dist/reservingAdapter.d.ts +16 -0
  86. package/dist/reservingAdapter.d.ts.map +1 -0
  87. package/dist/reservingAdapter.js +74 -0
  88. package/dist/reservingAdapter.js.map +1 -0
  89. package/dist/version.d.ts +1 -1
  90. package/dist/version.js +1 -1
  91. package/package.json +2 -2
  92. package/src/analysisRecipe.ts +696 -0
  93. package/src/classifications.ts +231 -0
  94. package/src/customizationContracts.ts +763 -0
  95. package/src/descriptiveStatistics.ts +320 -0
  96. package/src/diagnosticAggregation.ts +16 -0
  97. package/src/diagnosticFreeze.ts +37 -0
  98. package/src/diagnosticIdentityStream.ts +37 -2
  99. package/src/diagnosticPreparation.ts +259 -26
  100. package/src/diagnosticReview.ts +49 -27
  101. package/src/diagnosticReviewSources.ts +22 -3
  102. package/src/diagnosticReviewStore.ts +139 -54
  103. package/src/diagnosticRunner.ts +1 -11
  104. package/src/exposureEarning.ts +314 -0
  105. package/src/exposureMovements.ts +78 -0
  106. package/src/exposureRevisions.ts +186 -0
  107. package/src/financialPipeline.ts +93 -0
  108. package/src/financialTerms.ts +263 -0
  109. package/src/fnvAccumulator.ts +11 -5
  110. package/src/historyPreparation.ts +645 -0
  111. package/src/index.ts +28 -1
  112. package/src/policyPeriods.ts +375 -0
  113. package/src/populations.ts +307 -0
  114. package/src/reservingAdapter.ts +98 -0
  115. package/src/version.ts +1 -1
@@ -0,0 +1,557 @@
1
+ import { auditedDiagnosticContribution, finalizeDiagnosticContributions } from "./diagnosticAggregation.js";
2
+ import { canonicalJson, fnv1a64 } from "./canonical.js";
3
+ import { HISTORICAL_DATASET_CONTRACT_VERSION, } from "./customizationContracts.js";
4
+ import { diagnosticJsonPreflight, isDiagnosticToken, isRealIsoDate, snapshotDiagnosticJson } from "./diagnosticRuntime.js";
5
+ import { DiagnosticValidationError } from "./types.js";
6
+ function compareText(left, right) {
7
+ return left === right ? 0 : left < right ? -1 : 1;
8
+ }
9
+ function recordKey(record) {
10
+ return canonicalJson([record.sourceNamespace, record.recordId]);
11
+ }
12
+ function claimEvaluationKey(record) {
13
+ return canonicalJson([record.sourceNamespace, record.claimId, record.evaluationDate]);
14
+ }
15
+ function claimKey(sourceNamespace, claimId) {
16
+ return canonicalJson([sourceNamespace, claimId]);
17
+ }
18
+ function addToMap(map, key, value) {
19
+ const current = map.get(key);
20
+ if (current === undefined)
21
+ map.set(key, [value]);
22
+ else
23
+ current.push(value);
24
+ }
25
+ function inputIssues(input) {
26
+ const issues = [...diagnosticJsonPreflight(input, "input")];
27
+ if (input.historyContractVersion !== HISTORICAL_DATASET_CONTRACT_VERSION)
28
+ issues.push({
29
+ domain: "input",
30
+ code: "invalid-configuration",
31
+ path: "$.historyContractVersion",
32
+ message: `Expected ${HISTORICAL_DATASET_CONTRACT_VERSION}`,
33
+ });
34
+ if (!isDiagnosticToken(input.datasetId))
35
+ issues.push({
36
+ domain: "input",
37
+ code: "invalid-string",
38
+ path: "$.datasetId",
39
+ message: "datasetId must be a valid token",
40
+ });
41
+ const namespaces = new Map(input.sources.map((source) => [source.namespace, source]));
42
+ if (namespaces.size !== input.sources.length)
43
+ issues.push({
44
+ domain: "input",
45
+ code: "duplicate-id",
46
+ path: "$.sources",
47
+ message: "Source namespaces must be unique",
48
+ });
49
+ if (input.evaluationDates !== undefined &&
50
+ input.evaluationDates.some((date, index) => !isRealIsoDate(date) ||
51
+ (index > 0 && input.evaluationDates[index - 1] >= date)))
52
+ issues.push({
53
+ domain: "input",
54
+ code: "invalid-period",
55
+ path: "$.evaluationDates",
56
+ message: "evaluationDates must be unique, ascending real Gregorian dates",
57
+ });
58
+ input.records.forEach((record, index) => {
59
+ const source = namespaces.get(record.sourceNamespace);
60
+ if (source === undefined)
61
+ issues.push({
62
+ domain: "input",
63
+ code: "unknown-reference",
64
+ path: `$.records[${index}].sourceNamespace`,
65
+ message: "Record references an unknown source namespace",
66
+ });
67
+ else if (source.artifactId !== record.source.artifactId)
68
+ issues.push({
69
+ domain: "input",
70
+ code: "invalid-input-relationship",
71
+ path: `$.records[${index}].source.artifactId`,
72
+ message: "Record artifact does not match its source namespace",
73
+ });
74
+ if (!isRealIsoDate(record.evaluationDate) && record.grain !== "transaction")
75
+ issues.push({
76
+ domain: "input",
77
+ code: "invalid-period",
78
+ path: `$.records[${index}].evaluationDate`,
79
+ message: "Snapshot evaluationDate must be a real Gregorian date",
80
+ });
81
+ if (!isRealIsoDate(record.effectiveDate) && record.grain === "transaction")
82
+ issues.push({
83
+ domain: "input",
84
+ code: "invalid-period",
85
+ path: `$.records[${index}].effectiveDate`,
86
+ message: "Transaction effectiveDate must be a real Gregorian date",
87
+ });
88
+ if (input.revisionPrecedence === "sequence" && !Number.isSafeInteger(record.revision.sequence))
89
+ issues.push({
90
+ domain: "input",
91
+ code: "missing-required",
92
+ path: `$.records[${index}].revision.sequence`,
93
+ message: "Sequence precedence requires a safe integer sequence",
94
+ });
95
+ if (input.revisionPrecedence === "corrected-at" && record.revision.correctedAt === undefined)
96
+ issues.push({
97
+ domain: "input",
98
+ code: "missing-required",
99
+ path: `$.records[${index}].revision.correctedAt`,
100
+ message: "Corrected-at precedence requires correctedAt",
101
+ });
102
+ if (input.revisionView.kind === "as-known" && record.revision.correctedAt === undefined)
103
+ issues.push({
104
+ domain: "input",
105
+ code: "missing-required",
106
+ path: `$.records[${index}].revision.correctedAt`,
107
+ message: "As-known revision views require correctedAt",
108
+ });
109
+ });
110
+ if (input.historyMode !== "full-snapshots" && input.evaluationDates === undefined)
111
+ issues.push({
112
+ domain: "input",
113
+ code: "missing-required",
114
+ path: "$.evaluationDates",
115
+ message: "Change history requires explicit evaluationDates",
116
+ });
117
+ return issues;
118
+ }
119
+ function precedence(record, input) {
120
+ return input.revisionPrecedence === "sequence"
121
+ ? record.revision.sequence
122
+ : record.revision.correctedAt;
123
+ }
124
+ function comparePrecedence(left, right, input) {
125
+ const a = precedence(left, input);
126
+ const b = precedence(right, input);
127
+ return a === b ? 0 : a < b ? -1 : 1;
128
+ }
129
+ function eligible(record, input) {
130
+ return (input.revisionView.kind === "restated" ||
131
+ record.revision.correctedAt <= input.revisionView.knowledgeCutoff);
132
+ }
133
+ function sumMeasures(records) {
134
+ const ids = [...new Set(records.flatMap((record) => Object.keys(record.measures)))].sort();
135
+ return Object.freeze(Object.fromEntries(ids.map((id) => {
136
+ const contributions = records
137
+ .filter((record) => Object.hasOwn(record.measures, id))
138
+ .map((record) => auditedDiagnosticContribution(`${record.sourceNamespace}:${record.recordId}`, record.measures[id], "unknown", [record.source]));
139
+ return [id, finalizeDiagnosticContributions(contributions, "unknown").value];
140
+ })));
141
+ }
142
+ function mergeDimensions(records, findings) {
143
+ const result = Object.create(null);
144
+ for (const id of [...new Set(records.flatMap((record) => Object.keys(record.dimensions ?? {})))].sort()) {
145
+ const values = records
146
+ .filter((record) => Object.hasOwn(record.dimensions ?? {}, id))
147
+ .map((record) => record.dimensions[id]);
148
+ const unique = new Map(values.map((value) => [canonicalJson(value), value]));
149
+ if (unique.size === 1)
150
+ result[id] = unique.values().next().value;
151
+ else
152
+ findings.push({
153
+ code: "ambiguous-attribution",
154
+ capability: "history-snapshots",
155
+ path: `$.records.${records[0].sourceNamespace}.${records[0].claimId}.dimensions.${id}`,
156
+ message: `Component snapshots disagree on dimension ${id}`,
157
+ });
158
+ }
159
+ return Object.freeze(result);
160
+ }
161
+ function mergeSnapshotCohort(records, findings) {
162
+ const claimRows = records.filter((record) => record.grain === "claim-snapshot");
163
+ const componentRows = records.filter((record) => record.grain === "claim-component-snapshot");
164
+ if (claimRows.length > 1 || (claimRows.length > 0 && componentRows.length > 0)) {
165
+ findings.push({
166
+ code: "ambiguous-attribution",
167
+ capability: "history-snapshots",
168
+ path: `$.records.${records[0].sourceNamespace}.${records[0].claimId}.${records[0].evaluationDate}`,
169
+ message: "Claim/evaluation has incompatible claim and component snapshot grains",
170
+ });
171
+ return null;
172
+ }
173
+ if (componentRows.length > 0) {
174
+ const components = componentRows.map((record) => record.componentId);
175
+ if (new Set(components).size !== components.length) {
176
+ findings.push({
177
+ code: "ambiguous-attribution",
178
+ capability: "history-snapshots",
179
+ path: `$.records.${records[0].sourceNamespace}.${records[0].claimId}.${records[0].evaluationDate}`,
180
+ message: "Claim/evaluation repeats a component identity",
181
+ });
182
+ return null;
183
+ }
184
+ }
185
+ const dates = (field) => [
186
+ ...new Set(records.map((record) => record[field]).filter((value) => value !== undefined)),
187
+ ];
188
+ const accidentDates = dates("accidentDate");
189
+ const reportDates = dates("reportDate");
190
+ const statuses = [...new Set(records.map((record) => record.status).filter((value) => value !== undefined))];
191
+ const relationships = [
192
+ ...new Map(records
193
+ .filter((record) => record.relationships !== undefined)
194
+ .map((record) => [canonicalJson(record.relationships), record.relationships])).values(),
195
+ ];
196
+ if (accidentDates.length > 1 || reportDates.length > 1 || statuses.length > 1 || relationships.length > 1) {
197
+ findings.push({
198
+ code: "ambiguous-attribution",
199
+ capability: "history-snapshots",
200
+ path: `$.records.${records[0].sourceNamespace}.${records[0].claimId}.${records[0].evaluationDate}`,
201
+ message: "Component snapshots disagree on claim dates, status, or relationships",
202
+ });
203
+ return null;
204
+ }
205
+ return {
206
+ sourceNamespace: records[0].sourceNamespace,
207
+ claimId: records[0].claimId,
208
+ evaluationDate: records[0].evaluationDate,
209
+ observationKind: "observed-snapshot",
210
+ accidentDate: accidentDates[0] ?? null,
211
+ reportDate: reportDates[0] ?? null,
212
+ measures: claimRows.length === 1 ? claimRows[0].measures : sumMeasures(componentRows),
213
+ status: statuses[0] ?? null,
214
+ dimensions: mergeDimensions(records, findings),
215
+ relationships: relationships[0] ?? {},
216
+ sources: records.map((record) => record.source),
217
+ };
218
+ }
219
+ function transactionObservations(input, records, findings) {
220
+ const output = [];
221
+ const byClaim = new Map();
222
+ for (const record of records)
223
+ addToMap(byClaim, claimKey(record.sourceNamespace, record.claimId), record);
224
+ const balances = new Map((input.openingBalances ?? []).map((balance) => [
225
+ claimKey(balance.sourceNamespace, balance.claimId),
226
+ balance,
227
+ ]));
228
+ for (const [key, claimRecords] of byClaim) {
229
+ const opening = balances.get(key);
230
+ if (opening === undefined) {
231
+ findings.push({
232
+ code: "missing-prerequisite",
233
+ capability: "history-changes",
234
+ path: `$.openingBalances.${claimRecords[0].sourceNamespace}.${claimRecords[0].claimId}`,
235
+ message: "Cumulative history from changes requires an opening balance",
236
+ requiredFields: ["openingBalances"],
237
+ });
238
+ continue;
239
+ }
240
+ const values = { ...opening.measures };
241
+ const ordered = [...claimRecords].sort((left, right) => compareText(left.effectiveDate, right.effectiveDate) ||
242
+ compareText(left.recordId, right.recordId));
243
+ let next = 0;
244
+ const appliedSources = [opening.source];
245
+ for (const evaluationDate of input.evaluationDates ?? []) {
246
+ while (next < ordered.length && ordered[next].effectiveDate <= evaluationDate) {
247
+ const transaction = ordered[next++];
248
+ if (transaction.effectiveDate > opening.asOfDate) {
249
+ for (const [measureId, amount] of Object.entries(transaction.measures)) {
250
+ if (amount === null || values[measureId] === null)
251
+ values[measureId] = null;
252
+ else
253
+ values[measureId] = (values[measureId] ?? 0) + amount;
254
+ }
255
+ appliedSources.push(transaction.source);
256
+ }
257
+ }
258
+ const latest = ordered[Math.max(0, next - 1)];
259
+ output.push({
260
+ sourceNamespace: opening.sourceNamespace,
261
+ claimId: opening.claimId,
262
+ evaluationDate,
263
+ observationKind: "reconstructed-from-changes",
264
+ accidentDate: latest?.accidentDate ?? null,
265
+ reportDate: latest?.reportDate ?? null,
266
+ measures: { ...values },
267
+ status: latest?.status ?? null,
268
+ dimensions: latest?.dimensions ?? {},
269
+ relationships: latest?.relationships ?? {},
270
+ sources: [...appliedSources],
271
+ });
272
+ }
273
+ }
274
+ return output;
275
+ }
276
+ function mixedObservations(input, snapshots, transactions, findings) {
277
+ const output = [];
278
+ const snapshotByClaim = new Map();
279
+ const transactionsByClaim = new Map();
280
+ for (const observation of snapshots)
281
+ addToMap(snapshotByClaim, claimKey(observation.sourceNamespace, observation.claimId), observation);
282
+ for (const transaction of transactions)
283
+ addToMap(transactionsByClaim, claimKey(transaction.sourceNamespace, transaction.claimId), transaction);
284
+ const openings = new Map((input.openingBalances ?? []).map((opening) => [claimKey(opening.sourceNamespace, opening.claimId), opening]));
285
+ const claimKeys = [...new Set([...snapshotByClaim.keys(), ...transactionsByClaim.keys()])].sort(compareText);
286
+ for (const key of claimKeys) {
287
+ const claimSnapshots = [...(snapshotByClaim.get(key) ?? [])].sort((a, b) => compareText(a.evaluationDate, b.evaluationDate));
288
+ const claimTransactions = [...(transactionsByClaim.get(key) ?? [])].sort((a, b) => compareText(a.effectiveDate, b.effectiveDate) || compareText(a.recordId, b.recordId));
289
+ const opening = openings.get(key);
290
+ let baseline;
291
+ let baselineDate = opening?.asOfDate;
292
+ let values = opening === undefined ? undefined : { ...opening.measures };
293
+ let sources = opening === undefined ? [] : [opening.source];
294
+ let applied = new Set();
295
+ for (const evaluationDate of input.evaluationDates ?? []) {
296
+ const exact = claimSnapshots.find((observation) => observation.evaluationDate === evaluationDate);
297
+ if (exact !== undefined) {
298
+ baseline = exact;
299
+ baselineDate = evaluationDate;
300
+ values = { ...exact.measures };
301
+ sources = [...exact.sources];
302
+ applied = new Set(claimTransactions.filter((transaction) => transaction.effectiveDate <= evaluationDate).map(recordKey));
303
+ output.push(exact);
304
+ continue;
305
+ }
306
+ const priorSnapshot = [...claimSnapshots].reverse().find((observation) => observation.evaluationDate < evaluationDate && (baselineDate === undefined || observation.evaluationDate > baselineDate));
307
+ if (priorSnapshot !== undefined) {
308
+ baseline = priorSnapshot;
309
+ baselineDate = priorSnapshot.evaluationDate;
310
+ values = { ...priorSnapshot.measures };
311
+ sources = [...priorSnapshot.sources];
312
+ applied = new Set(claimTransactions.filter((transaction) => transaction.effectiveDate <= priorSnapshot.evaluationDate).map(recordKey));
313
+ }
314
+ if (values === undefined) {
315
+ if (claimTransactions.some((transaction) => transaction.effectiveDate <= evaluationDate))
316
+ findings.push({
317
+ code: "missing-prerequisite",
318
+ capability: "history-changes",
319
+ path: `$.openingBalances.${claimTransactions[0].sourceNamespace}.${claimTransactions[0].claimId}`,
320
+ message: "Mixed history requires a prior snapshot or opening balance before applying changes",
321
+ requiredFields: ["prior snapshot", "openingBalances"],
322
+ });
323
+ continue;
324
+ }
325
+ let latestTransaction;
326
+ for (const transaction of claimTransactions) {
327
+ if (transaction.effectiveDate > evaluationDate || applied.has(recordKey(transaction)))
328
+ continue;
329
+ for (const [measureId, amount] of Object.entries(transaction.measures)) {
330
+ if (amount === null || values[measureId] === null)
331
+ values[measureId] = null;
332
+ else
333
+ values[measureId] = (values[measureId] ?? 0) + amount;
334
+ }
335
+ sources.push(transaction.source);
336
+ applied.add(recordKey(transaction));
337
+ latestTransaction = transaction;
338
+ }
339
+ output.push({
340
+ sourceNamespace: baseline?.sourceNamespace ?? opening.sourceNamespace,
341
+ claimId: baseline?.claimId ?? opening.claimId,
342
+ evaluationDate,
343
+ observationKind: "reconstructed-from-changes",
344
+ accidentDate: latestTransaction?.accidentDate ?? baseline?.accidentDate ?? null,
345
+ reportDate: latestTransaction?.reportDate ?? baseline?.reportDate ?? null,
346
+ measures: { ...values },
347
+ status: latestTransaction?.status ?? baseline?.status ?? null,
348
+ dimensions: latestTransaction?.dimensions ?? baseline?.dimensions ?? {},
349
+ relationships: latestTransaction?.relationships ?? baseline?.relationships ?? {},
350
+ sources: [...sources],
351
+ });
352
+ }
353
+ }
354
+ return output;
355
+ }
356
+ function addMissingSnapshotObservations(input, observations, findings) {
357
+ if (input.evaluationDates === undefined)
358
+ return;
359
+ const byClaim = new Map();
360
+ for (const observation of observations.filter((item) => item.observationKind !== "reconstructed-from-changes"))
361
+ addToMap(byClaim, claimKey(observation.sourceNamespace, observation.claimId), observation);
362
+ for (const claimObservations of byClaim.values()) {
363
+ claimObservations.sort((left, right) => compareText(left.evaluationDate, right.evaluationDate));
364
+ const exact = new Set(claimObservations.map((observation) => observation.evaluationDate));
365
+ for (const evaluationDate of input.evaluationDates) {
366
+ if (exact.has(evaluationDate))
367
+ continue;
368
+ const prior = [...claimObservations]
369
+ .reverse()
370
+ .find((observation) => observation.evaluationDate < evaluationDate);
371
+ if (prior === undefined)
372
+ continue;
373
+ if (input.missingSnapshotRecord === "carried-forward") {
374
+ const carried = snapshotDiagnosticJson({
375
+ ...prior,
376
+ evaluationDate,
377
+ observationKind: "carried-forward",
378
+ });
379
+ observations.push(carried);
380
+ claimObservations.push(carried);
381
+ claimObservations.sort((left, right) => compareText(left.evaluationDate, right.evaluationDate));
382
+ exact.add(evaluationDate);
383
+ }
384
+ else {
385
+ findings.push({
386
+ code: "missing-prerequisite",
387
+ capability: "history-snapshots",
388
+ path: `$.records.${prior.sourceNamespace}.${prior.claimId}.${evaluationDate}`,
389
+ message: "Missing snapshot remains unknown under the declared history rule",
390
+ });
391
+ }
392
+ }
393
+ }
394
+ }
395
+ function totalsByDate(rows) {
396
+ const result = Object.create(null);
397
+ for (const row of rows) {
398
+ const date = row.evaluationDate ?? row.effectiveDate;
399
+ if (date === undefined)
400
+ continue;
401
+ const dateTotals = (result[date] ??= Object.create(null));
402
+ for (const [id, value] of Object.entries(row.measures))
403
+ if (value !== null)
404
+ dateTotals[id] = (dateTotals[id] ?? 0) + value;
405
+ }
406
+ return Object.freeze(Object.fromEntries(Object.keys(result)
407
+ .sort()
408
+ .map((date) => [date, Object.freeze(result[date])])));
409
+ }
410
+ /**
411
+ * Selects immutable source revisions and assembles claim observations without
412
+ * using arrival order. Unknown input should first pass the data-package Zod
413
+ * boundary; this pure core boundary independently protects its typed contract.
414
+ */
415
+ export function prepareHistoricalDataset(input) {
416
+ const issues = inputIssues(input);
417
+ if (issues.length > 0)
418
+ throw new DiagnosticValidationError(issues);
419
+ const owned = snapshotDiagnosticJson(input);
420
+ const dispositions = [];
421
+ const selected = [];
422
+ const byRecord = new Map();
423
+ owned.records.forEach((record, index) => addToMap(byRecord, recordKey(record), { index, record }));
424
+ for (const cohort of byRecord.values()) {
425
+ const candidates = cohort.filter(({ record }) => eligible(record, owned));
426
+ for (const { record } of cohort.filter(({ record }) => !eligible(record, owned)))
427
+ dispositions.push({
428
+ sourceNamespace: record.sourceNamespace,
429
+ recordId: record.recordId,
430
+ revisionId: record.revision.id,
431
+ disposition: "after-knowledge-cutoff",
432
+ });
433
+ if (candidates.length === 0)
434
+ continue;
435
+ const maximum = candidates.reduce((best, item) => comparePrecedence(best.record, item.record, owned) < 0 ? item : best);
436
+ const winners = candidates.filter((item) => comparePrecedence(item.record, maximum.record, owned) === 0);
437
+ const uniqueWinners = new Map(winners.map((item) => [canonicalJson(item.record), item]));
438
+ if (uniqueWinners.size > 1) {
439
+ for (const { record } of winners)
440
+ dispositions.push({
441
+ sourceNamespace: record.sourceNamespace,
442
+ recordId: record.recordId,
443
+ revisionId: record.revision.id,
444
+ disposition: "conflict",
445
+ });
446
+ }
447
+ else {
448
+ const winner = winners[0].record;
449
+ if (winner.revision.action === "delete")
450
+ dispositions.push({
451
+ sourceNamespace: winner.sourceNamespace,
452
+ recordId: winner.recordId,
453
+ revisionId: winner.revision.id,
454
+ disposition: "deleted",
455
+ });
456
+ else {
457
+ selected.push(winner);
458
+ dispositions.push({
459
+ sourceNamespace: winner.sourceNamespace,
460
+ recordId: winner.recordId,
461
+ revisionId: winner.revision.id,
462
+ disposition: "selected",
463
+ });
464
+ }
465
+ for (const { record } of winners.slice(1))
466
+ dispositions.push({
467
+ sourceNamespace: record.sourceNamespace,
468
+ recordId: record.recordId,
469
+ revisionId: record.revision.id,
470
+ disposition: "duplicate",
471
+ });
472
+ }
473
+ for (const { record } of candidates.filter((item) => comparePrecedence(item.record, maximum.record, owned) < 0))
474
+ dispositions.push({
475
+ sourceNamespace: record.sourceNamespace,
476
+ recordId: record.recordId,
477
+ revisionId: record.revision.id,
478
+ disposition: "superseded",
479
+ });
480
+ }
481
+ const findings = [];
482
+ for (const disposition of dispositions.filter((item) => item.disposition === "conflict"))
483
+ findings.push({
484
+ code: "ambiguous-attribution",
485
+ capability: "history-snapshots",
486
+ path: `$.records.${disposition.sourceNamespace}.${disposition.recordId}`,
487
+ message: "Equal-precedence revisions conflict; no revision was selected",
488
+ });
489
+ selected.sort((left, right) => compareText(recordKey(left), recordKey(right)) ||
490
+ comparePrecedence(left, right, owned) ||
491
+ compareText(left.revision.id, right.revision.id));
492
+ const snapshotRecords = selected.filter((record) => record.grain !== "transaction");
493
+ const transactionRecords = selected.filter((record) => record.grain === "transaction");
494
+ let observations = [];
495
+ const byClaimEvaluation = new Map();
496
+ for (const record of snapshotRecords)
497
+ addToMap(byClaimEvaluation, claimEvaluationKey(record), record);
498
+ for (const cohort of byClaimEvaluation.values()) {
499
+ const observation = mergeSnapshotCohort(cohort, findings);
500
+ if (observation !== null)
501
+ observations.push(observation);
502
+ }
503
+ if (owned.historyMode === "mixed")
504
+ observations = mixedObservations(owned, observations, transactionRecords, findings);
505
+ else if (owned.historyMode === "changes")
506
+ observations.push(...transactionObservations(owned, transactionRecords, findings));
507
+ else
508
+ addMissingSnapshotObservations(owned, observations, findings);
509
+ observations.sort((left, right) => compareText(left.sourceNamespace, right.sourceNamespace) ||
510
+ compareText(left.claimId, right.claimId) ||
511
+ compareText(left.evaluationDate, right.evaluationDate));
512
+ dispositions.sort((left, right) => compareText(left.sourceNamespace, right.sourceNamespace) ||
513
+ compareText(left.recordId, right.recordId) ||
514
+ compareText(left.revisionId, right.revisionId) ||
515
+ compareText(left.disposition, right.disposition));
516
+ const economicObservations = observations.map(({ sources: _sources, ...observation }) => observation);
517
+ const calculationIdentityValue = {
518
+ historyContractVersion: owned.historyContractVersion,
519
+ revisionView: owned.revisionView,
520
+ revisionPrecedence: owned.revisionPrecedence,
521
+ historyMode: owned.historyMode,
522
+ missingSnapshotRecord: owned.missingSnapshotRecord,
523
+ observations: economicObservations,
524
+ };
525
+ const calculationRevisionId = `fnv1a64-jcs-v1:${fnv1a64(canonicalJson(calculationIdentityValue))}`;
526
+ const lineageIdentityValue = {
527
+ historyContractVersion: owned.historyContractVersion,
528
+ datasetId: owned.datasetId,
529
+ sources: owned.sources,
530
+ selected,
531
+ calculationRevisionId,
532
+ };
533
+ const lineageRevisionId = `fnv1a64-jcs-v1:${fnv1a64(canonicalJson(lineageIdentityValue))}`;
534
+ const result = {
535
+ historyContractVersion: HISTORICAL_DATASET_CONTRACT_VERSION,
536
+ datasetId: owned.datasetId,
537
+ datasetRevisionId: lineageRevisionId,
538
+ calculationRevisionId,
539
+ lineageRevisionId,
540
+ revisionView: owned.revisionView,
541
+ observations,
542
+ dispositions,
543
+ reconciliation: {
544
+ inputRecords: owned.records.length,
545
+ selectedRevisions: dispositions.filter((item) => item.disposition === "selected").length,
546
+ duplicateRecords: dispositions.filter((item) => item.disposition === "duplicate").length,
547
+ supersededRecords: dispositions.filter((item) => item.disposition === "superseded").length,
548
+ deletedRecords: dispositions.filter((item) => item.disposition === "deleted").length,
549
+ outputObservations: observations.length,
550
+ inputMeasureTotalsByDate: totalsByDate(selected),
551
+ outputMeasureTotalsByEvaluation: totalsByDate(observations),
552
+ },
553
+ findings,
554
+ };
555
+ return snapshotDiagnosticJson(result);
556
+ }
557
+ //# sourceMappingURL=historyPreparation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historyPreparation.js","sourceRoot":"","sources":["../src/historyPreparation.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,20 @@
1
1
  export * from "./types.js";
2
+ export * from "./customizationContracts.js";
3
+ export * from "./historyPreparation.js";
4
+ export * from "./policyPeriods.js";
5
+ export * from "./exposureEarning.js";
6
+ export * from "./exposureRevisions.js";
7
+ export * from "./exposureMovements.js";
8
+ export * from "./populations.js";
9
+ export * from "./classifications.js";
10
+ export * from "./descriptiveStatistics.js";
11
+ export * from "./reservingAdapter.js";
12
+ export * from "./financialTerms.js";
13
+ export * from "./financialPipeline.js";
14
+ export * from "./analysisRecipe.js";
2
15
  export * from "./util.js";
3
16
  export * from "./canonical.js";
4
- export * from "./diagnosticIdentityStream.js";
17
+ export { createDiagnosticIdentityValue, createDiagnosticIdentityObject, createDiagnosticIdentityArray, iterateDiagnosticIdentityJson, fingerprintDiagnosticIdentity, compareDiagnosticIdentityDocuments, compareDiagnosticIdentityJsonChunks, type DiagnosticIdentityDocument, type DiagnosticIdentityComparison, } from "./diagnosticIdentityStream.js";
5
18
  export * from "./version.js";
6
19
  export { MAX_DIAGNOSTIC_JSON_DEPTH, MAX_DIAGNOSTIC_JSON_NODES, diagnosticJsonPreflight, diagnosticRecord, hasDiagnosticOwn, isDiagnosticPlainRecord, isDiagnosticToken, isRealIsoDate, isWellFormedDiagnosticString, normalizeDiagnosticNumber, snapshotDiagnosticJson, } from "./diagnosticRuntime.js";
7
20
  export { MAX_DIAGNOSTIC_DEFINITION_EXPRESSION_NODES, MAX_DIAGNOSTIC_EXPRESSION_DEPTH, MAX_DIAGNOSTIC_EXPRESSION_NODES, } from "./diagnosticExpressions.js";
@@ -22,7 +35,7 @@ export { compareDiagnosticIdentityValues } from "./diagnosticOrdering.js";
22
35
  export { auditedDiagnosticContribution, finalizeDiagnosticContributions, } from "./diagnosticAggregation.js";
23
36
  export type { DiagnosticMeasureContribution, DiagnosticMeasureContributionBase, DiagnosticStructuralBlocker, } from "./diagnosticAggregation.js";
24
37
  export { auditDiagnosticNumber, reconcileDiagnosticExposures, } from "./diagnosticExposure.js";
25
- export { assertCompactPreparedDiagnosticData, assertPreparedDiagnosticData, getPreparedDiagnosticDataIdentity, getCompactPreparedDiagnosticDataIdentityDocument, getCompactPreparedDiagnosticDataFingerprint, materializePreparedDiagnosticData, prepareDiagnosticData, prepareDiagnosticDataCompact, verifyPreparedDiagnosticDataIntegrity, } from "./diagnosticPreparation.js";
38
+ export { assertCompactPreparedDiagnosticData, assertPreparedDiagnosticData, getPreparedDiagnosticDataIdentity, getCompactPreparedDiagnosticDataIdentityDocument, getCompactPreparedDiagnosticDataFingerprint, materializePreparedDiagnosticData, prepareDiagnosticData, prepareDiagnosticDataCompact, reselectCompactDiagnosticMetrics, selectCompactDiagnosticSourceGroups, selectCompactDiagnosticOrigins, selectCompactDiagnosticCoordinates, verifyPreparedDiagnosticDataIntegrity, } from "./diagnosticPreparation.js";
26
39
  export type { CompactPreparedDiagnosticData, DiagnosticClaimObservation, DiagnosticCompletePeriodCutoff, DiagnosticExpectedCell, DiagnosticExpectedCellAuditSnapshot, DiagnosticExposureInputAuditSnapshot, DiagnosticInputAuditRecord, DiagnosticInputDisposition, DiagnosticLossInput, DiagnosticLossInputAuditSnapshot, DiagnosticLossRecordBase, DiagnosticLossSnapshot, NormalizedDiagnosticPreparationIdentity, NormalizedDiagnosticExpectedCellIdentity, PrepareDiagnosticDataInput, PreparedDiagnosticData, PreparedDiagnosticDataContent, PreparedDiagnosticSourceCell, } from "./diagnosticPreparation.js";
27
40
  export { assertCompactMetricDiagnosticsResult, commonMaturity, commonMaturityCompact, getMetricDiagnosticsResultIdentity, getCompactMetricDiagnosticsResultIdentityDocument, runMetricDiagnostics, runMetricDiagnosticsCompact, materializeMetricDiagnosticsResult, sameMaturity, sameMaturityCompact, validateDiagnosticGroupingConfiguration, validateCompactDiagnosticGroupingConfiguration, } from "./diagnosticRunner.js";
28
41
  export { evaluateDiagnosticReviewRules, evaluateDiagnosticReviewRulesCompact } from "./diagnosticReview.js";